[ Prestashop ] Surcharger une classe

Je voulais réaliser une liste des produits qui sont cochés en solde, mais qui n’ont pas de réduction définie dans l’onglet prix. Pour cela la fonction getPricesDrop() ne convenait pas.

J’ai donc développé une fonction qui s’appelle getProductsOnSale() que j’avais mis dans classes/Product.php. Le problème c’est que ça empêche forcément la mise à jour de Prestashop qui supprimera la fonction. Donc il faut créer un fichier Product.php dans override/classes/ et on mets ceci dans le fichier

<?php

class Product extends ProductCore {
   
    public static function getProductsOnSale($id_lang, $start, $limit)
    {
        $rq = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
        SELECT DISTINCT p.id_product as id, p.*, pl.* , t.`rate` AS tax_rate, m.`name` AS manufacturer_name, s.`name` AS supplier_name
        FROM `'
._DB_PREFIX_.'product` p
        LEFT JOIN `'
._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product`)
        LEFT JOIN `'
._DB_PREFIX_.'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
            AND tr.`id_country` = '
.(int)Country::getDefaultCountryId().'
            AND tr.`id_state` = 0)
        LEFT JOIN `'
._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
        LEFT JOIN `'
._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`)
        LEFT JOIN `'
._DB_PREFIX_.'supplier` s ON (s.`id_supplier` = p.`id_supplier`)
        LEFT JOIN `'
._DB_PREFIX_.'category_product` c ON (c.`id_product` = p.`id_product`)
        WHERE pl.`id_lang` = '
.(int)($id_lang). '
        AND p.`active` = 1 AND p.`on_sale` = 1
        ORDER BY rand()'
.
        ($limit > 0 ? ' LIMIT '.(int)($start).','.(int)($limit) : '')
        );
       
        return ($rq);
    }

}

?>

2 réflexions au sujet de « [ Prestashop ] Surcharger une classe »

  1. Bonjour,
    une fois votre fonction getProductsOnSale($id_lang, $start, $limit) créée,
    où et dans quel fichier l’appelez-vous ? Elle s’exécute toute seule ?

    Merci

  2. Il faut créer un module, vous pouvez modifier par exemple le module blocknewproducts par exemple pour appeler la fonction.

Les commentaires sont fermés.