Page 1 of 1

Menü Template -> eindeutige ID

Posted: Wed Aug 04, 2010 7:12 pm
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}

Re: Menü Template -> eindeutige ID

Posted: Thu Aug 05, 2010 6:57 am
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.

Re: Menü Template -> eindeutige ID

Posted: Thu Aug 05, 2010 7:30 am
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?!

Re: Menü Template -> eindeutige ID

Posted: Thu Aug 05, 2010 9:50 am
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