Menü Template -> eindeutige ID

Für Fragen und Diskussionen zum Layout und Design, Templates und Stylesheets sowie Themes
Post Reply
User avatar
antiheld2000
Forum Members
Forum Members
Posts: 236
Joined: Thu Jan 31, 2008 9:23 am

Menü Template -> eindeutige ID

Post by antiheld2000 »

Ich versuche gerade mit dem angehängten Template mein Menüzu realisieren. In diesem Template werden per {repeat} diverse ULs geöffnet. hier würde ich gerne eine eindeutige id zuweisen. Leider haut mein Verushc nicht hin. Hat jemand einen Tipp???
Betroffener Ausschnitt:

Code: Select all

{foreach from=$nodelist item=node}
{capture assign=count_value}{counter name=c1}{/capture}
{if $node->depth > $node->prevdepth}
{repeat string="<ul class='subnav' id='unli-$count_value'>" 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}…
Hier noch einmal das volle Template:

Code: Select all

{if $count > 0}
<ul id="flowtabs" class="navi">
{foreach from=$nodelist item=node}
{capture assign=count_value}{counter name=c1}{/capture}
{if $node->depth > $node->prevdepth}
{repeat string="<ul class='subnav' id='unli-$count_value'>" 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->parent == true or ($node->current == true and $node->haschildren == true)}
<li class="off menuparent">
<a {elseif $node->current == true}
<li class="off currentpage">
<a {elseif $node->haschildren == true}
<li class="off menuparent">
<a {elseif $node->type == 'sectionheader' and $node->haschildren == true}
<li class="sectionheader"><span class="sectionheader">{$node->menutext}</span> {elseif $node->type == 'separator'}
<li style="list-style-type: none;"> <hr class="menu_separator" />{else}
<li class="off">
<a {/if}
{if $node->type != 'sectionheader' and $node->type != 'separator'}
{if $node->target}target="{$node->target}" {/if}
href="#{$node->alias}" id="nav-{$node->alias}" title="{$node->menutext}" class="scrolled">{$node->menutext}</a>
{elseif $node->type == 'sectionheader'}
><span class="sectionheader">{$node->menutext}</span></a>
{/if}
{/foreach}
{repeat string='</li></ul>' times=$node->depth-1}
{*repeat string='</li><li class="separator once" style="list-style-type: none;"> </li></ul>' times=$node->depth-1*}
</li>
</ul>
<div class="clearb"></div>
{/if}
cyberman

Re: Menü Template -> eindeutige ID

Post by cyberman »

Punkt 1 - Doku zu counter lesen ;)

http://www.smarty.net/manual/de/languag ... ounter.php

Hat einen eigenen Parameter assign, so dass du dir das capture sparen kannst.

Also statt

Code: Select all

{capture assign=count_value}{counter name=c1}{/capture}
besser

Code: Select all

{counter name='c1' assign='count_value'}
Punkt 2 - nochmal Doku zum Smarty-Syntax lesen 8)

http://www.smarty.net/manual/de/languag ... quotes.php

Variablen innerhalb von Parametern müssen in backticks gesetzt werden. Und wenn ich mich recht entsinne, sollten die Parameter der html-Tags in doppelten Anführungszeichen ("") stehen.

Also statt

Code: Select all

{repeat string="<ul class='subnav' id='unli-$count_value'>" times=$node->depth-$node->prevdepth}
besser

Code: Select all

{repeat string='<ul class="subnav" id="unli-`$count_value`">' times=$node->depth-$node->prevdepth}
Punkt 3 - Doku zu foreach lesen  ;D

foreach bringt bereits einen Counter mit, so dass du diesen eigentlich nicht separat aufrufen musst

http://www.smarty.net/manual/de/languag ... oreach.php

Wenn du also

Code: Select all

{foreach from=$nodelist item=node}
in

Code: Select all

{foreach from=$nodelist item=node name='flowtabs'}
änderst, kannst du

Code: Select all

{$smarty.foreach.flowtabs.iteration}
als Counter verwenden.
User avatar
antiheld2000
Forum Members
Forum Members
Posts: 236
Joined: Thu Jan 31, 2008 9:23 am

Re: Menü Template -> eindeutige ID

Post by antiheld2000 »

Erstmal: vielen Dank für die Infos und Tipps. Hat mich schon ganz gut weitergebracht. Leider funktioniert das wichtigste nicht so, wie du es vermutetst:
cyberman wrote:Punkt 2 - nochmal Doku zum Smarty-Syntax lesen 8)

http://www.smarty.net/manual/de/languag ... quotes.php

Variablen innerhalb von Parametern müssen in backticks gesetzt werden. Und wenn ich mich recht entsinne, sollten die Parameter der html-Tags in doppelten Anführungszeichen ("") stehen.

Also statt

Code: Select all

{repeat string="<ul class='subnav' id='unli-$count_value'>" times=$node->depth-$node->prevdepth}
besser

Code: Select all

{repeat string='<ul class="subnav" id="unli-`$count_value`">' times=$node->depth-$node->prevdepth}
Da du, wie man es auch wirklich korrekterweise machen müsste, die Anführungszeichen "vertauscht" hast, funktionieren die Smarty Anweisungen so nicht mehr… somit scheint mir repeat an dieser Stelle ungeeignet. Gibt es nicht so etwas wie {while}? Erste Googlelei hat nichts dergleichen hervorgebracht?!
cyberman

Re: Menü Template -> eindeutige ID

Post by cyberman »

antiheld2000 wrote: Leider funktioniert das wichtigste nicht so, wie du es vermutetst:
OK, dann eben doch mit capture ;).

Code: Select all

{capture name='ulcount'}<ul id="unli-{$smarty.foreach.flowtabs.iteration}" class="subnav">{/capture}
{repeat string=$smarty.capture.ulcount times=$node->depth-$node->prevdepth}
Gibt es nicht so etwas wie {while}? Erste Googlelei hat nichts dergleichen hervorgebracht?!
http://www.smarty.net/forums/viewtopic.php?t=7534
Post Reply

Return to “Layout und Design”