Seite 1 von 1

Top Navigation schaltet alles class=active

Verfasst: Sa 22. Mär 2014, 12:03
von Faar
Hallo,
die Top Navigation schaltet alle CSS-Klassen auf "active", aber es sollte doch nur die Kategorie mit "active" bezeichnet sein, die auch gerade angezeigt wird? :shock:
Und das kuriose daran ist, dass es Schritt für Schritt verschwindet:
Also ich klicke den ersten Menüpunkt an und alle Menüpunkte haben class="active", dann klicke ich den zweiten Menüpunkt an und der erste Menüpunkt erhält dann class=" " aber alle weiteren noch class="active".
Das geht so weiter bis zum letzten Menüpunkt, wo es dann scheinbar korrekt aus sieht.
Woran kann das liegen?

Außerdem ist beim letzten Menüpunkt noch ein störendes <ul> </ul> im <li> enthalten. :motz:

VG,
Frank

Gelöst: Top Navigation schaltet alles class=active

Verfasst: Sa 22. Mär 2014, 13:29
von Faar
Also das eine habe ich gelöst:

Im Smarty-Template wird die Variable aClass in der foreach-Schleife mit "active" belegt, wenn die aktuelle idcat mit der idcat im Pfad übereinstimmt.
Soweit logisch.
Aber dann wird die Variable nicht mehr geändert, das heißt, sie hat im Fall dass man den ersten Menü-Punkt anklickt, immer "active" drin stehen.
Folglich werden also alle folgenden Menüpunkte als aktiv gekennzeichnet.
Orignal-Code:

Code: Alles auswählen

<!-- navigation_top/template/get.tpl -->

<ul>
    {foreach from=$tree item=wrapper}
        {assign var="idcat" value=$wrapper.idcat}
        {assign var="url" value=$wrapper.item->getLink()}
        {assign var="name" value=$wrapper.item->get('name')}
        {if $idcat|in_array:$path}
            {assign var="aClass" value='active'}
        {/if}
        <li>
			<a class="{$aClass}" href="{$url}" title="{$name}">{$name}</a>
        {if $idcat|in_array:$path}
            {include file="navigation_top/template/get.tpl"
                tree=$wrapper.subcats path=$path}
        {/if}
        </li>
     {/foreach}
</ul>

<!-- /navigation_top/template/get.tpl -->
Nun habe ich dem Smarty-Dingens einfach ein {else} verpasst und die Variable aClass ohne Inhalt gesetzt.
Und schwupps, funktioniert es.

Code: Alles auswählen

<!-- navigation_top/template/get.tpl -->

<ul>
    {foreach from=$tree item=wrapper}
        {assign var="idcat" value=$wrapper.idcat}
        {assign var="url" value=$wrapper.item->getLink()}
        {assign var="name" value=$wrapper.item->get('name')}
        {if $idcat|in_array:$path}
            {assign var="aClass" value='active'}
		{else}
			{assign var="aClass" value=''}
        {/if}
        <li>
			<a class="{$aClass}" href="{$url}" title="{$name}">{$name}</a>
        {if $idcat|in_array:$path}
            {include file="navigation_top/template/get.tpl"
                tree=$wrapper.subcats path=$path}
        {/if}
        </li>
     {/foreach}
</ul>

<!-- /navigation_top/template/get.tpl -->
Das sollte eigentlich nicht nicht so sein? :roll:

Aber ich frage mich, wo hier bei Smarty der Vorteil gegenüber PHP sein soll?
Ist dieses "HTML-Template" etwa übersichtlicher oder verständlicher?
Da kann ich doch gleich wieder ein PHP-HTML-Mix schreiben, muss ich mich nicht auch noch mit Smarty rumschlagen.
Typo3 ist schon einen verfänglichen Weg gegangen mit Typo-Script und hat es nicht besser gemacht mit der neuen Template-Sprache Fluid.
PHP IST bereits eine Sprache für Templates... es sollte also schon deutlich besser sein, wenn man statt PHP noch was anderes drauf setzt, denn neues Zeugs = neue Fehlerquellen.
Zumindest hier sehe ich nichts besseres.

Top Navigation schaltet alles class=active

Verfasst: Sa 22. Mär 2014, 14:59
von mikesteiner99
Hallo Faar

Also ich finde die Ergänzung von Smarty eine grosse Bereicherung von Contenido. Smarty ist im Gegensatz von TypoScript ein stark verbreitetes Templatesystem und nicht NUR für Contenido Benutzer ein Begriff. Ein anderer meines Erachtens grosser Vorteil ist das automatische Caching von Smarty. Aber die Systeme haben immer verschiedene Vor und Nachteile, Befürworter und Gegner.

Das "nur" meine eine Meinung
Grüsse mike


Gesendet von meinem iPhone mit Tapatalk