SmythSys IT Consulting

Prestashop: últimos productos de una categoría en la Portada o página de Inicio.

Hoy te mostramos cómo agregar los últimos productos de una categoría, automáticamente, en la página de Inicio (Home) de tu página web hecha con Prestashop. Obviamente de manera gratuita.

Para ello vamos a modificar el módulo Productos Destacados (ps_feaduredproducts) y lo haremos en la versión 1.7 de Prestashop.

Empecemos.

Mostrar los últimos productos de una categoría en la página de Inicio de Prestashop.

Nosotros usamos el módulo gratuito oficial de Prestashop featuredproducts, porque el cliente no quería mostrar productos destacados.
Básicamente quería que se mostraran los productos automáticamente y no tener que estar “destacándolos”. Pero podéis o clonar ese módulo, o descargar otro similar como el de MyPresta y ver cómo modificar el código de manera similar.
Nosotros hoy lo haremos con el oficial.

  • Instalamos el módulo y lo colocamos en la posición del hoook displayHome que queramos para que se coloque en la portada.
  • Configuramos el módulo de manera que muestre el número de artículos que queremos, y de la categoría que queramos, ya que es una opción que sí permite su configuración.

Vamos a usar un override del mismo (si tuviéramos que modificar los tpls se podrían guardar modificados en /themes/tutema/modules/. Pero queremos modificar el php del módulo, y necesitamos un override.

  • Para eso creamos una carpeta en la carpeta override que está en la raíz de Prestahop con esta ruta: override/modules/ps_featuredproducts

Ahí vamos a crear un fichero con el mismo nombre que el php del módulo, o sea ps_featuredproducts.php
Con el siguiente contenido:

<?php
/**

 */

if (!defined('_PS_VERSION_')) {
    exit;
}
use PrestaShop\PrestaShop\Adapter\Category\CategoryProductSearchProvider;
use PrestaShop\PrestaShop\Core\Module\WidgetInterface;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchContext;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery;
use PrestaShop\PrestaShop\Core\Product\Search\SortOrder;

class Ps_FeaturedProductsOverride extends Ps_FeaturedProducts
{
    
    protected function getProducts()
    {
        $category = new Category((int) Configuration::get('HOME_FEATURED_CAT'));

        $searchProvider = new CategoryProductSearchProvider(
            $this->context->getTranslator(),
            $category
        );

        $context = new ProductSearchContext($this->context);

        $query = new ProductSearchQuery();

        $nProducts = Configuration::get('HOME_FEATURED_NBR');
        if ($nProducts < 0) {
            $nProducts = 12;
        }

        $query
            ->setResultsPerPage($nProducts)
            ->setPage(1)
        ;

        if (Configuration::get('HOME_FEATURED_RANDOMIZE')) {
            $query->setSortOrder(SortOrder::random());
        } else {
            $query->setSortOrder(new SortOrder('product', 'date_add', 'desc'));
        }

        $result = $searchProvider->runQuery(
            $context,
            $query
        );

        $assembler = new ProductAssembler($this->context);

        $presenterFactory = new ProductPresenterFactory($this->context);
        $presentationSettings = $presenterFactory->getPresentationSettings();
        $presenter = $presenterFactory->getPresenter();

        $products_for_template = [];

        foreach ($result->getProducts() as $rawProduct) {
            $products_for_template[] = $presenter->present(
                $presentationSettings,
                $assembler->assembleProduct($rawProduct),
                $this->context->language
            );
        }

        return $products_for_template;
    }

  
}

Os he puesto en azulo las partes que hemos modificado del fichero original. Hemos cogido una clase del módulo original y la vamos a cambiar. Para eso tenemos que llamarla igual con el final acabado en override y decir que extiende la clase origina..
O sea nuestra clase Ps_FeaturedProductsOverride extiene la clase origianl Ps_FeaturedProducts.

class Ps_FeaturedProductsOverride extends Ps_FeaturedProducts

Y luego hemos copiado la función a modificar y hemos cambiado el orden de los productos. En la original está en:

 $query->setSortOrder(new SortOrder(‘product’, ‘position’, ‘asc’));

Y nosotros lo ponemos en $query->setSortOrder(new SortOrder(‘product’, ‘date_add’, ‘desc‘));

  • Ahora limpiamos caché, ya sea por el backend o manualmente…..y ya tenemos los productos de la categoría elegida en orden descendente de la fecha de creación.

Esperamos que os sirva. Con las explicaciones dadas, creemos que si necesitáis otro tipo de modificación del módulo, podéis hacerlo vosotros sin muchos problemas.

Deja un comentario

Resumen de nuestra Política de Privacidad

  • Responsable: SmythSys IT Consulting SLNE.
  • Finalidad: Gestionar y moderar los comentarios.
  • Legitimación: Necesitas dar tu consentimiento para publicar un comentario.
  • Destinatarios: Tus datos se alojan en los servidores de OVH.
  • Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir los datos en la dirección del responsable (en nuestra política de privacidad).