Mind And Go Posted December 4, 2011 Share Posted December 4, 2011 Bonjour, Je cherche à rajouter une page dans prestashop qui affiche les produits packs. J'ai donc procédé de la façon suivante : Une nouvelle page product-pack.php dans la racine du site avec dedans : require(dirname(__FILE__).'/config/config.inc.php'); ControllerFactory::getController('ProductPackController')->run(); J'ai rajouté un ProductPackController dans le bon dossier. Dedans j'appelle la méthode getProducts que j'ai surchargée dans le dossier Override. Jusque là je produit bien le résultat escompté. Je parviens à afficher la liste des produits en packs MAIS lorsque je clique sur le lien de l'article je reste sur ma page. Le lien ne pointe pas vers la page article. Pourtant dans le displaycontent du controller : public function displayContent() { parent::displayContent(); self::$smarty->display(_PS_THEME_DIR_.'product-packs.tpl'); } Dans le template Smarty : {capture name=path}{l s='Package List'}{/capture} {include file="$tpl_dir./breadcrumb.tpl"} {include file="$tpl_dir./search_an.tpl"} <h1>{l s='Package List'}</h1> {if $products} {include file="$tpl_dir./product-sort.tpl"} {include file="$tpl_dir./product-list.tpl" products=$products} {include file="$tpl_dir./pagination.tpl"} {else} <p class="warning">{l s='No packages.'}</p> {/if} Donc en somme je devrai me retrouver avec le template product-list.tpl qui intercepte la liste des produits, ce qu'il semble se produire hors mis ce problème qui ne renvoie pas vers la page de détail d'un article. Merci d'avance de votre aide. Link to comment Share on other sites More sharing options...
luci1 Posted December 5, 2011 Share Posted December 5, 2011 Bonjour, As-tu activé le mode développement ? As-tu un ou des messages d'erreur ? J'ai rajouté un ProductPackController dans le bon dossier. Dedans j'appelle la méthode getProducts que j'ai surchargée dans le dossier Override. Si tu as créé ton fichier ProductPackController dans le dossier controllers/ pourquoi définis-tu la méthode getProducts dans le dossier /override ? Link to comment Share on other sites More sharing options...
Mind And Go Posted December 5, 2011 Author Share Posted December 5, 2011 Bonjour, En fait j'ai suivi le cheminement de la page new-products et j'ai tenté de faire pareil. Me conseilleriez vous de mettre la requête directement dans le productpackcontroller sans passer par un overide du Product.php? Merci de votre réponse présente et future. Link to comment Share on other sites More sharing options...
luci1 Posted December 5, 2011 Share Posted December 5, 2011 Si tu surcharges la fonction getProducts de la class Product.php, c'est bien dans le dossier override/classes/ qu'il faut créer un fichier Product.php et redéfinir la fonction. Peux-tu nous donner le code de la fonction getProducts() que tu as redéfinis ? Link to comment Share on other sites More sharing options...
Mind And Go Posted December 5, 2011 Author Share Posted December 5, 2011 voili voilou : define('_CUSTOMIZE_FILE_', 0); define('_CUSTOMIZE_TEXTFIELD_', 1); class Product extends ProductCore { public static function getProducts($id_lang, $start, $limit, $orderBy, $orderWay, $id_category = false, $only_active = false, $cache_is_pack = false, $count =false) { if (!Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay)) die(Tools::displayError()); if (!Validate::isBool($cache_is_pack) OR !Validate::isBool($count)) die(Tools::displayError()); if ($orderBy == 'id_product' OR $orderBy == 'price' OR $orderBy == 'date_add') $orderByPrefix = 'p'; elseif ($orderBy == 'name') $orderByPrefix = 'pl'; elseif ($orderBy == 'position') $orderByPrefix = 'c'; if ($start < 0) $start = 0; if (!$count) { $query = 'SELECT 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`)' . ($id_category ? 'LEFT JOIN `' . _DB_PREFIX_ . 'category_product` c ON (c.`id_product` = p.`id_product`)' : '') . ' WHERE pl.`id_lang` = ' . (int) ($id_lang) . ($id_category ? ' AND c.`id_category` = ' . (int) ($id_category) : '') . ($only_active ? ' AND p.`active` = 1' : '') . ($cache_is_pack ? ' AND p.`cache_is_pack` = 1 ' : ' AND p.`cache_is_pack` = 0') . ' ORDER BY ' . (isset($orderByPrefix) ? pSQL($orderByPrefix) . '.' : '') . '`' . pSQL($orderBy) . '` ' . pSQL($orderWay) . ($limit > 0 ? ' LIMIT ' . (int) ($start) . ',' . (int) ($limit) : ''); $rq = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($query); if ($orderBy == 'price') Tools::orderbyPrice($rq, $orderWay); return ($rq); }else { $query = 'SELECT COUNT(DISTINCT p.`id_product`) AS nb 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`)' . ($id_category ? 'LEFT JOIN `' . _DB_PREFIX_ . 'category_product` c ON (c.`id_product` = p.`id_product`)' : '') . ' WHERE pl.`id_lang` = ' . (int) ($id_lang) . ($id_category ? ' AND c.`id_category` = ' . (int) ($id_category) : '') . ($only_active ? ' AND p.`active` = 1' : '') . ($cache_is_pack ? ' AND p.`cache_is_pack` = 1' : ' AND p.`cache_is_pack` = 0') . ' )'; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query); return (int) ($result['nb']); } } } Dans le principe je rajoute la possibilité de filtrer sur les packs et de compter ces derniers. Par défaut ces options sont à false et non obligatoires et ne devraient pas altérer le reste du focntionnement. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now