marty69 Posted December 4, 2011 Share Posted December 4, 2011 (edited) Bonjour, Humble contribution... Je commence à avoir de nombreuses catégories, du coup pour plus de lisibilité j'utilise un menu horizontal avec les liens vers les catégories principales. J'ai modifié le module blockcategories pour n'afficher en colonne de gauche que le bloc correspondant à cette catégorie principale. exemple : concrètement j'utilise le menu top de Julien Breux + bloc category de presta en colonne de gauche. J'ai pour l'instant 2 grosses catégories principales (filles de la catégorie principale "accueil") CAT A ----SS-CAT A1 ----SS-CAT A2 CAT B ----SS-CAT B1 ----SS-CAT B2 Si par exemple on est dans SS-CAT A1 ou sur un produit de cette catégorie je n' affiche que la branche CAT A ----SS-CAT A1 ----SS-CAT A2 ci joint le module blockcategories modifié PS : je suis en version 1.3.7 et n'ai testé que sur cette version, mais il est fort probable que cela fonction sur d'autres versions. Mise à jour 11/01/2012 : - correction du lien sur la catégorie principale - le module ne s'affiche plus quand on est ni dans une catégorie ni dans une fiche produit Mise à jour 10/01/2012 : - correction de pb de navigation quand un produit appartient à plusieurs catégories - correction de pb aléatoires d'affichage quand on est sur un produit - le module s'affiche maintenant en fonction du résultat de recherche d'un produit (Merci à daYmo) blockcategories.zip Edited January 11, 2012 by marty69 (see edit history) 1 Link to comment Share on other sites More sharing options...
daYmo Posted December 21, 2011 Share Posted December 21, 2011 oui j'avais fait cela moi aussi depuis le début. Le seul hic avec ton code c'est que si un produit appartient à plusieurs catégories ... y'a un petit problème de navigation. Par exemple CAT A ----SS-CAT A1 ----SS-CAT A2 CAT B ----SS-CAT B1 ----SS-CAT B2 Si un produit P appartient à la sous catégorie A1 (catégorie par défaut) ET à la sous catégorie B2 Si je navigue dans la catégorie B -> puis sous-catégorie B2 et que je clique dans la liste sur le produit P : l'arbre des catégories change pour afficher la branche CAT A ----SS-CAT A1 ----SS-CAT A2 alors que j'étais dans CAT B ----SS-CAT B1 ----SS-CAT B2 Alors qu'avec l'arbre dynamique de base cela fonctionne parfaitement... Link to comment Share on other sites More sharing options...
daYmo Posted December 22, 2011 Share Posted December 22, 2011 Voici le fichier et une bonne version de faire ce que tu fais... en un peu mieux par rapport au problème exposé plus haut. Si on accède direct à la fiche produit ou via le formulaire de recherche : les catégories affichées sont celles de sa catégorie par défaut. En revanche si on vient de l'éventuelle 2ème ou nième catégorie dans laquelle est placé ce produit, ce sera bien la branche de cette catégorie qui sera affichée. Cordialement, Damien blockcategories.zip Link to comment Share on other sites More sharing options...
timmxnizar Posted January 3, 2012 Share Posted January 3, 2012 Bonjour, Bravo pour votre boulot peut être hors sujet, mais comme vous avez travaillé dans le sujet, aurez vous une piste, pour que : si une catégories contient un seul produit => le lien de cette catégorie envoi directement sur ce produit. Merci d'avance. Link to comment Share on other sites More sharing options...
daYmo Posted January 3, 2012 Share Posted January 3, 2012 Bonjour, Une categorie avec un seul produit .... c'est quand même étrange à la base non ? Bien sûr que c'est possible mais il faut modifier pas mal de choses et c'est un comportement quelque peu inhabituel. Link to comment Share on other sites More sharing options...
marty69 Posted January 5, 2012 Author Share Posted January 5, 2012 Hello ! Désolé je viens de voir qu'il y a des posts dans ce sujet Merci pour la contribution daYmo, effectivement je n'avais pas prévu ce cas de figure. Et puis le dev c'est pas franchement mon gros fort Je vais voir ce que ca donne avec tes modifs. ceci dit c'est une version pour PS 1.4 ? ca risque de ne pas fonctionner, je tourne sur 1.3.7 Sans vouloir abuser, pourrais tu en faire une version pour 1.3 ? ou au moins indiquer le code modifié dans ta version pour l'adapter au module pour 1.3 ? Merci pour le partage en tout cas. Link to comment Share on other sites More sharing options...
timmxnizar Posted January 5, 2012 Share Posted January 5, 2012 Bonjour daYmo, en fait j'a iresolu mon problème si ça intéresse quelqu'un je posterais la réponse. Sinon pourquoi c'est etrange d'avoir une catégorie avec un seul produit? Link to comment Share on other sites More sharing options...
marty69 Posted January 6, 2012 Author Share Posted January 6, 2012 @daYmo (ou quiconque pourrait aider) Je pense avoir réussi à faire fonctionner tes modifs sur une version 1.3.7 2 autres questions : - le module blockcategories s'affiche (partiellement) sur la page d'accueil. Comment éviter cela (autrement que de cacher le module pour "index.php" dans les parametres du module en back office) ? - Comment afficher le nom de la catégorie principale en titre de bloc plutot que le nom "Catégories" ? j'imagine qu'il faut passer un paramètre au tpl, mais lequel ? existe-t-il déja ? Merci Link to comment Share on other sites More sharing options...
marty69 Posted January 10, 2012 Author Share Posted January 10, 2012 Bon à priori j'ai réussi à trouver une solution. cf module mi à jour dans le premier post. Link to comment Share on other sites More sharing options...
dark-spider Posted January 10, 2012 Share Posted January 10, 2012 Je le teste ce soir ou demain sur 1.4 Pour information, sur 1.4 ca marcher impec sauf la page produit ou il n'y avait plus rien Merci encore Marty =) Link to comment Share on other sites More sharing options...
dark-spider Posted January 10, 2012 Share Posted January 10, 2012 Fonctionne aussi sous PS 1.4 ! je n'ai plus le problème que j'avais. Sur la page d'accueil il reprend je crois le dernier menu en place, mais comme je ne l'affiche pas en page d'accueil, ca me va parfaitement !! Merci Marty =) Link to comment Share on other sites More sharing options...
divers972 Posted January 10, 2012 Share Posted January 10, 2012 Malheureusement, chez moi j'ai le même problème : - il affiche le dernier menu catégorie - quand je clique sur le header du bloc (lien vers la catégorie principale), ça me renvoie une page blanche... car le ID de la catagorie n'est pas reprise dans le lien... Avez-vous le même problème? Link to comment Share on other sites More sharing options...
jolvil Posted January 11, 2012 Share Posted January 11, 2012 Sur PS 1.4.6.2 J'ai remplacé le fichier blockcategories.php par celui de Daymo , ca fonctionne pour les categories mais cela me cause une erreur de serveur (Internal Server Error) sur la page d'accueil monsite.com/maboutique/ ou monsite.com/maboutique/fr Link to comment Share on other sites More sharing options...
marty69 Posted January 11, 2012 Author Share Posted January 11, 2012 module mis à jour : cf premier post détails : Perso je n'affiche pas le module catégories quand je ne suis pas dans une catégorie ou un produit (ex : une page cms). Dans blockcategories.php rajouter ligne 143 : else return null; Correction du lien sur la catégorie principale. Dans blockcategories.php rajouter après ligne 193 : // Add category ID to link rewrite $rootCateg->link_rewrite = $link->getCategoryLink($main_category, $rootCateg->link_rewrite); Link to comment Share on other sites More sharing options...
jolvil Posted January 11, 2012 Share Posted January 11, 2012 Oui c'est assez logique de ne pas afficher en accueil, cms... else return null; Avec cette ligne ca marche, dans le blockcategories.php de Daymo c'est à ajouter ligne 195 Link to comment Share on other sites More sharing options...
dark-spider Posted January 11, 2012 Share Posted January 11, 2012 Effectivement, j'avais ces problèmes et je ne les avais pas vu o_o Merci pour la rapidité d'action Marty et les autres pour avoir déceler sa. Page CMS ok (ils plantés) Page Catégorie OK Link to comment Share on other sites More sharing options...
shopme Posted January 24, 2012 Share Posted January 24, 2012 Bonjour! Merci pour cette super contribution, j'utilise le fichier de daymo, fonctionne tres bien sur 1.4.6.2. Par contre si j'ajoute "else return null;" ligne 195 ca plante les liens cms, il reprend le premier lien cms visité pour tous les autres. Une solution plutôt que de jouer avec les points d'accroche? voici le bout de code où il figure Merci Tools::enableCache(); if (!$this->isCached('blockcategories.tpl', $smartyCacheId)) { $maxdepth = Configuration::get('BLOCK_CATEG_MAX_DEPTH'); if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT c.id_parent, c.id_category, cl.name, cl.description, cl.link_rewrite FROM `'._DB_PREFIX_.'category` c LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND `id_lang` = '.$id_lang.') LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON (cg.`id_category` = c.`id_category`) WHERE (c.`active` = 1 OR c.`id_category` = 1) '.((int)($maxdepth) != 0 ? ' AND `level_depth` <= '.(int)($maxdepth) : '').' AND cg.`id_group` IN ('.pSQL($groups).') GROUP BY id_category ORDER BY `level_depth` ASC, c.`position` ASC') ) return; $resultParents = array(); $resultIds = array(); foreach ($result as &$row) { $resultParents[$row['id_parent']][] = &$row; $resultIds[$row['id_category']] = &$row; } if (Tools::isSubmit('id_category')) { $cookie->last_visited_category = $id_category; $smarty->assign('currentCategoryId', $cookie->last_visited_category); } elseif (Tools::isSubmit('id_product')) { if (!isset($cookie->last_visited_category) OR !Product::idIsOnCategoryId($id_product, array('0' => array('id_category' => $cookie->last_visited_category)))) { $product = new Product($id_product); if (isset($product) AND Validate::isLoadedObject($product)) $cookie->last_visited_category = (int)($product->id_category_default); } $smarty->assign('currentCategoryId', (int)($cookie->last_visited_category)); } // appears only on categories page else return null; // Get the level1 parent category of $main_category : $main_category=1; Link to comment Share on other sites More sharing options...
marty69 Posted January 24, 2012 Author Share Posted January 24, 2012 Bonjour, Comment accedes tu à tes pages CMS ? par un bloc de liens ? Si oui tes liens sont ils déclarés en liens directs (http://tondomaine/lien) ou relatifs (/lien) ? si ils sont en relatifs essaie des les passer en liens directs. Si cela vient bien de la il faudrait pourvoir ajouter le domaine au lien depuis le code ce qui serait plus propre Link to comment Share on other sites More sharing options...
shopme Posted January 24, 2012 Share Posted January 24, 2012 merci de repondre si vite Marty, j'utilise le menu horizontal et le block cms d'origine... Link to comment Share on other sites More sharing options...
marty69 Posted January 24, 2012 Author Share Posted January 24, 2012 Je n'utilise pas ce bloc. Pour vérifier je l'ai installé sur ma version de dev en local et à priori cela fonctionne. (par contre je n'ai pas activé l'url Rewrinting, peut être que cela joue) Je re-précise aussi que je suis en version 1.3.7 Link to comment Share on other sites More sharing options...
shopme Posted January 24, 2012 Share Posted January 24, 2012 chez moi ca bug avec ou sans l'url rewriting, par contre ca fonctionne bien si je force la compil de smarty (pas top en prod... lol) bon sinon je mettrai des exceptions dans les points d'accroche, mais j'aime pas quand y a des trucs bizarres.. Link to comment Share on other sites More sharing options...
marty69 Posted January 24, 2012 Author Share Posted January 24, 2012 Je n'ai toujours pas ce pb. probable qu'il faille purger une variable du cache quand on est dans le cas "else return null" Link to comment Share on other sites More sharing options...
shopme Posted January 24, 2012 Share Posted January 24, 2012 attendons peut etre d'autres reactions, si j'ai du nouveau je posterai merci Link to comment Share on other sites More sharing options...
nicolasroy4 Posted September 22, 2012 Share Posted September 22, 2012 Je ne sais pas si c'est parceque j'utilise Prestashop 1.5 mais chez moi blockcategories.php fait tout buger . Link to comment Share on other sites More sharing options...
Benoit62200 Posted October 4, 2012 Share Posted October 4, 2012 - Comment afficher le nom de la catégorie principale en titre de bloc plutot que le nom "Catégories" ? j'imagine qu'il faut passer un paramètre au tpl, mais lequel ? existe-t-il déja ? Je cherche précisément à faire cela. Comment as-tu procédé ? Je te remercie par avance ) J'ai épluché ton fichier et celui de Daymo que j'utilise.. mais je ne vois pas où ça se trouve.. Link to comment Share on other sites More sharing options...
patcarre Posted October 5, 2012 Share Posted October 5, 2012 Bonjour, Bravo pour votre boulot peut être hors sujet, mais comme vous avez travaillé dans le sujet, aurez vous une piste, pour que : si une catégories contient un seul produit => le lien de cette catégorie envoi directement sur ce produit. Merci d'avance. Bonjour, Votre solution m’intéresse. J'ai une catégories, contenant 12 sous catégories qui mènent vers mes produits. Je voudrais, à l'affichage de ma catégorie que mes liens pointent directement vers certains produits et non pas vers les sous-catégories et je pense que votre solution peut me servir. Merci d'avance. Link to comment Share on other sites More sharing options...
jomcdonald Posted December 16, 2012 Share Posted December 16, 2012 Bonjour, j'ai un problème avec le module accompagné du cache smarty. Avec le cache activé, j'ai des problèmes dans les pages fabricant. Peut importe la page fabricant à laquelle je veux accéder, je tombe toujours sur la même. En page panier, je me retrouve toujours avec le même produit même si je le supprime du panier et que j'en ajoute un autre. La seule solution est soit de désactiver le module, soit de désactiver le cache smarty ou de supprimer les fichiers dans tools->smarty->cache. Quel peut en être la cause? merci Link to comment Share on other sites More sharing options...
francis203 Posted January 12, 2013 Share Posted January 12, 2013 First of all excuse the translation Try commenting on line 322 $smarty->cache_lifetime = 31536000; // 1 Year $display = $this->display(__FILE__, 'blockcategories_footer.tpl', $smartyCacheId); Tools::restoreCacheSettings(); return $display; thus leaving it } //$smarty->cache_lifetime = 31536000; // 1 Year $display = $this->display(__FILE__, 'blockcategories_footer.tpl', $smartyCacheId); Tools::restoreCacheSettings(); return $display; I hope it works for you. Link to comment Share on other sites More sharing options...
kiamaru Posted March 7, 2013 Share Posted March 7, 2013 bonjour fonctionne avec le 1.5.3? Link to comment Share on other sites More sharing options...
zef72 Posted March 19, 2013 Share Posted March 19, 2013 Bonjour, Je cherche à n'afficher que les sous-categories de ma catégorie sélectionnée dans ce block ! Est ce que quelqu'un peut m'aider. Merci Zef Link to comment Share on other sites More sharing options...
@markito Posted March 21, 2013 Share Posted March 21, 2013 Bonjour c'est justement ce que je cherchais !! Je suis en version 1.5.3.1 Mais je n'ai pas le résultat escompté Il y t'il des modifications à apporter pour cette version ? Link to comment Share on other sites More sharing options...
@markito Posted March 21, 2013 Share Posted March 21, 2013 Petit doute comme même concernant la modification J'ai simplement écrasé mes fichiers (racine/modules/bockcategories/(le php et les 3 tpl)) par les vôtres Vidé le cache et rafraîchi... C'est bien comme ça qui faut faire ? Ou j'ai manqué une étape ? Link to comment Share on other sites More sharing options...
@markito Posted April 3, 2013 Share Posted April 3, 2013 Pas de solution pour la version 1.5....? Link to comment Share on other sites More sharing options...
Claudio DiSouza Posted April 14, 2013 Share Posted April 14, 2013 Pas de solution pour la version 1.5..3.1? Link to comment Share on other sites More sharing options...
veroe Posted June 19, 2013 Share Posted June 19, 2013 Bonjour, Je suis également intéressée par cette fonctionnalité pour la version 1.5 Link to comment Share on other sites More sharing options...
fv91410 Posted August 5, 2013 Share Posted August 5, 2013 bonjour, je suis sur la version 1.5.4.1. j'ai plusieurs catégorie avec 1 seules produits et je souhaite affiché directement le détail du produit (product.tpl). pouvez-vous m'aidé a avancez, par avance merci. Link to comment Share on other sites More sharing options...
hideo Posted September 5, 2013 Share Posted September 5, 2013 (edited) Bonjour, Tout d'abord, le code ci-dessous fonctionne sur la version 1.5.4.1 de Prestashop. Après une bonne demi-journée de recherche, j'ai finalement bidouillé la fonction "hookLeftColumn" du fichier "/modules/blockcategories/blockcategories.php" pour afficher la catégorie courante à partir du niveau 2. En prenant l'exemple de cette navigation : Accueil -- categorie 1 -- sous-categorie 1-1 -- sous-categorie 1-2 -- sous-categorie 1-2-A -- sous-categorie 1-2-B -- sous-categorie 1-2-C -- sous-categorie 1-3 -- sous-categorie 1-3-A -- sous-categorie 1-3-B -- sous-categorie 1-4 -- sous-categorie 1-5 -- categorie 2 -- categorie 3 -- sous-categorie 3-1 -- sous-categorie 3-2 -- sous-categorie 3-3 -- sous-categorie 3-3-A -- sous-categorie 3-3-B -- categorie 4 Scénario 1 : On est sur "categorie 1", on affiche : -- categorie 1 (selected) -- sous-categorie 1-1 -- sous-categorie 1-2 -- sous-categorie 1-3 -- sous-categorie 1-4 -- sous-categorie 1-5 Scénario 2 : On est sur "categorie 3", on affiche : -- categorie 3 (selected) -- sous-categorie 3-1 -- sous-categorie 3-2 -- sous-categorie 3-3 Scénario 3 : On est sur "categorie 1-3", on affiche : -- categorie 1 -- sous-categorie 1-1 -- sous-categorie 1-2 -- sous-categorie 1-3 (selected) -- sous-categorie 1-3-A -- sous-categorie 1-3-B -- sous-categorie 1-4 -- sous-categorie 1-5 ... Et ainsi de suite en fonction de la profondeur... Voici la fonction : public function hookLeftColumn($params) { $id_customer = (int)$params['cookie']->id_customer; // Get all groups for this customer and concatenate them as a string: "1,2,3..." // It is necessary to keep the group query separate from the main select query because it is used for the cache $groups = $id_customer ? implode(', ', Customer::getGroupsStatic($id_customer)) : Configuration::get('PS_UNIDENTIFIED_GROUP'); $id_product = (int)Tools::getValue('id_product', 0); $id_category = (int)Tools::getValue('id_category', 0); $id_lang = (int)$params['cookie']->id_lang; $smartyCacheId = 'blockcategories|'.$this->context->shop->id.'_'.$groups.'_'.$id_lang.'_'.$id_product.'_'.$id_category; $this->context->smarty->cache_lifetime = 31536000; // 1 Year Tools::enableCache(); if (!$this->isCached('blockcategories.tpl', $smartyCacheId)) { $maxdepth = Configuration::get('BLOCK_CATEG_MAX_DEPTH'); if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT c.id_parent, c.id_category, cl.name, cl.description, cl.link_rewrite FROM `'._DB_PREFIX_.'category` c INNER JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = '.$id_lang.Shop::addSqlRestrictionOnLang('cl').') INNER JOIN `'._DB_PREFIX_.'category_shop` cs ON (cs.`id_category` = c.`id_category` AND cs.`id_shop` = '.(int)$this->context->shop->id.') WHERE (c.`active` = 1 OR c.`id_category` = '.(int)Configuration::get('PS_HOME_CATEGORY').') AND c.`id_category` != '.(int)Configuration::get('PS_ROOT_CATEGORY').' '.((int)$maxdepth != 0 ? ' AND `level_depth` <= '.(int)$maxdepth : '').' AND c.id_category IN (SELECT id_category FROM `'._DB_PREFIX_.'category_group` WHERE `id_group` IN ('.pSQL($groups).')) ORDER BY `level_depth` ASC, '.(Configuration::get('BLOCK_CATEG_SORT') ? 'cl.`name`' : 'cs.`position`').' '.(Configuration::get('BLOCK_CATEG_SORT_WAY') ? 'DESC' : 'ASC'))) return Tools::restoreCacheSettings(); $resultParents = array(); $resultIds = array(); foreach ($result as &$row) { $resultParents[$row['id_parent']][] = &$row; $resultIds[$row['id_category']] = &$row; } $blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH')); $isDhtml = (Configuration::get('BLOCK_CATEG_DHTML') == 1 ? true : false); if (Tools::isSubmit('id_category')) { $this->context->cookie->last_visited_category = $id_category; $this->smarty->assign('currentCategoryId', $this->context->cookie->last_visited_category); } if (Tools::isSubmit('id_product')) { if (!isset($this->context->cookie->last_visited_category) || !Product::idIsOnCategoryId($id_product, array('0' => array('id_category' => $this->context->cookie->last_visited_category))) || !Category::inShopStatic($this->context->cookie->last_visited_category, $this->context->shop)) { $product = new Product($id_product); if (isset($product) && Validate::isLoadedObject($product)) $this->context->cookie->last_visited_category = (int)$product->id_category_default; } $this->smarty->assign('currentCategoryId', (int)$this->context->cookie->last_visited_category); } $oCategory = new CategoryCore((int)$this->context->cookie->last_visited_category, $id_lang); $sCurrentCateogry = $oCategory->id; $parentId = $oCategory->id_parent; if ( $parentId != 2 ) // Je fais un test sur 2 car c'est l'ID de la Home chez moi { while ( $parentId != 2) { $oCategory = new CategoryCore($parentId,$id_lang); $sCatId = $oCategory->id; $parentId = $oCategory->id_parent; } $blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH'), $sCatId); } else $blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH'), $sCurrentCateogry); unset($resultParents, $resultIds); $this->smarty->assign('blockCategTree', $blockCategTree); if (file_exists(_PS_THEME_DIR_.'modules/blockcategories/blockcategories.tpl')) $this->smarty->assign('branche_tpl_path', _PS_THEME_DIR_.'modules/blockcategories/category-tree-branch.tpl'); else $this->smarty->assign('branche_tpl_path', _PS_MODULE_DIR_.'blockcategories/category-tree-branch.tpl'); $this->smarty->assign('isDhtml', $isDhtml); } $display = $this->display(__FILE__, 'blockcategories.tpl', $smartyCacheId); Tools::restoreCacheSettings(); return $display; } --------- Et une micro modif au .tpl qui se trouve dans le même répertoire "/modules/blockcategories/blockcategories.tpl" : <!-- Block categories module --> <div id="categories_block_left" class="block"> <!-- <p class="title_block">{l s='Categories' mod='blockcategories'}</p> --> <h4>{$blockCategTree.name}</h4> <div class="block_content"> <ul class="tree {if $isDhtml}dhtml{/if}"> {foreach from=$blockCategTree.children item=child name=blockCategTree} {if $smarty.foreach.blockCategTree.last} {include file="$branche_tpl_path" node=$child last='true'} {else} {include file="$branche_tpl_path" node=$child} {/if} {/foreach} </ul> {* Javascript moved here to fix bug #PSCFI-151 *} <script type="text/javascript"> // <![CDATA[ // we hide the tree only if JavaScript is activated $('div#categories_block_left ul.dhtml').hide(); // ]]> </script> </div> </div> <!-- /Block categories module --> --------- En espérant que cela serve Hideo Edited September 5, 2013 by hideo (see edit history) 1 Link to comment Share on other sites More sharing options...
Haz3r Posted December 21, 2013 Share Posted December 21, 2013 Génial !!! Votre code fonctionne à MERVEILLE pour la version 1.5, merci infiniment Hideo Link to comment Share on other sites More sharing options...
@markito Posted December 22, 2013 Share Posted December 22, 2013 Oui je confirme c'est génial !! ça fonctionne nickel... Petite détail qui serait bien de faire c'est de rajouter le titre de la famille en haut de l'arbre Ca fait longtemps que je ne suis pas remis dans le code pouvez vous me dire comment on peut appeler ce nom ? Link to comment Share on other sites More sharing options...
Haz3r Posted December 23, 2013 Share Posted December 23, 2013 Oui je confirme c'est génial !! ça fonctionne nickel... Petite détail qui serait bien de faire c'est de rajouter le titre de la famille en haut de l'arbre Ca fait longtemps que je ne suis pas remis dans le code pouvez vous me dire comment on peut appeler ce nom ? C'est déjà inclus dans le code, sur cette ligne : <h4>{$blockCategTree.name}</h4> Link to comment Share on other sites More sharing options...
hideo Posted December 24, 2013 Share Posted December 24, 2013 Merci à vous pour votre feedback, ça fait plaisir que cela puisse servir à d'autres ! Hideo 1 Link to comment Share on other sites More sharing options...
@markito Posted December 24, 2013 Share Posted December 24, 2013 Oui mais moi je parlais du nom principal celui qui se trouve sur le top menu A moins qu'il existe comme vous le dite mais que moi il ne s'affiche pas !!! Link to comment Share on other sites More sharing options...
chochocho Posted January 3, 2014 Share Posted January 3, 2014 Merci pour ce bout de code super pratique ! Link to comment Share on other sites More sharing options...
jma Posted July 29, 2014 Share Posted July 29, 2014 Bonjour, Tout d'abord, le code ci-dessous fonctionne sur la version 1.5.4.1 de Prestashop. Après une bonne demi-journée de recherche, j'ai finalement bidouillé la fonction "hookLeftColumn" du fichier "/modules/blockcategories/blockcategories.php" pour afficher la catégorie courante à partir du niveau 2. En prenant l'exemple de cette navigation : Accueil -- categorie 1 -- sous-categorie 1-1 -- sous-categorie 1-2 -- sous-categorie 1-2-A -- sous-categorie 1-2-B -- sous-categorie 1-2-C -- sous-categorie 1-3 -- sous-categorie 1-3-A -- sous-categorie 1-3-B -- sous-categorie 1-4 -- sous-categorie 1-5 -- categorie 2 -- categorie 3 -- sous-categorie 3-1 -- sous-categorie 3-2 -- sous-categorie 3-3 -- sous-categorie 3-3-A -- sous-categorie 3-3-B -- categorie 4 Scénario 1 : On est sur "categorie 1", on affiche : -- categorie 1 (selected) -- sous-categorie 1-1 -- sous-categorie 1-2 -- sous-categorie 1-3 -- sous-categorie 1-4 -- sous-categorie 1-5 Scénario 2 : On est sur "categorie 3", on affiche : -- categorie 3 (selected) -- sous-categorie 3-1 -- sous-categorie 3-2 -- sous-categorie 3-3 Scénario 3 : On est sur "categorie 1-3", on affiche : -- categorie 1 -- sous-categorie 1-1 -- sous-categorie 1-2 -- sous-categorie 1-3 (selected) -- sous-categorie 1-3-A -- sous-categorie 1-3-B -- sous-categorie 1-4 -- sous-categorie 1-5 ... Et ainsi de suite en fonction de la profondeur... Voici la fonction : public function hookLeftColumn($params) { $id_customer = (int)$params['cookie']->id_customer; // Get all groups for this customer and concatenate them as a string: "1,2,3..." // It is necessary to keep the group query separate from the main select query because it is used for the cache $groups = $id_customer ? implode(', ', Customer::getGroupsStatic($id_customer)) : Configuration::get('PS_UNIDENTIFIED_GROUP'); $id_product = (int)Tools::getValue('id_product', 0); $id_category = (int)Tools::getValue('id_category', 0); $id_lang = (int)$params['cookie']->id_lang; $smartyCacheId = 'blockcategories|'.$this->context->shop->id.'_'.$groups.'_'.$id_lang.'_'.$id_product.'_'.$id_category; $this->context->smarty->cache_lifetime = 31536000; // 1 Year Tools::enableCache(); if (!$this->isCached('blockcategories.tpl', $smartyCacheId)) { $maxdepth = Configuration::get('BLOCK_CATEG_MAX_DEPTH'); if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT c.id_parent, c.id_category, cl.name, cl.description, cl.link_rewrite FROM `'._DB_PREFIX_.'category` c INNER JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = '.$id_lang.Shop::addSqlRestrictionOnLang('cl').') INNER JOIN `'._DB_PREFIX_.'category_shop` cs ON (cs.`id_category` = c.`id_category` AND cs.`id_shop` = '.(int)$this->context->shop->id.') WHERE (c.`active` = 1 OR c.`id_category` = '.(int)Configuration::get('PS_HOME_CATEGORY').') AND c.`id_category` != '.(int)Configuration::get('PS_ROOT_CATEGORY').' '.((int)$maxdepth != 0 ? ' AND `level_depth` <= '.(int)$maxdepth : '').' AND c.id_category IN (SELECT id_category FROM `'._DB_PREFIX_.'category_group` WHERE `id_group` IN ('.pSQL($groups).')) ORDER BY `level_depth` ASC, '.(Configuration::get('BLOCK_CATEG_SORT') ? 'cl.`name`' : 'cs.`position`').' '.(Configuration::get('BLOCK_CATEG_SORT_WAY') ? 'DESC' : 'ASC'))) return Tools::restoreCacheSettings(); $resultParents = array(); $resultIds = array(); foreach ($result as &$row) { $resultParents[$row['id_parent']][] = &$row; $resultIds[$row['id_category']] = &$row; } $blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH')); $isDhtml = (Configuration::get('BLOCK_CATEG_DHTML') == 1 ? true : false); if (Tools::isSubmit('id_category')) { $this->context->cookie->last_visited_category = $id_category; $this->smarty->assign('currentCategoryId', $this->context->cookie->last_visited_category); } if (Tools::isSubmit('id_product')) { if (!isset($this->context->cookie->last_visited_category) || !Product::idIsOnCategoryId($id_product, array('0' => array('id_category' => $this->context->cookie->last_visited_category))) || !Category::inShopStatic($this->context->cookie->last_visited_category, $this->context->shop)) { $product = new Product($id_product); if (isset($product) && Validate::isLoadedObject($product)) $this->context->cookie->last_visited_category = (int)$product->id_category_default; } $this->smarty->assign('currentCategoryId', (int)$this->context->cookie->last_visited_category); } $oCategory = new CategoryCore((int)$this->context->cookie->last_visited_category, $id_lang); $sCurrentCateogry = $oCategory->id; $parentId = $oCategory->id_parent; if ( $parentId != 2 ) // Je fais un test sur 2 car c'est l'ID de la Home chez moi { while ( $parentId != 2) { $oCategory = new CategoryCore($parentId,$id_lang); $sCatId = $oCategory->id; $parentId = $oCategory->id_parent; } $blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH'), $sCatId); } else $blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH'), $sCurrentCateogry); unset($resultParents, $resultIds); $this->smarty->assign('blockCategTree', $blockCategTree); if (file_exists(_PS_THEME_DIR_.'modules/blockcategories/blockcategories.tpl')) $this->smarty->assign('branche_tpl_path', _PS_THEME_DIR_.'modules/blockcategories/category-tree-branch.tpl'); else $this->smarty->assign('branche_tpl_path', _PS_MODULE_DIR_.'blockcategories/category-tree-branch.tpl'); $this->smarty->assign('isDhtml', $isDhtml); } $display = $this->display(__FILE__, 'blockcategories.tpl', $smartyCacheId); Tools::restoreCacheSettings(); return $display; } --------- Et une micro modif au .tpl qui se trouve dans le même répertoire "/modules/blockcategories/blockcategories.tpl" : <!-- Block categories module --> <div id="categories_block_left" class="block"> <!-- <p class="title_block">{l s='Categories' mod='blockcategories'}</p> --> <h4>{$blockCategTree.name}</h4> <div class="block_content"> <ul class="tree {if $isDhtml}dhtml{/if}"> {foreach from=$blockCategTree.children item=child name=blockCategTree} {if $smarty.foreach.blockCategTree.last} {include file="$branche_tpl_path" node=$child last='true'} {else} {include file="$branche_tpl_path" node=$child} {/if} {/foreach} </ul> {* Javascript moved here to fix bug #PSCFI-151 *} <script type="text/javascript"> // <![CDATA[ // we hide the tree only if JavaScript is activated $('div#categories_block_left ul.dhtml').hide(); // ]]> </script> </div> </div> <!-- /Block categories module --> --------- En espérant que cela serve Hideo Bonjour, Votre code fonctionne pour la version 1.5.6 mais cela ralentit considérablement le site jusqu'à saturation.... Sur mon site j'ai en plus le bloc navigation à facette qui tourne. Serait-ce du à cela ? J'ai remis le bloccategories d'origine et hop tout refonctionne .... Pouvez vous m'aider pour voir ce problème ? JMA Link to comment Share on other sites More sharing options...
Recommended Posts