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

Módulo Redis Cache para mejorar el rendimiento de PrestaShop

Cómo mejorar el rendimiento de PrestaShop con el módulo Redis Cache

La velocidad de una tienda online influye directamente en la experiencia del usuario, el posicionamiento SEO y la conversión. En PrestaShop, cuando una tienda crece y empieza a trabajar con muchas categorías, productos, combinaciones o módulos, es habitual que aumenten las consultas a la base de datos y que el…

Módulo de redirecciones en PrestaShop

Módulo de redirecciones para PrestaShop: controla tus URLs sin complicarte la vida

Gestionar una tienda online en PrestaShop implica tomar decisiones constantemente, cambiar categorías, retirar productos, lanzar nuevas colecciones, modificar URLs, migrar desde otra plataforma, optimizar contenidos para SEO o reorganizar la arquitectura del ecommerce para que el usuario encuentre antes lo que busca. Todo eso está muy bien. Hasta que Google,…

Caso de éxito SEO de tienda de detalles

Caso de éxito SEO de una tienda online de detalles para eventos

Vamos a contaros el caso de una tienda online, que contacto con nuestro equipo de marketing digital, porque tiene un comportamiento claramente estacional, donde los meses de mayor actividad (de febrero a mayo) concentran buena parte de las ventas del año y necesitaban optimizar la web para estar bien posicionada…

Módulo slider responsive para PrestaShop

Módulo slider responsive para PrestaShop

Con la actual crisis, sabemos que muchos habéis optado por el lanzamiento de vuestra tienda online, y habéis apostado por Prestashop como la mejor opción para gestor CMS de vuestra tienda.   En esta ocasión y con los recientes avisos por parte de Google, queremos informaros a todos los que…

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…

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…

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…

1 2 3 11
crossmenuchevron-down