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);
}
}
?>
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);
}
}
?>
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
Il faut créer un module, vous pouvez modifier par exemple le module blocknewproducts par exemple pour appeler la fonction.