for … empty (ekvivalence v PHP/latte – foreach)
- Fandik
- Člen | 19
Chtěl bych se zeptat, zda jde pomocí latte zapsat jednoduše kód, který je ekvivalentní tomuto z šablon frameworku Djanga:
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>Sorry, no athlete in this list!</li>
{% endfor %}
<ul>
Pozn. Nemám namysli ekvivalenci, kdy foreach dám do podmínky, ale zápis podobný přímo tomuto.
- Vojtěch Dobeš
- Gold Partner | 1316
Nebo je možný zápis:
<ul>
{if}
<li n:foreach="$athlete_list as $athlete">{$athlete[name]}</li>
{else}
<li>Sorry, no athlete in this list!</li>
{/if $iterations}
</ul>
Editoval vojtech.dobes (18. 2. 2012 1:34)
- vrana
- Člen | 131
Jé, na tenhle příklad si vzpomínám z dob, kdy jsem se Django učil. Už
tehdy mě totiž trklo, že je navržený poněkud nešťastně, protože se
nedá rozlišit stav, kdy žádné atlety nemáme a kdy máme jednoho atleta
jménem „Sorry, no athlete in this list!“. Bez atletů by se mělo použít
jiné značkování, např. <p>
místo
<ul>
, jenže to by příklad úplně pohřbilo.
- Jan Jakeš
- Člen | 177
Tak to jo, Latte opět boduje :)
Navíc kdyby někdo měl potřebu to řešit pomocí n:maker, šlo by asi velice snadno dosáhnout něčeho takového:
<ul n:not-empty>
<li n:foreach="$athlete_list as $athlete">{$athlete[name]}</li>
</ul>
<p n:empty>Sorry, no athlete in this list!</p>
Přidáním maker:
$macros->addMacro('not-empty', 'ob_start()', 'if ($iterations) ob_end_flush(); else ob_end_clean()');
$macros->addMacro('empty', 'if (!$iterations):', 'endif');
- Fandik
- Člen | 19
vrana napsal(a):
Jé, na tenhle příklad si vzpomínám z dob, kdy jsem se Django učil. Už tehdy mě totiž trklo, že je navržený poněkud nešťastně, protože se nedá rozlišit stav, kdy žádné atlety nemáme a kdy máme jednoho atleta jménem „Sorry, no athlete in this list!“. Bez atletů by se mělo použít jiné značkování, např.
<p>
místo<ul>
, jenže to by příklad úplně pohřbilo.
Taky se mi to moc nelíbí jak je to udělané a naprosto sohlasím, že dát „chybový“ text do <p> je mnohem lepší.