thibaut123456 Posted August 14, 2023 Share Posted August 14, 2023 Bonjour, Sur Prestashop 1.7.8.7, je souhaite afficher toutes les sous-catégories actives d'une catégorie d'ID 22 et tous les produits associés à chacune de ces sous-catégories sur toutes les pages du site. Mon problème : Les pages sont très longues à charger en faisant cela. > Dans l'override de FrontController.php j'ai écrit ce code : public function initContent() { parent::initContent(); $context = Context::getContext(); // Subcategories $subcategoriesNature = Category::getChildren(22, $context->language->id, true); $context->smarty->assign('subcategoriesNature', $subcategoriesNature); // Products by category $productsbyCategNature = array(); if( is_array($subcategoriesNature) && !empty($subcategoriesNature) ) { foreach( $subcategoriesNature as $categ ) { $productsbyCategNature[] = Product::getProducts($context->language->id, 0, 0, 'position', 'ASC', $categ['id_category'], true); } } $context->smarty->assign('productsbyCategNature', $productsbyCategNature); } > Et dans le header.tpl de mon thème : {if isset($subcategoriesNature) && is_array($subcategoriesNature)} {foreach from=$subcategoriesNature item=categ name=categs} <ul> {if isset($productsbyCategNature[$smarty.foreach.categs.index]) && is_array($productsbyCategNature[$smarty.foreach.categs.index])} {foreach from=$productsbyCategNature[$smarty.foreach.categs.index] item=prod name=products} <li><a href="{$link->getProductLink($prod.id_product, null, null, null, null, null, $prod.cache_default_attribute)}">{$prod.name|truncate:35:'...'}</a></li> {/foreach} {/if} </ul> {/foreach} {/if} Informations complémentaires : Mode debug désactivé Cache Smarty activé (système de fichier) Smart cache (CSS + JS) activé Optimisation Apache : activé Serveur mutualisé (sur SSD) PHP 7.4 Je n'ai pas d'erreur dans le code, tout fonctionne. Ma question : Existe-t-il une meilleure façon de coder ou autre pour gagner en temps de chargement (car là il faut plus de 4 secondes de chargement total au lieu d'environ 2 secondes) ? Merci Link to comment Share on other sites More sharing options...
wepresta Posted August 17, 2023 Share Posted August 17, 2023 On 8/14/2023 at 1:52 PM, thibaut123456 said: Bonjour, Sur Prestashop 1.7.8.7, je souhaite afficher toutes les sous-catégories actives d'une catégorie d'ID 22 et tous les produits associés à chacune de ces sous-catégories sur toutes les pages du site. Mon problème : Les pages sont très longues à charger en faisant cela. > Dans l'override de FrontController.php j'ai écrit ce code : public function initContent() { parent::initContent(); $context = Context::getContext(); // Subcategories $subcategoriesNature = Category::getChildren(22, $context->language->id, true); $context->smarty->assign('subcategoriesNature', $subcategoriesNature); // Products by category $productsbyCategNature = array(); if( is_array($subcategoriesNature) && !empty($subcategoriesNature) ) { foreach( $subcategoriesNature as $categ ) { $productsbyCategNature[] = Product::getProducts($context->language->id, 0, 0, 'position', 'ASC', $categ['id_category'], true); } } $context->smarty->assign('productsbyCategNature', $productsbyCategNature); } > Et dans le header.tpl de mon thème : {if isset($subcategoriesNature) && is_array($subcategoriesNature)} {foreach from=$subcategoriesNature item=categ name=categs} <ul> {if isset($productsbyCategNature[$smarty.foreach.categs.index]) && is_array($productsbyCategNature[$smarty.foreach.categs.index])} {foreach from=$productsbyCategNature[$smarty.foreach.categs.index] item=prod name=products} <li><a href="{$link->getProductLink($prod.id_product, null, null, null, null, null, $prod.cache_default_attribute)}">{$prod.name|truncate:35:'...'}</a></li> {/foreach} {/if} </ul> {/foreach} {/if} Informations complémentaires : Mode debug désactivé Cache Smarty activé (système de fichier) Smart cache (CSS + JS) activé Optimisation Apache : activé Serveur mutualisé (sur SSD) PHP 7.4 Je n'ai pas d'erreur dans le code, tout fonctionne. Ma question : Existe-t-il une meilleure façon de coder ou autre pour gagner en temps de chargement (car là il faut plus de 4 secondes de chargement total au lieu d'environ 2 secondes) ? Merci Il y a plusieurs points à améliorer... Pour commencer, il serait judicieux d'effectuer une mise en cache. Link to comment Share on other sites More sharing options...
Mediacom87 Posted August 17, 2023 Share Posted August 17, 2023 Bonjour, Vous souhaitez ce comportement pour une seule catégorie et seulement cette catégorie ? Car de base, le module de navigation à facette permet d'afficher tous les produits des sous-catégories, puis pour afficher l'intégralité de tous les produits, il suffit de définir le nombre de produits par page à un niveau très élevé. Après, comme souligné précédemment, il faut un serveur qui tienne la route et qui soit bien configuré pour afficher beaucoup de produits sur un page, car cela demande plus de ressources d'afficher 500 produits par page que 8. Link to comment Share on other sites More sharing options...
thibaut123456 Posted August 17, 2023 Author Share Posted August 17, 2023 il y a 28 minutes, wepresta a dit : Il y a plusieurs points à améliorer... Pour commencer, il serait judicieux d'effectuer une mise en cache. Merci pour votre réponse et à quel niveau vous pensez que je dois appliquer un cache ? Dans le PHP ? il y a 11 minutes, Mediacom87 a dit : Bonjour, Vous souhaitez ce comportement pour une seule catégorie et seulement cette catégorie ? Car de base, le module de navigation à facette permet d'afficher tous les produits des sous-catégories, puis pour afficher l'intégralité de tous les produits, il suffit de définir le nombre de produits par page à un niveau très élevé. Après, comme souligné précédemment, il faut un serveur qui tienne la route et qui soit bien configuré pour afficher beaucoup de produits sur un page, car cela demande plus de ressources d'afficher 500 produits par page que 8. En réalité je veux récupérer les sous-catégories et produits de 2 catégories principales mais pour l'exemple j'ai mis que la catégorie principale d'ID 22. Tout ce que j'ai besoin dans header.tpl est de récupérer le nom & le lien de chaque catégorie et de chaque produit sans question de pagination (je ne veux pas afficher de "bloc produit"). Link to comment Share on other sites More sharing options...
wepresta Posted August 17, 2023 Share Posted August 17, 2023 6 hours ago, thibaut123456 said: Merci pour votre réponse et à quel niveau vous pensez que je dois appliquer un cache ? Dans le PHP ? En réalité je veux récupérer les sous-catégories et produits de 2 catégories principales mais pour l'exemple j'ai mis que la catégorie principale d'ID 22. Tout ce que j'ai besoin dans header.tpl est de récupérer le nom & le lien de chaque catégorie et de chaque produit sans question de pagination (je ne veux pas afficher de "bloc produit"). Toute cette partie $productsbyCategNature = array(); if( is_array($subcategoriesNature) && !empty($subcategoriesNature) ) { foreach( $subcategoriesNature as $categ ) { $productsbyCategNature[] = Product::getProducts($context->language->id, 0, 0, 'position', 'ASC', $categ['id_category'], true); } } $context->smarty->assign('productsbyCategNature', $productsbyCategNature); 1 Link to comment Share on other sites More sharing options...
thibaut123456 Posted August 24, 2023 Author Share Posted August 24, 2023 Le 17/08/2023 à 5:07 PM, wepresta a dit : Toute cette partie $productsbyCategNature = array(); if( is_array($subcategoriesNature) && !empty($subcategoriesNature) ) { foreach( $subcategoriesNature as $categ ) { $productsbyCategNature[] = Product::getProducts($context->language->id, 0, 0, 'position', 'ASC', $categ['id_category'], true); } } $context->smarty->assign('productsbyCategNature', $productsbyCategNature); Merci pour votre réponse, pourriez-vous m'indiquer la marche à suivre pour mettre en cache cette portion de code PHP ? Et s'il existe une fonction Prestashop pour cela ? 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