Jump to content

Supprimer sous sous catégories dans le menu


Recommended Posts

Bonjour,

 

J'aimerais supprimer les sous sous catégories du menu blockcategories mais en gardant les sous catégories. J'ai essayé en éditant category-tree-branch.tpl mais soit je supprime tout, soit rien...

 

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

 

Merci d'avance ;)

Link to comment
Share on other sites

hello,

essaye en remplaçant

{if $smarty.foreach.categoryTreeBranch.last}
   {include file="$tpl_dir./category-tree-branch.tpl" node=$child last='true'}
{else}
   {include file="$tpl_dir./category-tree-branch.tpl" node=$child last='false'}
{/if}

par juste

{include file="$tpl_dir./category-tree-branch.tpl" node=$child last='true'}

a priori, il ne devrait boucler qu'une fois, sinon, il va falloir conditionner la boucle à l'index du node, un petit coup de smarty devrait le faire :)

 

have swing

Link to comment
Share on other sites

:) et bien, plusieurs possibilités en fait

le premier truc que je ferais serait un print_r de $node et de $node.children

{$node|@print_r} //ou {$node|@debug_print_var} grosso modo la même

et la même pour $node.children

histoire de voir comment se présente le tableau, il doit bien y avoir une valeur qui permettrait d'ajouter une condition à

{if $node.children|@count > 0}

pour arrêter la boucle au niveau que tu souhaites

 

dommage que je n'ai pas un site installé qui utilise ce truc de catégories j'aurais pu essayer, jette un oeil aux deux print_r, node et node.children histoire qu'on voit comment ça cause :)

 

have swing

Link to comment
Share on other sites

Merci pour toutes ces infos ;)

 

Alors voilà ce que renvoi les print_r :

 

{$node|@print_r} : (j'ai mis qu'une partie ;))

 

Array
(
[id] => 10
[link] => http://www...
[name] => Categorie 1
[desc] =>
[children] => Array
	(
		[0] => Array
			(
				[id] => 26
				[link] => http://www...
				[name] => Sous Categorie 1
				[desc] =>
				[children] => Array
					(
						[0] => Array
							(
								[id] => 34
								[link] => http://www...
								[name] => Sous Sous Categorie 1
								[desc] =>
								[children] => Array
									(
									)

							)

						[1] => Array
							(
								[id] => 44
								[link] => http://www...
								[name] => Sous Sous Categorie 2
								[desc] =>
								[children] => Array
									(
									)

							)

						[2] => Array
							(
								[id] => 45
								[link] => http://www...
								[name] => Sous Sous Categorie 3
								[desc] =>
								[children] => Array
									(
									)

							)

 

 

{$node.children|@print_r} :

 

Array
(
[0] => Array
	(
		[id] => 26
		[link] => http://www...
		[name] => Sous Categorie 1
		[desc] =>
		[children] => Array
			(
				[0] => Array
					(
						[id] => 34
						[link] => http://www...
						[name] => Sous Sous Categorie 1
						[desc] =>
						[children] => Array
							(
							)

					)

				[1] => Array
					(
						[id] => 44
						[link] => http://www...
						[name] => Sous Sous Categorie 2
						[desc] =>
						[children] => Array
							(
							)

					)

				[2] => Array
					(
						[id] => 45
						[link] => http://www...
						[name] => Sous Sous Categorie 3
						[desc] =>
						[children] => Array
							(
							)

					)

Link to comment
Share on other sites

too bad, pas de niveau, bon, ben on peut commencer par essayer un truc de sauvage, ça va peut-être marcher

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

 

en gros ça équivaut à tenter un truc genre $i = 0, l'incrémenter au passage du if et mettre comme condition qu'il ne soit pas supérieur à 1 pour boucler, essaye, on va voir (et il n'y a pas de risque :))

 

have swing

Link to comment
Share on other sites

tiens, une idée au passage, assigner une variable qui n'existe pas avant la première boucle et ne pas boucler si elle existe

<li {if isset($last) && $last == 'true'}class="last"{/if}>
<a href="{$node.link|escape:'htmlall':'UTF-8'}" {if isset($currentCategoryId) && $node.id == $currentCategoryId}class="selected"{/if} title="{$node.desc|escape:'htmlall':'UTF-8'}">{$node.name|escape:'htmlall':'UTF-8'}</a>
{if $node.children|@count > 0 && !isset($premiereboucle)}
{assign var="premiereboucle" value="done"}
	<ul>
	{foreach from=$node.children item=child name=categoryTreeBranch}
		{if $smarty.foreach.categoryTreeBranch.last}
			{include file="$tpl_dir./category-tree-branch.tpl" node=$child last='true'}
		{else}
			{include file="$tpl_dir./category-tree-branch.tpl" node=$child last='false'}
		{/if}
	{/foreach}
	</ul>
{/if}
</li>

 

ça peut marcher avant de trouver comment faire un assign d'une opération math equation dans une variable :))

 

have swing

Link to comment
Share on other sites

hello,

my pleasure, j'aime bien me battre avec ce genre de truc

trouvé... et mis le doigt sur un petit défaut du bébé...

la solution est bel et bien

<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 && !isset($toto)}
{assign var='toto' value='1'}
	<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>

mais il faut le faire dans le tpl qui est dans le dossier modules blockcategories de presta

 

en fait, le truc est que au dessus de ce fichier, il y a blockcategories;tpl qui include le tree_branch

ce qui est mal foutu dans l'histoire est que

- si tu crées un dossier modules dans ton thème dans lequel tu mets ces deux fichiers, ça plante...

- si tu mets blockcategories.tpl à la racine du thème comme c'est le cas pour tree_branch, il s'en tape royal en ne va pas le chercher

en gros, ce module n'est pas écrit correctement puisque sont fichier tree_branch accepte qque modifs à la racine du thème au lieu d'être dans le dossier themes/tontheme/module/blockcategories comme le fonte les autres mais ça ne le fait que pour un template sur deux !!!

 

fais la modif dans le dossier racine modules/blockcategories et ça baigne...

(ça me parraissait étrange qu'un truc aussi bêtement logique ne fonctionne pas, comme tu dis, c'est un truc qu'on fait en php et smarty n'est qu'une surcouche de php donc...)

 

ouf :)

 

have swing

  • Like 1
Link to comment
Share on other sites

  • 1 month later...
  • 3 months later...

alors moi je souhaiterais afficher que la categorie en cours avec ses sous categorie

 

c'est a dire les "span open" et non les "span closer"

 

j'ai pas tres bien comprsi le {$node|@print_r}

ou peut on le mettre car j'ai essayé mais iln'accepte les crochets

 

Hello !

As tu trouvé une solution ? Je cherche exactement a faire la même chose !

Que le bloc catégorie ne présente que tu sous-cat, de la catégorie actuelle. (Donc mon bloc catégorie n'apparait pas sur la page d'accueil)

 

Merci !

Link to comment
Share on other sites

  • 1 year later...

Excusez moi pour ce message inutile, après plusieurs jours de recherche, j'ai trouvé !

 

j'ai juste mi mon #categories_block_left li ul li a{} en "display: none " dans mon global css.

 

Il semble que ca n'althère pas le reste du site..

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