Como hacer Override en Prestashop

Como hacer Override en Prestashop

2vote
1 2 3 4 5
Thank you for vote this article

Una de las cosas que han cambiado en esta version de Prestashop 1.5 es la forma de hacer Override. Recordamos que utilizamos el override para modificar archivos "importantes" de prestashop pero de una manera ordenada para que si actualizamos la versión de Prestashop, no perdamos todas esas modificaciones.

1- Carpeta override

Dentro de los archivos de la tienda online, tenemos /override/, dentro de la misma tenemos classes o controllers. Dependiendo de que archivos estamos modificando lo introduciremos en el sitio correspondiente.

 

2- Ejemplo práctico, modificar el bloque "productos más vendidos"

Un ejemplo claro sería manipular el módulo de productos más vendidos. En él, podemos observar que no muestra el nombre del fabricante ni ninguna información al respecto:
override lo más vendido 

Por defecto en los tpl de Prestashop, siempre nos pasa desde el "corazón" de prestashop un array con valores. Es por ello que vamos a ver si por casualidad nos sirve alguno de estos valores.

Lo calizamos el archivo tpl en cuestion, situado en /themes/tema-por-defecto/modules/bestsellers/bestsellers.tpl:
sitiuacion best sales 

Como se muestra en la imagen vamos a poner al principio (o por el principio) del tpl el siguiente codigo:
{$best_sellers|print_r}
Tenemos un array llamada $best_sellers y al ser un array la forma para visualizarla es concatenando con un print_r.  

Al guardar, en el frontoffice podremos ver lo siguiente:
override mostrar tpl 

Observamos que no nos devuelve la información que queremos, bien, pues tendremos que hacer el famoso override.


3- Localización del fichero "maestro"

Hasta aquí todo bien, ahora es encontrar que archivo .php es el que genera ese array. Al ser un módulo llamado bestsales, vamos a ver si encontramos en /modules/ alguna carpeta que se le parezca. Pues sí, tenemos "blockbestsellers", dentra de ella tenemos el .php llamado blockbestsellers.php, lo abrimos.

En su interior vemos una linea que pone:
override hook
Pues aquí tenemos una pequeña pista, $best_sellers = $this->getBestSellers($params); 
Tenemos una funcion que la buscamos en este mismo documento que se llame:  getBestSellers.
 
Muy bien esa función es la útima del codigo .php en el que estamos. En ella vemos una línea donde carga todos los productos "más vendidos" -> ProductSale::getBestSalesLight((int)($params['cookie']->id_lang), 0, 5)))


Cuando en Prestashop veamos una sentencia tipo, ProductSale::getBestSalesLight, quiere decir que tenemos una clase o un controlador llamado ProductSale y una función que esta dentra de la misma.

 

4- Modificar la "Clase"

Ya tenemos claro como se llama la Clase, ProductSale.php,  vamos a /classes/ y ahi la tenemos.
Sobre la línea 127 tenemos la función, en concreto la llamada:  getBestSalesLight. Ahora sólo tenemos que modificar el Select para que recoja los campos de "manufacturer", en mi ejemplo quedaria:

$sql = 'SELECT p.id_product, pl.`link_rewrite`, pl.`name`, pl.`description_short`, MAX(image_shop.`id_image`) id_image, il.`legend`,
ps.`quantity` AS sales, p.`ean13`, p.`upc`, cl.`link_rewrite` AS category, m.`name` AS manufacturer_name, p.`id_manufacturer` as id_manufacturer
FROM `'._DB_PREFIX_.'product_sale` ps
LEFT JOIN `'._DB_PREFIX_.'product` p ON ps.`id_product` = p.`id_product`
'.Shop::addSqlAssociation('product', 'p').'
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` i ON (i.`id_product` = p.`id_product`)'.
Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').'
LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`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_.'category_lang` cl
ON cl.`id_category` = product_shop.`id_category_default`
AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').'
WHERE product_shop.`active` = 1
AND p.`visibility` != 'none'
AND p.`id_product` IN (
SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
WHERE cg.`id_group` '.$sql_groups.'
)
GROUP BY product_shop.id_product
ORDER BY sales DESC
LIMIT '.(int)($page_number * $nb_products).', '.(int)$nb_products;

 

Ahora viene la parte que tenemos que prestar atención, vamos a proceder a guardar el archivo, pero le damos "guardar como..." y lo guardamos dentro de:
/override/

Una vez guardado vamos a dejarlo perfecto para que funcione correctamente el Override. Primero dejaremos solo la función getBestSalesLight . Ahora añadiremos lo siguiente a la parte de arriba del todo del php:


 class ProductSale extends ProductSaleCore

{

 .....

}


Y claro está cerramos en la última línea con el paréntesis.

¡IMPORTANTE! Que siempre se me olvida y me lleva minutos saber el porqué no funciona. Tenemos que eliminar de la carpeta /cache/ el archivo -> class_index.php. Por que sinó no funciona.

 

 override final

Ahora sí, podemos ver que en el array nos devuelve el campo de fabricante, ahora sólo nos queda darle un poco de maquetación y forma, y tendremos un override bien hecho y funcionando.

Comments

  • Avatar

    Dbal max says :

    2019-04-04 13:20:33

    /hgh-supplements/

  • Avatar

    Dbal max says :

    2019-04-04 13:19:47

    /hgh-supplements/

  • Avatar

    HydroMax says :

    2019-03-22 09:40:41

    I think this is an informative post and it is very useful and knowledgeable. therefore,

  • Avatar

    julianAs says :

    2018-06-13 12:32:12

    e felicito porque has dado una clase magistral , gracias por tuZyntix side effectsbestdietpillsreviewsDiet Health Supplements

  • Avatar

    julia says :

    2018-06-13 12:16:40

    Gracias, gracias, gracias!!! eres lo máximo hacia cambios y nada que los tomababestdietpillsreviewsShred-Fx

  • Avatar

    Amelia Landyn says :

    2018-06-13 12:07:18

    zip no se puede descomprimir tiene 2 errors Forskolinfuel

  • Avatar

    Amelia Landyn says :

    2018-06-13 12:06:05

    zip no se puede descomprimir tiene 2 errors http://www.forskolinfuel-reviews.com/

  • Avatar

    Amelia Landyn says :

    2018-06-13 12:05:15

    zip no se puede descomprimir tiene 2 errors

  • Avatar

    carlos says :

    2016-03-23 01:03:18

    Mil gracias esto me ha salvado al vida!!!!

  • Avatar

    Maryeli05 says :

    2015-10-16 06:01:39

    Gracias, gracias, gracias!!! eres lo máximo hacia cambios y nada que los tomaba.... Dios te bendiga!!!!!!

  • Avatar

    Ricardo says :

    2015-04-18 12:26:41

    Te felicito porque has dado una clase magistral , gracias por tu tiempo!!!

  • Avatar

    Anaximandro says :

    2014-06-10 10:36:28

    Muy buen aporte y bien explicado. Gracias por compartir tus conocimientos.

  • Avatar

    julian says :

    2014-05-02 13:52:38

    muy bueno el artículo, gracias

  • Avatar

    Jesus Sola Marin says :

    2013-12-02 00:05:15

    El zip no se puede descomprimir tiene 2 errors

Leave a comment

Enter your name
Fill up your name
Fill up your email, we'll never public your email.
Fill up your website
Enter your comment
Enter captcha code above

¡Lo más vendido!