Enlace a facebook.
digitalDot diseño webLogo Diseño Web digitalDot

Límite de productos en Prestashop 1.7

Límite productos Prestashop. digitalDot
Escrito por Digitaldot
6 de junio de 2018
Tiempo de lectura 5 min
Contenido
Contenido
Contenido

Si eres de los que acabas de lanzar una tienda online, seguramente te hayan recomendado la versión de Prestashop 1.7 al tratarse de la versión LTS, y teniendo en cuenta que en principio la versión de Prestashop 1.6 caducará en Septiembre de 2018, en cuanto a mantenimiento y parches se refiere, ha sido un acierto optar por esta nueva versión.

Si eres de los que han decidido migrar de la versión 1.6 de Prestashop a la 1.7 habrás notado que una de las funcionalidades más interesantes para vuestros clientes es que ellos puedan cambiar o personalizar los productos que desean ver por página.

En Prestashop 1.6 ésta funcionalidad se encontraba dentro del archivo orden de productos, pero nuestra sorpresa ha sido comprobar que en la última versión de Prestashop no viene incluida y hemos decido mejorar la funcionalidad de la plantilla con un pequeño cambio de programación. El objetivo es poder ver, al lado de la paginación y ordenación, el listado de productos.

Productos en Prestashop. digitalDot

Comenzaremos inicialmente modificando nuestra vista de diseño de la tienda online, entramos a la carpeta themes, y dentro elegimos el tema de nuestra tienda, allí tendremos la carpeta templetes -> catalog-> y sort-orders.tpl

Una vez localizado el fichero de ordenación añadiremos justo debajo del select:

<div class="selectorproductofpage">
                    <select id="selecproductofpage{if isset($paginationId)}_{$paginationId}{/if}" class="numberofpage form-control">
                           <option value="20">20</option>
                           <option value="40">40</option>
                           <option value="60">60</option>
                           <option value="10000">Todos</option>
                    </select>
             </div>

En este caso hemos puesto todo con un value de 10000 productos por página.

Ahora debemos añadir la funcionalidad jQuery que nos permita realizar el cambio, para ello vamos a la carpeta asset-> js y dentro del fichero custom.js

Dentro de la función:

