Linkes Kategorie-Menü um eine Ebene nach unten verschieben

Hallo, ich arbeite derzeit an einem neuen Projekt bei dem ich im linken Kategorie-Menü, also in der “categories_left.tpl” eine Ebene - und zwar die Hauptebene - auslassen muss. So steht dann beispielsweise im Oberen Menü “Kategorie 1, Kategorie 2, Kategorie 3”, und im linken Menü dann “Unterkategorie 1, Unterkategorie 2, Unterkategorie 3”, also quasi direkt die Unterkategorien zur Haupt-Kategorie “Kategorie 1”. Ich habe mir die Funktion in der categories_left.tpl angesehen und festgestellt, dass sich die Funktion, sobald sie einen Menüpunkt mit Unterpunkten findet sich selbst wieder aufruft. Leider habe ich keine Variable gefunden die für das “Einstiegslevel” zuständig ist, denn die Variable $level ist in dieser Funktion nur für die Vergabe der Klassen-Namen zuständig, nicht für die Level bzw. Ebenen selber. Es wird an die Funktion einfach immer wieder die Variable “$category.subcategories” weitergegeben, die dann wiederum die $category Variable überschreibt. Bisher habe ich zwar eine Lösung gefunden, jedoch scheint mir diese etwas unsauber. Ich habe zusätzlich zur “categories” Funktion eine zweite definiert “categoriessub” auf die bei der Oberkategorie verwiesen wird, aber am besten ihr seht euch die Funktion selber an: [code]{function name=categories level=0} {block name=“frontend_index_categories_left_ul”}{/block} {foreach from=$categories item=category} {if $category.subcategories} {call name=categoriessub categories=$category.subcategories level=0} {/if} {/foreach} {/function} {function name=categoriessub level=0}

{block name=“frontend_index_categories_left_ul”}{/block} {foreach from=$categories item=category} - {$category.description} {if $category.subcategories} {call name=categoriessub categories=$category.subcategories level=$level+1} {/if}
{/foreach} {/function}[/code] Meine Frage: Lässt sich dieses Problem irgendwie “schöner” lösen? Viele Grüße

Also bei mir sieht das so aus: [code]{function name=categories level=0}

{block name=“frontend_index_categories_left_ul”}{/block} {foreach from=$categories item=category} - {$category.description} {if $category.subcategories} {call name=categories categories=$category.subcategories level=$level+1} {/if}
{/foreach}{/function} {if $sCategories} {call name=categories categories=$sCategories} {elseif $sMainCategories} {call name=categories categories=$sMainCategories} {/if}[/code]

Richtig, so sieht die originale Version aus, die das Menü ab der ersten Ebene ausgibt, also: Ebene 1a |-\> Ebene 2a |-\> Ebene 2b |-\> Ebene 3a |-\> Ebene 3b |-\> Ebene 2c Ebene 1b Ebene 1c Meine Version hingegen gibt nur folgendes aus (was auch ganz gut funktioniert): Ebene 2a Ebene 2b |-\> Ebene 3a |-\> Ebene 3b Ebene 2c Es wird also „Ebene 1“ übersprungen - so ist das auch gewollt, jedoch scheint mir die Lösung etwas unsauber.

Oh ich sehe gerade das der Shop das geändert hat. Ich schaue mal ob ich die Lösung noch finden kann. //edit Probier es mal damit. Das war auskommentiert in der .tpl Datei. Ich kenne mich mit dem coden leider nicht so gut aus. Zumindest nicht wenn es so kompliziert wird. [code]{function name=categories level=0}

{block name=„frontend_index_categories_left_ul“}{/block} {foreach from=$categories item=category} {if ($category.flag or $category.subcategories) and $level < 2} - [{$category.description}]({if $category.external}{$category.external}{else}{$category.link|rewrite:$category.description}{/if}) {if $category.subcategories} {call name=categories categories=$category.subcategories level=$level+1} {/if}
{/if} {/foreach} {foreach from=$categories item=category} {if (!$category.flag and $level > 0 and !$category.subcategories) or $level >= 2} - [{$category.description} ({$category.countArticles})]({if $category.external}{$category.external}{else}{$category.link|rewrite:$category.description}{/if}) {if $category.subcategories} {call name=categories categories=$category.subcategories level=$level+1} {/if}
{/if} {/foreach} {/function} {if $sCategories} {call name=categories categories=$sCategories} {elseif $sMainCategories} {call name=categories categories=$sMainCategories} {/if}[/code]

Hab’s gerade probiert, aber das funktioniert so leider auch nicht. Mit deinem Code wird folgendes ausgegeben: Ebene 1a |-\> Ebene 2a |-\> Ebene 2b |-\> Ebene 3a |-\> Ebene 3b |-\> Ebene 2c Es werden also zumindest die anderen Menüpunkte von Ebene 1 ausgeblendet, aber die oberste Ebene bleibt trotzdem bestehen, das kommt daher, da die Funktion categories ja mindestens einmal ein

