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?
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.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.