Latte 3: magická proměnná $iterations
- David Grudl
- Nette Core | 8227
Magickou proměnnou $iterations
(nemyslím
$iterator
) jsem přidal do Latte jako rychlé dočasné řešení
několika situací, než najdu lepší, záměrně jsem ji ani nedokumentoval.
Trvalo to 11 let :) S příchodem Latte 3 bych ji vlastně rád
odstranil.
K čemu složí? Jde o čítač počtu dokončených cyklů. Jak funguje je
vidět z kódu, který Latte generuje pro {foreach}
:
$iterations = 0;
foreach ($items as $item) {
...
$iterations++;
}
Předchůdce {else}
Pomocí této proměnné šlo udělat foreach-else:
{foreach $items as $item}
...
{/foreach}
{if !$iterations}
no items
{/if}
Ale to lze dnes udělat lépe:
{foreach $items as $item}
...
{else}
no items
{/foreach}
Čítač dokončených cyklů
Tím, že se $iterations inkrementoval na konci cyklu, nezapočítával
přeskočené položky pomocí {continueIf}
.
{foreach $items as $item}
{continueIf $item->foo !== $foo}
průchod č. {$iterations + 1}
{/foreach}
Pro tohle také existuje náhrada v podobě značky {skipIf}
,
která také nezapočítává v $iterator->counter
přeskočené cykly:
{foreach $items as $item}
{skipIf $item->foo !== $foo}
průchod č. {$iterator->counter}
{/foreach}
Předchůdce {rollback}
Protože proměnná je k dispozici na rozdíl od $iterator
i po konci cyklu, dala se využít jako podmínka v koncové značce
{/if}
k zahození celé části výstupu:
{if}
<table>
<caption>Foo</caption>
{foreach $items as $item}
...
{/foreach}
</table>
{/if $iterations}
Stejné věci se dá dosáhnout pomocí {try}
a
{rollback}
:
{try}
<table>
<caption>Foo</caption>
{foreach $items as $item}
...
{else}
{rollback}
{/foreach}
</table>
{/try}
Další využití
Samozřejmě proměnná mohla mít i další využití a pro některé
nemusí jednoduchá náhrada existovat. Napadá mě třeba vypsání počtu
průchodů za značkou {/foreach}
.
Zrušit?
Protože proměnná byla jen „dočasný“ workaround pro uvedené situace, které se dnes dají zapsat lépe a IMHO srozumitelněji bez nutnosti se odkazovat na magickou proměnnou, rád bych jí dal sbohem. Navíc není robustní a třeba u vnořených cyklů vrací blbosti.
Co si o tom myslíte?
- Lumeriol
- Generous Backer | 63
Pokud existuje funkce, ktera byla 11 let „nedulezita“ a vedelo o ni
minimum lidi, tak asi nema vyznam ji zachovavat.
Nehlede na to, ze v pripade noveho vyuziti se muze v budoucnu jmenovat jinak,
delat i neco jineho nebo se vyskytne opet lepsi reseni, a bude minimalne
zadokumentovana.
- David Grudl
- Nette Core | 8227
To právě nevím, jestli není používaná. Proto to sem píšu, jako návod k přechodu.