Ich möchte in den Menüs das erste und letzte Kind mit einer Klasse versehen, also:
Code: Select all
<ul id="menu">
<li id="first">Menüpunkt 1</li>
<li>Menüpunkt 2</li>
...
<li id="last">letzter Menüpunkt</li>
...
Code: Select all
<ul id="menu">
<li id="first">Menüpunkt 1</li>
<li>Menüpunkt 2</li>
...
<li id="last">letzter Menüpunkt</li>
...
Mit smarty geht es, wenn name in foreach hinzugefügt wird. Hier ist die Doku http://www.smarty.net/manual/en/languag ... oreach.php. Und hier ist ein kleines Beispiel:NaN wrote: Eine Möglichkeit, das komplett zu automatisieren (anhand einer Abfrage nach Hierarchie oder mit Smarty-Modifikatoren etc.) habe ich noch nicht herausgefunden.
Code: Select all
{foreach from=$nodelist item=node name=menu}
{if $smarty.foreach.menu.first}<!-- Formatierung für first -->{/if}
<a href="{$node->url}" {if $node->target ne ""} target="{$node->target}"{/if}> {$node->menutext} </a>
{if $smarty.foreach.menu.last}<!-- Formatierung für last -->{/if}
{/foreach}
Code: Select all
{$nodelist[NÄCHSTER INDEX]->depth}
Code: Select all
{if $count > 0}
<ul>
{foreach from=$nodelist item=node name=item}
{counter assign=nextindex}
{if $node->depth > $node->prevdepth}
{repeat string="<ul>" times=$node->depth-$node->prevdepth}
{elseif $node->depth < $node->prevdepth}
{repeat string="</li></ul>" times=$node->prevdepth-$node->depth}
</li>
{elseif $node->index > 0}</li>
{/if}
{if $node->current == true}
<li class="currentpage{if ($node->depth > $node->prevdepth) || $smarty.foreach.item.first} first{elseif $smarty.foreach.item.last || $nodelist[$nextindex]->depth < $node->depth} last{/if}">
<h3><dfn>Current page is {$node->hierarchy}: </dfn>{$node->menutext}</h3>
{elseif $node->parent == true}
<li class="activeparent{if ($node->depth > $node->prevdepth) || $smarty.foreach.item.first} first{elseif $smarty.foreach.item.last || $nodelist[$nextindex]->depth < $node->depth} last{/if}"><a class="activeparent" href="{$node->url}"{if $node->accesskey != ''} accesskey="{$node->accesskey}"{/if}{if $node->tabindex != ''} tabindex="{$node->tabindex}"{/if}{if $node->titleattribute != ''} title="{$node->titleattribute}"{/if}><dfn>{$node->hierarchy}: </dfn>{$node->menutext}</a>
{elseif $node->type == 'sectionheader'}
<li class="sectionheader{if ($node->depth > $node->prevdepth) || $smarty.foreach.item.first} first{elseif $smarty.foreach.item.last || $nodelist[$nextindex]->depth < $node->depth} last{/if}">{$node->menutext}
{elseif $node->type == 'separator'}
<li class="separator{if ($node->depth > $node->prevdepth) || $smarty.foreach.item.first} first{elseif $smarty.foreach.item.last || $nodelist[$nextindex]->depth > $node->depth} last{/if}" style="list-style-type: none;"> <hr />
{else}
<li{if ($node->depth > $node->prevdepth) || $smarty.foreach.item.first} class="first"{elseif $smarty.foreach.item.last || $nodelist[$nextindex]->depth < $node->depth} class="last"{/if}>
<a href="{$node->url}"{if $node->accesskey != ''} accesskey="{$node->accesskey}"{/if}{if $node->tabindex != ''} tabindex="{$node->tabindex}"{/if}{if $node->titleattribute != ''} title="{$node->titleattribute}"{/if}{if $node->target != ''} target="{$node->target}"{/if}><dfn>{$node->hierarchy}: </dfn>{$node->menutext}</a>
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
{/if}
Code: Select all
{math equation="x + 1" x=$smarty.foreach.menu.index assign="next" }
Code: Select all
{* CSS classes used in this template:
.activeparent - The top level parent when a child is the active/current page
li.active0n h3 - n is the depth/level of the node. To style the active page for each level separately. The active page is not clickable.
.clearfix - Used for the unclickable h3 to use the entire width of the li, just like the anchors. See the Tools stylesheet in the default CMSMS installation.
li.sectionheader h3 - To style section header
li.separator - To style the ruler for the separator *}
{if $count > 0}
<ul>
{foreach from=$nodelist item=node name=menu}
{assign var='class' value=""}
{if $node->depth > $node->prevdepth}
{repeat string="<ul>" times=$node->depth-$node->prevdepth}
{elseif $node->depth < $node->prevdepth}
{repeat string="</li></ul>" times=$node->prevdepth-$node->depth}
</li>
{elseif $node->index > 0}</li>
{/if}
{math equation="x + 1" x=$smarty.foreach.menu.index assign="next" }
{if $node->depth > $node->prevdepth}
{assign var='class' value="first"}
{elseif $smarty.foreach.menu.last}
{assign var='class' value="last"}
{elseif $nodelist[$smarty.foreach.menu.index]->depth > $nodelist[$next]->depth}
{assign var='class' value="last"}
{/if}
{if $node->current == true}
{assign var='class' value="currentpage $class"}
{if $node->haschildren == true}
{assign var='class' value="haschildren $class"}
{/if}
<li class="{$class}"><h3><dfn>Current page is {$node->depth}: </dfn> {$node->menutext}</h3>
{elseif $node->parent == true}
{assign var='class' value="activeparent $class"}
<li class="{$class}"><a class="activeparent" href="{$node->url}"{if $node->accesskey != ''} accesskey="{$node->accesskey}"{/if}{if $node->tabindex != ''} tabindex="{$node->tabindex}"{/if}{if $node->titleattribute != ''} title="{$node->titleattribute}"{/if}><dfn>{$node->depth}: </dfn>{$node->menutext}</a>
{elseif $node->type == 'sectionheader'}
<li class="sectionheader">{$node->menutext}
{elseif $node->type == 'separator'}
<li class="separator" style="list-style-type: none;"> <hr />
{else}
<li class="{$class}"><a href="{$node->url}"{if $node->accesskey != ''} accesskey="{$node->accesskey}"{/if}{if $node->tabindex != ''} tabindex="{$node->tabindex}"{/if}{if $node->titleattribute != ''} title="{$node->titleattribute}"{/if}{if $node->target != ''} target="{$node->target}"{/if}><dfn>[{$node->depth}] </dfn>{$node->menutext}</a>
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
{/if}