Jump to content
marty69

[RESOLU] cacher une partie du bloc catégories en fonction de la catégorie active

Recommended Posts

bonjour !

 

Comment faire pour limiter l'affichage des catégories du bloc categories ?

 

concrètement j'utilise le menu top de Julien Breux + bloc category de presta en colonne de gauche. Je commence à avoir un paquet de catégories je cherche donc à réorganiser le tout.

 

J'ai pour l'instant 3 grosses catégories principales (filles de la catégorie principale "accueil")

 

quel test réaliser dans le template (j'imagine au niveau du bloc categories) pour n'afficher que la branche complète de la catégorie ou on se trouve ?

 

par exemple :

 

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 je ne veux afficher que la branche

 

CAT A

----SS-CAT A1

----SS-CAT A2

 

J'imagine qu'il faut tester quelque un truc du genre :

"si on est pas dans la catégorie parente CAT A alors visibility:hidden;"

 

maintenant dans le détail je ne sais pas encore comment procéder

 

un petit aiguillage serait top

 

merci

Share this post


Link to post
Share on other sites

étonné que personne n'aie déja essayé et donc que personne n'ait au moins une piste à suggérer...

Share this post


Link to post
Share on other sites

j'essaie de placer une condition dans le tpl du genre :

 

- récupérer l'id de la catégorie mère actuelle (catégorie de plus haut niveau)

 

- dans la boucle d'affichage des catégories, inclure une condition du type :

Pour chaque catégorie, si la catégorie mère n'est pas la catégorie mère actuelle, alors ne pas afficher

dans le genre : {if $cat.parent != $cat.mère_actuelle}style="visibility:hidden;"{/if}

 

j'avoue que je ne trouve pas de solution. Ca me semble pourtant accessible facilement (pour peu qu'on touche un peu en dév !)

Share this post


Link to post
Share on other sites

salut,

 

je n'utilise pas le bloc catégorie mais en y jetant un oeil, je pense que la réponse est dans le tpl category-tree-branch

<li {if isset($last) && $last == 'true'}class="last"{/if}>
<a href="{$node.link}" {if isset($currentCategoryId) && ($node.id == $currentCategoryId)}class="selected"{/if} title="{$node.desc|escape:html:'UTF-8'}">{$node.name|escape:html:'UTF-8'}</a>
{if $node.children|@count > 0}
	<ul>
	{foreach from=$node.children item=child name=categoryTreeBranch}
		{if isset($smarty.foreach.categoryTreeBranch) && $smarty.foreach.categoryTreeBranch.last}
			{include file="$branche_tpl_path" node=$child last='true'}
		{else}
			{include file="$branche_tpl_path" node=$child last='false'}
		{/if}
	{/foreach}
	</ul>
{/if}
</li>

comme tu peux le voir le truc est récursif, ça affiche d'abord dans les li le lien vers la catégorie et si sous-catégorie il y a une nouvelle ul et rebelote récursivement

 

la réponse à ta question me semble être dans le premier a de la li qui affiche une class selected, attention, les athéniens s'atteignent un grand coup, si

$node.id == $currentCategoryId

donc, à mon avis, si sur la li, tu fais un truc du genre

<li{if isset($last) && $last == 'true'} class="last"{/if}{if $node.id != $currentCategoryId} style="display:none"{/if}>

on ne devrait pas être loin de ce que tu cherches à faire

display none plutôt que visibility hidden parce que dans ce cas, la place prise par l'élement est toujours occupé, bonjour l'espace blanc :)

 

have swing

Share this post


Link to post
Share on other sites

Merci virtualgadjo,

 

Cela semble être une piste ceci dit je ne sais pas si c'est vraiment réalisable directement dans le tpl.

En effet, il faut quelques tests :

 

- savoir dans quelle catégorie on est

- remonter toute l'arborescence pour récupérer la catégorie racine de l'arbre

- afficher cette arborescence et cacher les autres.

 

dans mon approche je ne vois que la possibilité de le faire en modifiant le php au préalable pour retourner l'ID de la catégorie racine.

 

Merci pour ton aide en tout cas, à creuser...

Share this post


Link to post
Share on other sites

ok, je crois avoir trouvé.

 

dans blockcategories.php :

 

récupérer la catégorie active

 

$currentCategoryId=Product::getDefaultCategory(intval($_GET['id_product']));

 

remonter l'arbre pour atteindre la catégorie de niveau 1 :

 

$rootCateg = new Category ($currentCategoryId, intval($params['cookie']->id_lang));
while($rootCateg->id_parent != 1)  {$rootCateg=new Category($rootCateg->id_parent, intval($params['cookie']->id_lang));}

 