$(document).ready(function() { }

que nos indica que la tienda ha terminado de cargar. Añadimos:

       $(document).ready(function() {
             p = location.href.split('npages=');
             if(p[1] >1){
                    $('#selecproductofpage').val(p[1]);
             }else{
                    $('#selecproductofpage').val(20);
             }         
       });

Con esto conseguimos que nuestro Select esté actualizado al valor de la variable.

Ahora debemos conseguir que cuando el desplegable cambie llame a la url para cambiar el límite establecido por Prestashop:

$(document).on('change', '#selecproductofpage', function(){
             p = location.href.split('npages=');
             if(p[1] >1){
                    var newUrl = location.href.replace("npages="+p[1], "npages="+$('#selecproductofpage').val());
             }else{
                    if(location.href.indexOf("?") == -1){
                           var newUrl = location.href + "&npages="+$('#selecproductofpage').val();
                    }else{
                           var newUrl = location.href + "&npages="+$('#selecproductofpage').val();
                    }
             }
            window.location.href = newUrl;
       });

Como veréis ya tenemos en el diseño web de la categoría de nuestra tienda el selector con una funcionalidad que cambiará nuestra url en base a qué valor elijamos. Ahora debemos dotar a Prestashop de un cambio dinámico de productos por página.

Para ello vamos hacer override de la función getProductSearchVariables que encontraremos en el controlador ProductListingFrontController.

Para ello creamos la carpeta controllers dentro de la carpeta override que encontraremos en la instalación de Prestashop, y dentro una llamada front.

Límite de productos en Prestashop. digitalDot

Dentro de esta carpeta crearemos el fichero ProductListingFrontController.php

Ahora añadimos:

use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery;
use PrestaShop\PrestaShop\Core\Product\Search\Pagination;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchContext;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchResult;
use PrestaShop\PrestaShop\Core\Product\Search\Facet;
use PrestaShop\PrestaShop\Core\Product\Search\SortOrder;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchProviderInterface;
use PrestaShop\PrestaShop\Core\Product\Search\FacetsRendererInterface;
abstract class ProductListingFrontController extends ProductListingFrontControllerCore
{}

Copiaremos la función getProductSearchVariables y reemplazaremos:

$resultsPerPage = (int) Tools::getValue('resultsPerPage');
        if ($resultsPerPage <= 0 || $resultsPerPage > 36) {
            $resultsPerPage = Configuration::get('PS_PRODUCTS_PER_PAGE');
        }

Por:

$resultsPerPage = (int) Tools::getValue('resultsPerPage');
        if ($resultsPerPage <= 0 || $resultsPerPage > 36) {
            $resultsPerPage = Configuration::get('PS_PRODUCTS_PER_PAGE');
        }
        //digitalDot desarrollo paginación prestashop
        $npages = Tools::getValue('npages');
        if (isset($npages) && $npages != $resultsPerPage){
          $_SESSION['nproductpage'] = Tools::getValue('npages');
        }
        if (isset( $_SESSION['nproductpage']) && $_SESSION['nproductpage'] > 0){
          $resultsPerPage = (int) $_SESSION['nproductpage'];
      }

También debemos incorporar dos funciones para que todo funcione correctamente:

private function prepareProductForTemplate(array $rawProduct)
       {
             $product = (new ProductAssembler($this->context))
             ->assembleProduct($rawProduct)
             ;
        
             $presenter = $this->getProductPresenter();
             $settings = $this->getProductPresentationSettings();
                         return $presenter->present(
                           $settings,
                           $product,
                           $this->context->language
                           );
       }

      

      private function getProductSearchProviderFromModules($query)
       {
             $providers = Hook::exec(
                           'productSearchProvider',
                           array('query' => $query),
                           null,
                           true
                           );

             if (!is_array($providers)) {
                    $providers = array();
             }
          

             foreach ($providers as $provider) {
                    if ($provider instanceof ProductSearchProviderInterface) {
                           return $provider;
                    }
             }
            return;
       }

Ahora debemos borrar la caché de nuestra tienda online y probar si tenemos activada el número de productos por página de forma dinámica.

Lo bueno de las funciones override es que no afectarán la seguridad de nuestra tienda online ni a la fiabilidad del sistema.

Si tienes una tienda online y tienes alguna duda sobre cómo mejorar sus funcionalidades puedes ponerte en contacto con el equipo de desarrollo web de digitalDot en Murcia y seguro que podrán ayudarte.

,

Noticias relacionadas sobre Prestashop

Prestashop vs magento comparativa ecommerce

Comparativa eCommerce PrestaShop VS Magento

En digitalDot llevamos años apostando por el eCommerce, siendo uno de los servicios que más implantamos en la Región de Murcia, dedicándonos al desarrollo propio de módulos que mejoren nuestra tienda online y desarrollo de diseños web sin plantillas adaptados a la imagen corporativa de las empresas con las que…

WooCommecre vs PrestaShop

WooCommerce vs PrestaShop ¿Qué eCommerce es mejor? Guía completa

Si estás pensando en montar una tienda online, seguro que ya te han dicho eso de: “Hazla con WordPress y WooCommerce, que es gratis y sirve para todo”. Suena genial… hasta que empiezas a crecer, metes más productos, varios idiomas, filtros, integraciones y de repente tu tienda va más lenta…

digitalDot Partner de Klaviyo

Klaviyo: Plataforma para automatización de marketing digital

Si tienes una tienda online, seguro que te suena esta película: inviertes en tráfico, la gente entra, mira, añade al carrito… y desaparece. O compra una vez y no vuelve. Y mientras tanto, tú mandas algún newsletter suelto de vez en cuando, con un cupón y “a ver si cuela”.…

Personalizar PrestaShop tienda online escalable

Personalizar PrestaShop pensando en el crecimiento real de tu tienda online

Personalizar PrestaShop no es un reto técnico. Es un reto de arquitectura, negocio y visión a medio y largo plazo. La mayoría de tiendas online no fallan cuando se desarrollan, fallan cuando el negocio evoluciona y exige algo más. Ese momento llega antes o después: Cumplimiento de nuevas obligaciones legales…

Modulo para adaptar Prestashop a la Ley de impuestos en transporte

Cómo adaptar PrestaShop a la normativa del IVA en los gastos de transporte

Si tu tienda online vende productos con distintos tipos de IVA y está hecha con PrestaShop, hay una realidad incómoda que conviene conocer cuanto antes: la configuración estándar de PrestaShop no permite cumplir correctamente con la normativa española del IVA en los gastos de transporte.No es una interpretación. Es una…

Módulo facturas Proforma para PrestaShop

Módulo para facturas proforma para Prestashop

En muchos negocios es habitual que los clientes soliciten una factura proforma antes de realizar el pago, ya sea para validaciones internas, presupuestos o procesos administrativos. Las tiendas online creadas con PrestaShop no ofrecen esta funcionalidad de forma nativa sin generar previamente una factura oficial del pedido. Lo que supone…

Iconos 3d representando el vibe Coding

Vibe Coding: rápido para prototipos, débil para SEO y UX

En los últimos meses probablemente hayas escuchado hablar del vibe coding, es un código generado a partir de prompts, con un fuerte apoyo en inteligencia artificial, poco desarrollo manual y resultados sorprendentemente rápidos. Y sí, para determinados usos, puede ser realmente útil. El problema aparece cuando ese enfoque pensado para…

Hummingbird 2.0 Theme PrestaShop más rápido y accesible

Hummingbird 2.0 Theme PrestaShop más rápido y accesible

Si pensabas que Hummingbird había desaparecido, prepárate: vuelve con más fuerza, velocidad y estilo. Entre las novedades de prestashop se encuentra la versión 2.0, que no es solo un lavado de cara; es un revolcamiento completo de cómo funcionan los temas en PrestaShop. Olvídate de cargar páginas lentas o de…

IA y automatización al servicio con MCP en Prestashop

MCP en PrestaShop: Inteligencia artificial y automatización al servicio de tu tienda

Gestionar una tienda online puede ser un reto tanto para gerentes de tienda como para agencias. Los gerentes necesitan estadísticas precisas y reportes detallados, mientras que las agencias suelen tener que escribir consultas SQL, formatear resultados y actualizar paneles de control manualmente. Este proceso no solo consume tiempo, sino que…

1 2 3 14
crossmenuchevron-down