Añadir nuevo filtro de ordenación en los productos en Prestashop

Cuando entramos a los listados de productos en Prestashop 1.7, vemos disponibles solo 5 filtros que podemos apreciar en la siguiente imagen.

Ordenación productos en Prestashop

En este ejemplo, vamos añadir un filtro nuevo para que el usuario pueda seleccionar la opción de ver los productos por fecha de creación.

Vamos al fichero => /src/Core/Product/Search/SortOrderFactory.php

Y nos encontramos la función “getDefaultSortOrders” con los métodos de ordenación por defecto.

Función => getDefaultSortOrders

Añadimos dentro de la función (dentro del return) la siguiente línea de código:

(new SortOrder('product', 'date_add', 'desc'))->setLabel(
$this->translator->trans('New', array(), 'Shop.Theme.Catalog')
),

Si os fijáis en el código, hemos añadido un nuevo filtro basado en la fecha de creación de los productos (date_add) de forma descendente (desc) con la etiqueta “New”. Por la etiqueta (texto) no os preocupéis que la podéis cambiar desde las traducciones de Prestashop.

Función modificada

Si no funciona, es porque tenéis activo el filtro (navegación por facetas / búsqueda por facetas (ps_facetedsearch)) que vemos en la columna izquierda de la tienda.

Módulo => ps_facetedsearch

Por lo tanto, tenemos que acceder al fichero:

modules/ps_facetedsearch/src/Ps_FacetedsearchProductSearchProvider.php

Donde nos encontramos la función => getAvailableSortOrders()

Función getAvailableSortOrders
Función getAvailableSortOrders

 Y añadiendo la siguiente línea de código (dentro del return de dicha función):

(new SortOrder('product', 'date_add', 'desc'))->setLabel(
$this->module->getTranslator()->trans('New', array(), 'Shop.Theme.Catalog')
),
Función getAvailableSortOrders modificada

Veremos que ahora podremos visualizar el nuevo filtro de ordenación:

Filtro nuevo añadido

Consideraciones:

  • En este “TIP” hemos tocado ficheros “originales”, lo óptimo es crear un override de los mismos siempre que se pueda.

Documento creado bajo Prestashop 1.7.3.3 bajo la plantilla por defecto.