nettoyer le nom de la catégorie récupérée (supprime le numéro devant la catégorie servant à classer les catégories à l'affichage)

 

$rootCateg->name = Category::hideCategoryPosition($rootCateg->

 

passer cette variable au moteur smarty

 

$smarty->assign('rootCat', $rootCateg);

 

dans blockcategories.tpl :

 

afficher le nom de la catégorie racine

 

<h4>{$rootCat->name}</h4>

 

 

PS : Prestashop v 1.3.7

Share this post


Link to post
Share on other sites

hello,

fais un petit print_r de $blockCategTree.children dans blockcategory.tpl, tu verras tous les noms des categories y figurent, après, ce n'est plus qu'un question de remonter le tableau pour trouver le parent de l'id de la sous-catégorie active (si c'est une catégorie elle est de premier niveau)

 

si tu n'as que des sous-catégories à un niveau c'est assez simple, si tu as plus de sous-niveaux faut juste savoir combien mais à mon avis rien que tu ne puisse faire avec smarty dans le template (quitte, je fais ça quand j'en ai besoin) à créer un plugin pour smarty pour l'occasion

 

have swing

Share this post


Link to post
Share on other sites

ok, merci pour la réponse :)

 

ceci dit ta solution m'intéresse dans le sens ou ca ne toucherai pas le coeur de prestashop.

Dans ta solution, si tout est déja dans $blockCategTree.children, cela devrait être possible de pointer directement sur la racine de l'arbre dans cette variable ? du genre "le premier élément de l'arbre" ?

Share this post


Link to post
Share on other sites

si ca intéresse, je joint le module modifié : n'affiche que la branche des catégories (à partir de la catégorie de niveau 1 = sous catégorie de la catégorie "accueil") de la catégorie active.

 

note : testé uniquement sur une version PS 1.3.7

blockcategories_display_by_root.zip

Share this post


Link to post
Share on other sites

hello,

 

j'arrive un peu tard mais bon, si tu as trouvé un truc qui fonctionne autant rester dessus

sinon, oui bien sûr, dès que tu as un array sous la main, tout devient possible en php donc en smarty aussi... d'où je passe mon temps à faire des print_r sur toutes les pages pour voir ce que j'ai sous la main avant d'aller surcharger le code du gros bébé...

 

have swing

Share this post


Link to post
Share on other sites

euh je me sent un peu couillon, j'arrive pas à faire de print_r !?

quelle est la syntaxe que tu utilises ?

Share this post


Link to post
Share on other sites

:)

<pre>


{$ziarray|@print_r}
</pre>

le pre n'est pas obligatoire mais quand le tableau est copieux c'est quand même plus lisible

 

have swing

Share this post


Link to post
Share on other sites

merci,

 

ceci dit c'est bien ce que j'ai fait mais rien en sortie !

faut-il activer le mode debug ?

Share this post


Link to post
Share on other sites

Bonjour marty69,

Ta solution est bien, j'arrive à la faire marcher sur presta 1.4.4 mais ça ne fonctionne plus quand on arrive sur la page produit. Tu fais comment pour que ça marche sur ces pages là ?

 

merci.

Share this post


Link to post
Share on other sites

Bonjour, j'ai ajouté le fichier zip que vous avez laissé à la fin du fil de discussion afin de pouvoir afficher des catégories spécifiques selon les pages du menu horizontal.

 

Cependant, suite à son téléchargement dans le back office, le block catégorie se trouvant toujours sur la colonne de gauche n'affiche plus les catégories et sous catégorie...

 

Dans l'attente de vos réponses, car je suis bloqué;.. mon site :

http://www.shilton.fr/boutique-en-ligne-shilton/

 

Cordialement.

Share this post


Link to post
Share on other sites

J'ai essayé de réinitialisé le module catégories...mais les sous-catégories ne s'affichent pas quand même, quelqu'un pourrait m'aider?

Share this post


Link to post
Share on other sites

Bonjour,

 

C'est EXACTEMENT ce que je cherche mais ça ne fonctionne pas sous Prestashop 1.5 . Quelqu'un se sent de faire une petite MAJ du module? Ca m'aiderait vraiment.

 

Merci d'avance

Share this post


Link to post
Share on other sites

bonjour, je me permet de relancer se poste avez-vous trouver une adaptation de ce module pour la 1.5 ? (après plusieurs jours de recherche je coince un peu) merci !

Share this post


Link to post
Share on other sites

Bonjour c'est dommage que personne à la solution pour la version 1.5 ?

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More