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

Cómo gestionar miles de categorías en PrestaShop sin afectar el rendimiento

Cómo gestionar miles de categorías en PrestaShop sin afectar el rendimiento

En tiendas online con miles de categorías, como recambios o despieces, PrestaShop puede convertirse en un cuello de botella. No es un problema puntual, sino estructural cuando el árbol de categorías es muy grande o profundo. Según referencias públicas en GitHub y foros oficiales de PrestaShop, este comportamiento ya ha…

Cómo crear una ficha de productos para tiendas online

Cómo crear una ficha de producto para tu ecommerce

Hay fichas de producto que parecen escritas para cumplir expediente. Y luego están las que venden.La diferencia no está en “poner más texto” ni en añadir tres iconos de envío gratis y cruzar los dedos. Está en algo mucho más complejo: entender por qué alguien compra y traducirlo en una…

Caso de éxito de integración ClassicGes con PrestaShop para venta a granel

Caso de éxito de integración ClassicGes con PrestaShop para venta a granel

En digitalDot desarrollamos integraciones avanzadas ERP y ecommerce adaptadas a la lógica real de cada negocio. En este proyecto trabajamos la integración entre ClassicGes y PrestaShop para una tienda online especializada en frutos secos a granel, donde el reto principal era la gestión del inventario por múltiplos de peso. El…

Módulo para PrestaShop que permite controlar los productos destacados en la home

Módulo para PrestaShop que permite controlar los productos destacados en la home

La página de inicio de un ecommerce en PrestaShop es el punto con mayor visibilidad, tráfico y autoridad interna. Sin embargo, los módulos oficiales de productos destacados funcionan bajo lógicas automáticas como novedades, más vendidos o selección aleatoria. Eso implica una limitación importante ya que no existe un control estratégico…

Localizador personalizable

Localizador inteligente de profesionales

Hoy te presentamos un nuevo localizador (Repslocator) más preciso, más cercano y que te brindará más oportunidades. Sobra decir que el mundo es muy basto y que necesitamos que nos encuentren en él, pero, que nos encuentren bajo algunos patrones como puede ser la distancia. Por eso hemos desarrollado un…

Auditoria SEO técnica en PrestaShop para un ecommerce

Auditoría SEO técnica en un Prestashop B2B con más de 10.000 productos

En digitalDot, como agencia especializada en SEO técnico, SEM y desarrollo ecommerce, vemos un patrón que se repite en tiendas B2B construidas sobre Prestashop: “Invertimos en marketing digital, tenemos catálogo, hacemos campañas… pero las ventas no crecen como deberían.” En este caso analizamos un ecommerce B2B de equipamiento para hostelería…

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”.…

1 2 3 15
crossmenuchevron-down