Ordenación de productos en Prestashop (tocando código)
Si manejas Prestashop para tiendas propias o de clientes, ya conocerás las fórmulas habituales de ordenación general, en el menú Preferencias / Productos. Obviamente, esa forma de ordenación afecta a todo el site, en todos los listados.... y no siempre es lo que queremos.
Recientemente se dió el caso de un cliente que deseaba mostrar, en la página del fabricante, los productos ordenados en función de su fecha de entrada en el catálogo. Dado que el resto del site tenía una ordenación en función de la "posición dentro de la categoría", aquí necesitábamos hacer algo "extra" para que las páginas de fabricante se ordenasen de forma distinta.
En este caso, daba la casualidad de que en portada teníamos un listado de todos los fabricantes principales, un botón de acceso directo a la página "manufacturers.php" para cada uno de ellos. Así que la solución era fácil y sencilla, sin tocar código. Bastaba con añadir varios comandos mediante GET, al link de cada uno de los botones. Es decir... si actualmente los links a la página del fabricante eran algo como:
www.tiendaonline.es/1_fabricante
Ahora pasarían a ser:
www.tiendaonline.es/1_fabricante?orderby=date_add&orderway=desc
Es decir, que en vez de listar de forma estándar, le obligo a enseñarme el listado de productos en función de la "date_add" (fecha de entrada al sistema" y de forma "desc" (nuevos primero).
(click en la imagen para ver más grande)
Aunque pudiera parecer trivial, este tipo de ordenación tiene un impacto directo sobre las ventas, al mostrar siempre en primer lugar lo más novedoso, lo último, de cada una de las marcas, llevando al final del listado a los productos más obsoletos, fuera de temporada o simplemente sin stock, que aún mantenemos por SEO o por algun otro motivo.
Adicionalmente, creímos que era buena idea también ofrecer ese tipo de ordenamiento para el resto de listados, de forma que pudiera ser el propio usuario el que lo eligiese en los desplegables "Ordenar por" que se ofrecen siempre en la cabecera o al pié de los listados de producto (depende de la template, pero normalmente están siempre arriba de todo, debajo del título de la página y sobre los listados. Para esto basta con modificar la subtemplate /themes/tu_template/product-sort.tpl que se encarga de ese trocito de código y añadir un par de líneas, de esta forma (aprox, línea 52):
<option value="date_add:desc"{if $orderby eq 'date_add' && $orderway eq 'desc'} selected="selected"{/if}>{l s='En Catálogo: +Nuevos'}</option>
<option value="date_add:asc"{if $orderby eq 'date_add' && $orderway eq 'asc'} selected="selected"{/if}>{l s='En Catálogo: +Antiguos'}</option>
Esto añade una mayor y más conveniente funcionalidad al desplegable de ordenación, un tanto parco en opciones.
Y esto me llevó a listar todos los modos de ordenación, para tenerlos "a mano" para futuras ocasiones:
· price: ordenamiento por precio
· name: ordenameinto alfabético
· quantity: ordenamiento en función de las cantidades del stock
· reference: ordenamiento alfanúmerico en función de la referencia
· date_add: ordenamiento en función de la fecha de adición de un producto al catálogo
· date_upd: ordenamient en función de la fecha de actualización de un producto en el catálogo
· manufacturer_name: ordenamiento alfanumérico en función del nombre del fabricante o marca
Como ves, es algo muy fácil y sencillo de hacer, tanto si es simplemente mejorando un link en un menú, como si es tocando el código de la plantilla para que dar mas opciones o hacer que sea la opción por defecto de una template concreta encargada de listar productos.
NOTA: esto está probado para la versión 1.6 de PS, pero es igualmente válido para cualquier otra versión.
AGRADECIMIENTO: la idea básica para este pequeño hack la obtuve (como casi siempre) en el foro de Prestasho, en concreto de este hilo: https://www.prestashop.com/forums/topic/154574-solvedsort-byorder-by-product-reference/