ywan Posted August 29, 2012 Share Posted August 29, 2012 Bonjour à tous. Je ne trouve plus un module qui était présent sur Addons et qui pemettait de classer dans sa page catégorie tous les produits par sous-catégorie. Par exemple, dans la catégorie 1, si on avait sous-cat 1 et sous-cat 2, on avait ceci : Titre Sous-cat 1 Prod 1 Prod 2 Prod 3 Titre sous-cat 2 Prod 1 Prod 2 Prod 3 Existe-t il un moyen de faire cela sans passer par le module, ou quelqu’un peut il me donner l'adresse du module en question ? Pour info je suis passé sous Presta 1.4.9. Merci à tous Link to comment Share on other sites More sharing options...
ywan Posted August 30, 2012 Author Share Posted August 30, 2012 Bonjour, personne ne connait de module qui permet de faire cela ?? Link to comment Share on other sites More sharing options...
BoutiqueDuBio.fr Posted August 30, 2012 Share Posted August 30, 2012 (edited) Bonjour, J'ai déjà réalisé plusieurs fois cette manipulation, et la meilleur des façons est d'utiliser l'override du controller Category. En gros tu surcharges le controller category, en y ajoutant une liste de produits: <?php class CategoryController extends CategoryControllerCore { public function initContent() { $category = new Category(Context::getContext()->shop->getCategory(), Configuration::get('PS_LANG_DEFAULT')); $nb = (int)(Configuration::get('HOME_FEATURED_NBR')); $products = $category->getProducts(Context::getContext()->language->id, 1, ($nb ? $nb : 10)); $this->context->smarty->assign(array( 'products2' => $products, 'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 'homeSize' => Image::getSize('home'), )); parent::initContent(); } } Ensuite dans le tpl de category, tu transmets à l'include du tpl de product-list ton tableau de produits, comme ceci : {include file="$tpl_dir./product-list.tpl" products=$products2 categories=$subcategories} Et enfin dans ton template product-list, tu adaptes ton affichage en bouclant sur les subcategories et boucle sur tes produits J'espère être assez claire Par contre il s'avère difficile de le gérer par un module sauf si tu créés une page différente de category.tpl sans la gestion d'override. Edited August 30, 2012 by BoutiqueDuBio.fr (see edit history) Link to comment Share on other sites More sharing options...
ywan Posted August 30, 2012 Author Share Posted August 30, 2012 Génial, merci de ta réponse ! Je test et reviens ici si je ne comprend pas quelque chose Link to comment Share on other sites More sharing options...
ywan Posted August 30, 2012 Author Share Posted August 30, 2012 heu, par contre, le code du premier tableau s'insère dans quel fichier exactement Oo ? Link to comment Share on other sites More sharing options...
BoutiqueDuBio.fr Posted August 30, 2012 Share Posted August 30, 2012 (edited) dans prestashop tu as un répertoire "override\controllers" sur la racine de ton site. Je suis avec un version PS1.5 et le fichier existe déjà mais sur la 1.4.9 tu créé le fichier CategoryController.php Mon code est adapté sur du prestashop 1.5, si tu as des erreurs avec la 1.4 essayes de l'adapter mais normalement cela devrais être bon Edited August 30, 2012 by BoutiqueDuBio.fr (see edit history) Link to comment Share on other sites More sharing options...
ywan Posted August 30, 2012 Author Share Posted August 30, 2012 (edited) Je viens de voir du code intéressant. Tu utilises le module HOME_FEATURED pour gérer la liste produit ? Je n'ai pas activé ce module, et les codes que je viens d'envoyer dans CategoryController.php et category ne changent rien à l'affichage, et je n'ai aucune erreur. Il vaut mieux activer le module home-featured ? Egalement, je confirme que je n'ai pas beaucoup de compétences en dev, je ne sais pas vraiment comment toucher à product-list.tpl Edited August 30, 2012 by ywan (see edit history) Link to comment Share on other sites More sharing options...
BoutiqueDuBio.fr Posted August 30, 2012 Share Posted August 30, 2012 (edited) oui effectivement mais tu peux l'enlever <?php class CategoryController extends CategoryControllerCore { public function initContent() { $category = new Category(Context::getContext()->shop->getCategory(), Configuration::get('PS_LANG_DEFAULT')); $nb = 1000;// 1000 produits à l'affichage $products = $category->getProducts(Context::getContext()->language->id, 1, ($nb ? $nb : 10)); $this->context->smarty->assign(array( 'products2' => $products, 'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 'homeSize' => Image::getSize('home'), )); parent::initContent(); } } Ensuite il faut retoucher en smarty et en html le contenu de ta product-list.tpl Voici un exemple: {assign var=nbproductsbycategory value=8} {if isset($products)} <!-- Products list --> <ul id="product_list" class="clear"> {if isset($categories) && count($categories)} {foreach from=$categories item=category name=categories} {assign var=i value=0} {foreach from=$products item=product name=products} {if $product.id_category_default == $category.id_category} {if $i==0}<li class="titre-category clear">{$category.name|escape:'htmlall':'UTF-8'}</li>{/if} {if $i < $nbproductsbycategory} <li class="ajax_block_product curve single columns {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if $smarty.foreach.products.index % 2}alternate_item{else}item{/if}"> <div class="all_block"> <div class="left_block"> <a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}"> <img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" class="no_mobile" alt="{$product.legend|escape:'htmlall':'UTF-8'}" /> <img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home_mobile')}" class="mobile" alt="{$product.legend|escape:'htmlall':'UTF-8'}" /> </a> {if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if} {if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="on_sale">{l s='On sale!'}</span> {elseif isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="discount">{l s='Reduced price!'}</span>{/if} {if isset($product.online_only) && $product.online_only}<span class="online_only">{l s='Online only!'}</span>{/if} </div> <div class="center_block"> <h3><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</a></h3> {if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))} <div class="prices_block"> {if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}<span class="price" style="display: inline;">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span>{/if} </div> {/if} </div> <div class="right_block"> <p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}">{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'}</a>{if isset($product.available_for_order) && $product.available_for_order && !isset($restricted_country_mode)} {if ($product.allow_oosp || $product.quantity > 0)}<span class="availability">{l s='Available'}</span>{elseif (isset($product.quantity_all_versions) && $product.quantity_all_versions > 0)}<span class="option">{l s='Product available with different options'}</span>{else}<span class="outofstock">{l s='Out of stock'}</span>{/if}{/if} </p> <div class="buttons_block"> {if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE} {if ($product.allow_oosp || $product.quantity > 0)} <a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart.php')}?add&id_product={$product.id_product|intval}{if isset($static_token)}&token={$static_token}{/if}" title="{l s='Add to cart'}">{l s='Add to cart'}</a> {else} <span class="exclusive">{l s='Add to cart'}</span> {/if} {/if} <a class="button button_view" href="{$product.link|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a> </div> {if isset($comparator_max_item) && $comparator_max_item} <p class="compare"><input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked{/if}/> <label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label></p> {/if} </div> </div> </li> {assign var=i value=$i+1} {/if} {/if} {/foreach} {/foreach} {/if} </ul> <!-- /Products list --> {/if} Controle bien le code html/smarty que j'ai mis il est peut-etre pas adapter à ton projet niveau CSS Edited August 30, 2012 by BoutiqueDuBio.fr (see edit history) Link to comment Share on other sites More sharing options...
ywan Posted August 30, 2012 Author Share Posted August 30, 2012 Super, vraiment merci beaucoup de ton aide. Je test dès ce soir ! Link to comment Share on other sites More sharing options...
ywan Posted August 31, 2012 Author Share Posted August 31, 2012 re, il doit y avoir une erreur dans la code. J'ai bien mes deux fichiers. J'ai suivi scrupuleusement tes consignes. Je peux naviguer dans mes rubriques et sous-rubriques, mais : - dans les pages catégories, rien en change, j'ai toujours les logos des sous-catégories sans produits - quand je clic sur une sous catégorie dans laquelle il y a des produit, la page est blanche Voila pour le retour Link to comment Share on other sites More sharing options...
BoutiqueDuBio.fr Posted August 31, 2012 Share Posted August 31, 2012 Je t'envoi un de mes mails de contact en privé on en rediscute pour avoir plus d'info sur ton site Link to comment Share on other sites More sharing options...
nicolasroy4 Posted October 8, 2012 Share Posted October 8, 2012 Bonjour BoutiqueDuBio.fr, Je t'ai envoyé un MP car je souhaite faire la même chose et je ne sais pas trop comment gérer le .tpl. Merci d'avance ! Link to comment Share on other sites More sharing options...
nicolasroy4 Posted October 8, 2012 Share Posted October 8, 2012 Pour être précis j'ai fais exactement ce que tu as écrit, j'ai fais un copier coller de ton .tpl, mais dans le code source le <ul> est vide: <ul id="product_list" class="clear"> </ul> Les boucles ne chargent rien apparemment. Je suis sous PS 1.5, comme toi. Link to comment Share on other sites More sharing options...
nikeo Posted October 31, 2012 Share Posted October 31, 2012 (edited) Bonjour, Pour afficher les produits des sous catégories, il y a un autre moyen plus simple, sans passer par l'override du controller Category. Il faut installer le module "Navigation à facettes" compris dans le pack de base Prestashop. Celui-ci vient se greffer sur le hook ProductList et va ajouter tous les produits des sous-catégories dans la variable $products. Après installation, les produits des sous-catégories s'affichent automatiquement après les sous-catégories dans une page catégorie. Pour trier les produits par sous catégories, il faut modifier le template product-list.tpl comme cela a déjà été mentionné plus haut par Boutiquedubio. J'utilise la double boucle suivante avec un compteur pour gérer l'alignement des blocs. {foreach from=$subcategories item=subcat name=subcats} <h2>{$subcat.name}</h2> <ul class="product_list clear"> {counter start=0 skip=1 assign="count"} {foreach from=$products key=index item=product name=products} {if $subcat.link_rewrite == $product.category} {counter} <li class="ajax_block_product grid_products nk-{$count} {if $count is div by 3}omega{/if} clearfix"> <!-- DU CODE ICI --> </li> {/if} {/foreach} </ul> {/foreach} Bonne journée! Edited October 31, 2012 by nikeo (see edit history) Link to comment Share on other sites More sharing options...
mezzaz Posted November 13, 2012 Share Posted November 13, 2012 (edited) Bonjour tout le monde, J'ai essayer toute les méthodes que vous avez mis mais, je n'ai pas eu un résultat. Est ce que qlq un pourra m'aider? Merci Edited November 13, 2012 by mezzaz (see edit history) Link to comment Share on other sites More sharing options...
papich Posted November 15, 2012 Share Posted November 15, 2012 nikéo a tu un rendu de ta modif? est ce valable sous 1.5.2? Merci Link to comment Share on other sites More sharing options...
nikeo Posted November 16, 2012 Share Posted November 16, 2012 nikéo a tu un rendu de ta modif? est ce valable sous 1.5.2? Merci Tu peux aller voir ici : www.cuisines-bains-rangements.com @+ Link to comment Share on other sites More sharing options...
papich Posted November 16, 2012 Share Posted November 16, 2012 Merci puis je faire comme ceci en page d'accueil? Link to comment Share on other sites More sharing options...
TiboL Posted December 6, 2012 Share Posted December 6, 2012 (edited) Bonjour à tous, En effectuant les modifications, je me suis rendu compte que la navigation à facette ne marche plus du coup....Car il ne comprend pas les listes de produits des sous catégories Comment faire? Avez vous une idée? Edited December 7, 2012 by TiboL (see edit history) Link to comment Share on other sites More sharing options...
NBWD Posted June 23, 2013 Share Posted June 23, 2013 Bonjour à tous et merci pour toutes ces infos et autres tutos qui nous aident beaucoup. Je souhaite faire exactement ce qui est décrit ici mais avec une petite difficulté supplémentaire : j'ai deux niveau de sous catégories (sous-catégories et sous-sous-catégories). Donc afficher pour chaque page : Titre Catégorie 1 : - sous-catégorie 1 -- > sous-sous-cat 1 -----Produit 1 -----Produit 2 -----Produit 3 -- > sous-sous-cat 2 -----Produit 1 -----Produit 2 -----Produit 3 - sous-catégorie 2 -- > sous-sous-cat 1 -----Produit 1 -----Produit 2 -----Produit 3 -- > sous-sous-cat 2 -----Produit 1 -----Produit 2 -----Produit 3 Les codes Php donnés ici ont l'air de bien fonctionner pour le cas d'un seul niveau, mais pour deux niveau, ça ne marche pas, bien sûr. Je débute en Php et je ne sais pas s'il faut boucler dans la boucle ou si c'est plus complexe que ça... Quelqu'un a-t-il une bonne idée ? Link to comment Share on other sites More sharing options...
Recommended Posts