Latte a n:if makro? Nechybí vám také?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Landsman
Člen | 152
+
0
-

Dneska jsem si říkal, že mi docela chybí n:if makro. Rád bych odehrál: foreach, podmínky pro zobrazení, classny v jednom tagu <li>, ale pořádně (asi) nemohu.

Příklad:

<ul class="nav navbar-nav">
    <li n:foreach="$intersection as $i" n:class="col-xs-6, 'i-' . $iterator->getCounter(), $item->class" n:ifcontent>
        {if 4 >= $iterator->getCounter() && false === stripos($i->link, $moduleName)}
        <a href="{$presenter->generateLink($i->link, $i->param)}" {if $i->target}target="{$i->target}"{/if}>{_$i->title}</a>
        {/if}
    </li>
</ul>

Když napříklda 1. z položek vypadne díky podmínce až za <li>, tak se nezobrazí poslední, která by normálně měla, jelikož nesedí internator a také samozřejmě „i-internator“ classny nejdou po sobě.

Ideální stav by tedy bylo n:if makro.
Měl jsem takový pocit, že jej latte mělo nebo ne?

Editoval Landsman (27. 7. 2016 17:16)

David Matějka
Moderator | 6445
+
0
-

n:if makro existuje

Landsman
Člen | 152
+
0
-

Aha, skvěle. Já ho právě používal, ale zdálo se mi, že se nezpracovává, tak jsem mrknul na https://latte.nette.org/cs/tags a nenašel jsem ho tam.

Vypadá to lépe

<ul class="nav navbar-nav">
    {var $c = 1}
    <li n:foreach="$intersection as $i" n:class="col-xs-6, 'i-' . $c, $i->class" n:if="4 >= $c && false === stripos($i->link, $moduleName)">
        <a href="{$presenter->generateLink($i->link, $i->param)}" {if $i->target}target="{$i->target}"{/if}>{_$i->title}</a>
        {var $c = $c+1}
    </li>
</ul>

Nakonec jsem čekal, že iterator bude reflektovat podmínky (nebude přičítat položku, kterou nezobrazím), tak jsem od něj jednoduše opustil…

Editoval Landsman (27. 7. 2016 17:35)

Jan Mikeš
Člen | 771
+
+2
-

Jeste takovy tip pro zkraceni a mozna i zprehledneni:

<a href="{$presenter->generateLink($i->link, $i->param)}" {if $i->target}target="{$i->target}"{/if}>{_$i->title}</a>
{var $c = $c+1}

vs

<a href="{$presenter->generateLink($i->link, $i->param)}" n:attr="target => $i->target">{_$i->title}</a>
{php $c++}

Editoval Lexi (29. 7. 2016 7:36)

Landsman
Člen | 152
+
0
-

@Lexi díky, ještě ty dva řádky s $c nějak zabít a je to dokonalé :))

Editoval Landsman (29. 7. 2016 14:23)

CZechBoY
Člen | 3608
+
0
-

Nešel by použít $iterator?

Landsman
Člen | 152
+
0
-

@CZechBoY To jsem zkoušel, ale nezohledňuje položky které skryji v rámci té podmínky, což mě mrzí – čekal bych to od něj.

CZechBoY
Člen | 3608
+
0
-

Nešlo by to pole rovnou ořezat aby tam ta podmínka nebyla (model/presenter)?

Landsman
Člen | 152
+
0
-

@CZechBoY To by bylo asi řešení, zkusím.