samt - und Tag setzt bevor gemerkt wird das Untermenüs da sind. Aus dem Grund wird bei mir in der Original-Funktion kein HTML gesetzt, sondern erst wenn die zweite Hilfsfunktion aufgerufen wird (die sich wiederum dann selbst aufruft). Allerdings finde ich es interessant, dass man die Artikelanzahl pro Kategorie anzeigen lassen kann, zumindest dass das anscheinend mal funktioniert hat, denn mit deinem Code steht hinter den Menüpunkten nur “()”

Das Problem ist das es nen alter Shop ist mit 3.5. Dort hatte ich damals in der horizontalen Navi die erste Ebene an Kategorien und sobald man auf eine geklickt hat erschienen dann links alle Kategorien die sich darin befanden. Ja die Artikelanzahl habe ich damals auch hinter jeder Kategorie stehen gehabt. //edit Also bei mir funktioniert das so. Allerdings nur mit v3.5 Die Ebene 1 wirst du sicherlich ausblenden können. Ich hatte das nur eingeblendet damit man sieht wo man ist.

Hallo, gib doch #content #left .categories li.active.sub a.active ein display:none. Ist zwar nicht sehr elegant aber funktioniert. Grüße Erik!

Naja, funktionieren tut es, das ist richtig, aber wie du schon sagst nicht sehr elegant… Da ist meine Lösung eleganter, denn dort habe ich kein “unsichtbares”

Element noch einmal außen rum und zudem stimmen bei mir auch die Level-Klassen der einzelnen Ebenen (“level0”,“level1”,…)

@pbiendl schrieb:

Hallo,

ich arbeite derzeit an einem neuen Projekt bei dem ich im linken Kategorie-Menü, also in der „categories_left.tpl“ eine Ebene - und zwar die Hauptebene - auslassen muss.

So steht dann beispielsweise im Oberen Menü „Kategorie 1, Kategorie 2, Kategorie 3“, und im linken Menü dann „Unterkategorie 1, Unterkategorie 2, Unterkategorie 3“, also quasi direkt die Unterkategorien zur Haupt-Kategorie „Kategorie 1“.

Ich habe mir die Funktion in der categories_left.tpl angesehen und festgestellt, dass sich die Funktion, sobald sie einen Menüpunkt mit Unterpunkten findet sich selbst wieder aufruft. Leider habe ich keine Variable gefunden die für das „Einstiegslevel“ zuständig ist, denn die Variable $level ist in dieser Funktion nur für die Vergabe der Klassen-Namen zuständig, nicht für die Level bzw. Ebenen selber. Es wird an die Funktion einfach immer wieder die Variable „$category.subcategories“ weitergegeben, die dann wiederum die $category Variable überschreibt.

Bisher habe ich zwar eine Lösung gefunden, jedoch scheint mir diese etwas unsauber. Ich habe zusätzlich zur „categories“ Funktion eine zweite definiert „categoriessub“ auf die bei der Oberkategorie verwiesen wird, aber am besten ihr seht euch die Funktion selber an:

 {function name=categories level=0} {block name="frontend\_index\_categories\_left\_ul"}{/block} {foreach from=$categories item=category} {if $category.subcategories} {call name=categoriessub categories=$category.subcategories level=0} {/if} {/foreach} {/function} {function name=categoriessub level=0} 

{block name=„frontend_index_categories_left_ul“}{/block} {foreach from=$categories item=category} - {$category.description} {if $category.subcategories} {call name=categoriessub categories=$category.subcategories level=$level+1} {/if}
{/foreach} {/function}

Meine Frage: Lässt sich dieses Problem irgendwie „schöner“ lösen?

Viele Grüße

Hast Du hier jemals eine „schönere“ Lösung hinbekommen? Wir bilden im Blog die Blog Kategorien auf der linken Seite ab und da ist der Code mehr als nützlich. Bei uns sieht das so aus:

{* Blog categories in sidebar *}

{function name=categories}
	{foreach from=$categories item=category}
		{if $category.blog && $category.subcategories}
			{call name=subCategories categories=$category.subcategories}
		{/if}
	{/foreach}
{/function}

{function name=subCategories level=0}
    
        {* @deprecated The block "frontend_index_categories_left_ul" will be removed in further versions, please use "frontend_index_categories_left_before" *}
        {block name="frontend_index_categories_left_ul"}{/block}

        {block name="frontend_index_categories_left_before"}{/block}
        {foreach $categories as $category}
			{block name="frontend_index_categories_left_entry"}
				
					
						{$category.description}

						{if $category.childrenCount}
							
								
							
						{/if}
					
					{block name="frontend_index_categories_left_entry_subcategories"}
						{if $category.subcategories}
							{call name=subCategories categories=$category.subcategories level=$level+1}
						{/if}
					{/block}
				
			{/block}
        {/foreach}
        {block name="frontend_index_categories_left_after"}{/block}
    
{/function}

{if $sCategories}
	{call name=categories categories=$sCategories}
{/if}

Kann man das besser lösen?