GhosToM Posted March 6, 2015 Share Posted March 6, 2015 Bonjour à tous, je souhaite afficher les couleurs des déclinaisons de mes produits sur la page d'accueil, en utilisant le module Home Featured. Dans la version 1.6, homefeatured.tpl inclus product-list.tpl. Dans product-list.tpl, vers la ligne 117, ce code affiche la liste des couleurs des déclinaisons : {if isset($product.color_list)} <div class="color-list-container">{$product.color_list}</div> {/if} Or, dans le cas du module homefeatured, $product.color_list n'existe pas... et donc n'affiche pas les couleurs des déclinaisons. J'ai donc essayé d'appeler la fonction suivante de FrontController.php (l.1271) : public function addColorsToProductList(&$products) Dans modules/homefeatured/homefeatured.php : public function _cacheProducts() { if (!isset(HomeFeatured::$cache_products)) { $category = new Category((int)Configuration::get('HOME_FEATURED_CAT'), (int)Context::getContext()->language->id); $nb = (int)Configuration::get('HOME_FEATURED_NBR'); if (Configuration::get('HOME_FEATURED_RANDOMIZE')) HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), null, null, false, true, true, ($nb ? $nb : 8)); else HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'position'); FrontControllerCore::addColorsToProductList(HomeFeatured::$cache_products); } if (HomeFeatured::$cache_products === false || empty(HomeFeatured::$cache_products)) return false; } Mais la ligne que j'ai ajouté : FrontControllerCore::addColorsToProductList(HomeFeatured::$cache_products); Me donne cette erreur : Strict Standards: Non-static method FrontControllerCore::addColorsToProductList() should not be called statically, assuming $this from incompatible context in /modules/homefeatured/homefeatured.php on line 131 Fatal error: Call to undefined method HomeFeatured::getColorsListCacheId() in /classes/controller/FrontController.php on line 1278 J'ai essayé de différentes façon d'appeler cette fonction mais je n'y arrive pas sans avoir une erreur... Quelqu'un a-t-il une idée ? D'avance merci. Link to comment Share on other sites More sharing options...
laurent75014 Posted March 26, 2015 Share Posted March 26, 2015 Bonjour, J'aimerais aussi afficher les couleurs des déclinaisons de mes produits sur la page d'accueil. As tu trouvé une solution ? Merci d'avance Link to comment Share on other sites More sharing options...
GhosToM Posted March 26, 2015 Author Share Posted March 26, 2015 Bonjour, J'aimerais aussi afficher les couleurs des déclinaisons de mes produits sur la page d'accueil. As tu trouvé une solution ? Merci d'avance Salut, non je n'ai pas de solution pour le moment... malheureusement Link to comment Share on other sites More sharing options...
erouvier29 Posted March 31, 2015 Share Posted March 31, 2015 (edited) Bonjour, Pour appeler la méthode addColorsToProductList(), qui n'est pas statique, vous avez besoin d'un instance de FrontController. Mais ça tombe bien, les modules en référencent une. Modifiez modules/homefeatured/homefeatured.php plutôt comme ça: public function _cacheProducts() { if (!isset(HomeFeatured::$cache_products)) { $category = new Category((int)Configuration::get('HOME_FEATURED_CAT'), (int)Context::getContext()->language->id); $nb = (int)Configuration::get('HOME_FEATURED_NBR'); if (Configuration::get('HOME_FEATURED_RANDOMIZE')) HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), null, null, false, true, true, ($nb ? $nb : 8)); else HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'position'); $this->context->controller->addColorsToProductList(HomeFeatured::$cache_products); } if (HomeFeatured::$cache_products === false || empty(HomeFeatured::$cache_products)) return false; } et le tour est joué. En complément, vous pouvez obtenir la même chose pour les Nouveautés et les Promotions en modifiant respectivement modules/blocknewproducts/blocknewproducts.php: private function getNewProducts() { if (!Configuration::get('NEW_PRODUCTS_NBR')) return; $newProducts = false; if (Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) { $newProducts = Product::getNewProducts((int) $this->context->language->id, 0, (int)Configuration::get('NEW_PRODUCTS_NBR')); $this->context->controller->addColorsToProductList($newProducts); } if (!$newProducts && Configuration::get('PS_BLOCK_NEWPRODUCTS_DISPLAY')) return; return $newProducts; } modules/blockspecials/blockspecials.php: public function hookDisplayHomeTab($params) { if (Configuration::get('PS_CATALOG_MODE')) return; if (!$this->isCached('tab.tpl', $this->getCacheId('blockspecials-tab'))) { BlockSpecials::$cache_specials = Product::getPricesDrop((int)$params['cookie']->id_lang, 0, Configuration::get('BLOCKSPECIALS_SPECIALS_NBR')); $this->context->controller->addColorsToProductList(BlockSpecials::$cache_specials); } if (BlockSpecials::$cache_specials === false) return false; return $this->display(__FILE__, 'tab.tpl', $this->getCacheId('blockspecials-tab')); } Attention, pour que ces 2 modifs soient effectives, il faut effacer (ou désactiver) le cache smarty. Cordialement Edited March 31, 2015 by erouvier29 (see edit history) 5 Link to comment Share on other sites More sharing options...
laurent75014 Posted April 1, 2015 Share Posted April 1, 2015 Super, Merci Kerawen La solution est claire, simple, l'explication est précise. Et ca fonctionne Un grand merci Link to comment Share on other sites More sharing options...
mowglymx Posted April 25, 2015 Share Posted April 25, 2015 Thank you very much!!! Your solution works perfectly. I don't speak french (only spanish and little english) but it was so clear. Link to comment Share on other sites More sharing options...
Pyssou Posted October 16, 2015 Share Posted October 16, 2015 (edited) Bonjour, Je voudrai avoir vos aides car je bloque sur un probleme pareil. J'utilise le module CsHomefeatured qui va par defaut avec le theme que j'ai installé. Dans le fichier cshomefeautured.php du module j'ai le code suivant, j'ai ajouté la ligne où il y a commenté /*added*/ Quand je regarde dans mon firebug, j'ai bien un "$product.color_list", quand j'affiche cette variable, on m'affiche "1" c'est surement une variable booleen je pense. Mais je n'ai toujours pas la liste des couleurs, je pense que le fichier product-list-color.tpl n'est même pas appelé. public function hookDisplayHome() { if (!$this->isCached($this->name.'.tpl', $this->getCacheId())) { $id_lang = $this->context->language->id; $products = $this->callGetProductList(); if (!isset($this->config->title_block->$id_lang) || $this->config->title_block->$id_lang == '') $id_lang = Configuration::get('PS_LANG_DEFAULT'); if (!isset(CsHomeFeatured::$cache_filter_products)) CsHomeFeatured::$cache_filter_products = $products; $this->context->controller->addColorsToProductList(CsHomeFeatured::$cache_filter_products); /* added */ if ($this->config->display_big_product == 1 && !empty($this->product_list)) { $w_big_product = $this->size_big_product; $array_id_product = explode('-', $this->config->input_product_list); $big_product = $this->getBigProduct($id_lang, $array_id_product, 1); $this->context->smarty->assign(array( 'cs_big_product'.$this->name => reset($big_product) )); } else $w_big_product = 0; $this->context->smarty->assign(array( 'cs_products' => $products, 'cs_config' => $this->config, 'cs_title' => (isset($this->config->title_block->$id_lang) ? $this->config->title_block->$id_lang : $this->config->title_block), 'w_big_product' => $w_big_product, 'cs_id' => $this->name )); } if (CsHomeFeatured::$cache_filter_products === false) return false; return $this->display(__FILE__, $this->name.'.tpl', $this->getCacheId()); } Merci d'avance pour vos aides. Edited October 16, 2015 by Pyssou (see edit history) Link to comment Share on other sites More sharing options...
francketlys Posted April 28, 2018 Share Posted April 28, 2018 (edited) On 2015/3/31 at 8:19 AM, erouvier29 said: Bonjour, Pour appeler la méthode addColorsToProductList(), qui n'est pas statique, vous avez besoin d'un instance de FrontController. Mais ça tombe bien, les modules en référencent une. Modifiez modules/homefeatured/homefeatured.php plutôt comme ça: public function _cacheProducts() { if (!isset(HomeFeatured::$cache_products)) { $category = new Category((int)Configuration::get('HOME_FEATURED_CAT'), (int)Context::getContext()->language->id); $nb = (int)Configuration::get('HOME_FEATURED_NBR'); if (Configuration::get('HOME_FEATURED_RANDOMIZE')) HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), null, null, false, true, true, ($nb ? $nb : 8)); else HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'position'); $this->context->controller->addColorsToProductList(HomeFeatured::$cache_products); } if (HomeFeatured::$cache_products === false || empty(HomeFeatured::$cache_products)) return false; } et le tour est joué. En complément, vous pouvez obtenir la même chose pour les Nouveautés et les Promotions en modifiant respectivement modules/blocknewproducts/blocknewproducts.php: private function getNewProducts() { if (!Configuration::get('NEW_PRODUCTS_NBR')) return; $newProducts = false; if (Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) { $newProducts = Product::getNewProducts((int) $this->context->language->id, 0, (int)Configuration::get('NEW_PRODUCTS_NBR')); $this->context->controller->addColorsToProductList($newProducts); } if (!$newProducts && Configuration::get('PS_BLOCK_NEWPRODUCTS_DISPLAY')) return; return $newProducts; } modules/blockspecials/blockspecials.php: public function hookDisplayHomeTab($params) { if (Configuration::get('PS_CATALOG_MODE')) return; if (!$this->isCached('tab.tpl', $this->getCacheId('blockspecials-tab'))) { BlockSpecials::$cache_specials = Product::getPricesDrop((int)$params['cookie']->id_lang, 0, Configuration::get('BLOCKSPECIALS_SPECIALS_NBR')); $this->context->controller->addColorsToProductList(BlockSpecials::$cache_specials); } if (BlockSpecials::$cache_specials === false) return false; return $this->display(__FILE__, 'tab.tpl', $this->getCacheId('blockspecials-tab')); } Attention, pour que ces 2 modifs soient effectives, il faut effacer (ou désactiver) le cache smarty. Cordialement Bonjour, J'ai site sous prestashop, et j'ai trouvé votre poste vraiment génial, comme j'ai un très faible niveau en prog, j'ai souvent des soucis sur la maintenance. Et en voilà une question que j'aimerais vous poser. J'ai suivi votre tuto, l'affichage marche très bien, je vous suis très reconnaissant. J'ai juste un petit problème: Les affichages des attributs disparaissent petit à petit que sur la homepage ou dans la liste des produits catégorie/recherche/marque, quand je vide le cache, ça revient. Alors ma question est: Est-ce qu'il y a un moyen d'éviter cette disparaition progressive d'affichage d'attributs suite à ce type de modification? Je vous remercie d'avance pour votre aide. Franck https://www.francketlys.com Edited April 28, 2018 by francketlys (see edit history) 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