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

Ordenar los productos por los más vendidos en Prestashop

Ordenar productos en Prestashop. digitalDot
Escrito por Digitaldot
4 de septiembre de 2018
Tiempo de lectura 6 min
Contenido
Contenido
Contenido

En nuestros últimos proyectos de diseño y desarrollo de tienda online sobre Prestashop, hemos tenido que mejorar la vista de categorías de productos para incluir una ordenación de los más vendidos y menos vendidos.

Para ello deberemos realizar un desarrollo haciendo override a las funciones y clases establecidas en la versión de Prestashop.

Productos más vendidos en prestashop

Comenzaremos añadiendo en nuestro Theme dentro del archivo product-sort.tpl las líneas que necesitamos. De este modo, trabajando sobre un desarrollo propio del Theme, no tendremos que preocuparnos de futuras actualizaciones de versiones en Prestashop.

<option value="sales:desc" {if $orderby eq 'sales' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Más Vendidos'}</option><option value="sales:asc" {if $orderby eq 'sales' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Menos vendidos'}</option>

Crearemos un fichero dentro de la carpeta raíz llamada override, y dentro, una llamada class y, en ella, crearemos el fichero category.php.

Listado productos prestashop. digitalDot

El fichero deberá extender la class Categoría y remplazar la función getProducts, para poder incluir nuestra cláusula de order by.

<?phpClass Category extends CategoryCore

{public function getProducts($id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, $active = true, $random = false, $random_number_products = 1, $check_access = true, Context $context = null){          if (!$context) {

$context = Context::getContext();           }              if ($check_access && !$this->checkAccess($context->customer->id)) {

return false;       }              $front = in_array($context->controller->controller_type, array('front', 'modulefront'));                $id_supplier = (int)Tools::getValue('id_supplier');            /** Return only the number of products */         if ($get_total) {

$sql = 'SELECT COUNT(cp.`id_product`) AS total FROM `'._DB_PREFIX_.'product` p                '.Shop::addSqlAssociation('product', 'p').'            LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON p.`id_product` = cp.`id_product`              WHERE cp.`id_category` = '.(int)$this->id.

($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').

($active ? ' AND product_shop.`active` = 1' : '').

($id_supplier ? 'AND p.id_supplier = '.(int)$id_supplier : '');

return (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);      }              if ($p < 1) {

$p = 1;  }                              /** Tools::strtolower is a fix for all modules which are now using lowercase values for 'orderBy' parameter */ $order_by  = Validate::isOrderBy($order_by)   ? Tools::strtolower($order_by)  : 'position';                $order_way = Validate::isOrderWay($order_way) ? Tools::strtoupper($order_way) : 'ASC';                                         $order_by_prefix = false;            if ($order_by == 'id_product' || $order_by == 'date_add' || $order_by == 'date_upd') {

$order_by_prefix = 'p';  } elseif ($order_by == 'name') {

$order_by_prefix = 'pl'; } elseif ($order_by == 'manufacturer' || $order_by == 'manufacturer_name') {

$order_by_prefix = 'm';

$order_by = 'name';       } elseif ($order_by == 'position') {

$order_by_prefix = 'cp';               }              if ($order_by == 'price') {

$order_by = 'orderprice';             }              $nb_days_new_product = Configuration::get('PS_NB_DAYS_NEW_PRODUCT');                if (!Validate::isUnsignedInt($nb_days_new_product)) {

$nb_days_new_product = 20;    }              $sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) AS quantity'.(Combination::isFeatureActive() ? ', IFNULL(product_attribute_shop.id_product_attribute, 0) AS id_product_attribute,   product_attribute_shop.minimal_quantity AS product_attribute_minimal_quantity' : '').', pl.`description`, pl.`description_short`, pl.`available_now`,          pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, image_shop.`id_image` id_image,                il.`legend` as legend, m.`name` AS manufacturer_name, cl.`name` AS category_default,                DATEDIFF(product_shop.`date_add`, DATE_SUB("'.date('Y-m-d').' 00:00:00",       INTERVAL '.(int)$nb_days_new_product.' DAY)) > 0 AS new, product_shop.price AS orderprice,  IFNULL(NULLIF(ps.quantity,"" ), 0) AS salesFROM `'._DB_PREFIX_.'category_product` cpLEFT JOIN `'._DB_PREFIX_.'product` p    ON p.`id_product` = cp.`id_product`'.Shop::addSqlAssociation('product', 'p').              (Combination::isFeatureActive() ? ' LEFT JOIN `'._DB_PREFIX_.'product_attribute_shop` product_attribute_shopON (p.`id_product` = product_attribute_shop.`id_product` AND product_attribute_shop.`default_on` = 1 AND product_attribute_shop.id_shop='.(int)$context->shop->id.')':'').''.Product::sqlStock('p', 0).'LEFT JOIN `'._DB_PREFIX_.'category_lang` cl            ON (product_shop.`id_category_default` = cl.`id_category`         AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').')LEFT JOIN `'._DB_PREFIX_.'product_lang` pl    ON (p.`id_product` = pl.`id_product`              AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').')LEFT JOIN `'._DB_PREFIX_.'image_shop` image_shop ON (image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop='.(int)$context->shop->id.')LEFT JOIN `'._DB_PREFIX_.'image_lang` il                ON (image_shop.`id_image` = il.`id_image`         AND il.`id_lang` = '.(int)$id_lang.')LEFT JOIN `'._DB_PREFIX_.'manufacturer` m            ON m.`id_manufacturer` = p.`id_manufacturer`LEFT JOIN '._DB_PREFIX_.'product_sale ps               ON ps.id_product = product_shop.id_productWHERE product_shop.`id_shop` = '.(int)$context->shop->id.'       AND cp.`id_category` = '.(int)$this->id

.($active ? ' AND product_shop.`active` = 1' : '')

.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '')

.($id_supplier ? ' AND p.id_supplier = '.(int)$id_supplier : '');

if ($random === true) {$sql .= ' ORDER BY RAND() LIMIT '.(int)$random_number_products;

} else {$sql .= ' ORDER BY '.(!empty($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.bqSQL($order_by).'` '.pSQL($order_way).'

LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n;

}

$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql, true, false);

if (!$result) {return array();

}

if ($order_by == 'orderprice') {Tools::orderbyPrice($result, $order_way);

}

/** Modify SQL result */

return Product::getProductsProperties($id_lang, $result);}

}

?>

Una vez realizado deberemos borrar nuestro archivo cache/class_index.php y con esto habremos añadido la posibilidad de mostrar a nuestros visitantes qué productos son los más vendidos y por tanto, indirectamente, los más recomendados por el resto de los clientes.

Si tenéis una tienda online y no tenéis la opción de mostrar así vuestros productos pero no os atrevéis a realizar lo que os hemos explicado, podéis contactar con el equipo de desarrollo de digitalDot y estarán encantados de solucionároslo.

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…

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…

Actualizar Prestashop últimas versiones importancia

No actualizar PrestaShop puede hundir tu negocio de la noche a la mañana

¿Crees que tu tienda online está a salvo solo porque “nunca te ha pasado nada”? Pues siento decirte que los hackers adoran a los que piensan así. Si tu Prestashop sigue en versiones antiguas (1.6, 1.7 o incluso una 8 sin actualizar), estás dejando la puerta abierta… y ni siquiera…

1 2 3 10
crossmenuchevron-down