Jump to content

[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

Link to comment
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 !)

Link to comment
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

Link to comment
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...

Link to comment
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

Link to comment
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

Link to comment
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" ?

Link to comment
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

Link to comment
Share on other sites

  • 3 weeks later...
  • 2 weeks later...
  • 5 months later...

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.

Link to comment
Share on other sites

  • 4 months later...
  • 4 weeks later...
  • 3 months later...
  • 1 month later...
  • 8 months later...

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...