Šablony: makro {elseforeach}

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

Líbilo by se mi makro {elseforeach} (a přijde mi divné, že to už někdo nechtěl):

Místo víceúrovňového:

{if count($items)}
  {foreach $items as $item}
    $item['name'],
  {/foreach}
{else}
    <i>no items</i>
{/if}

je zajisté přehlednější:

{foreach $items as $item}
  $item['name'],
{elseforeach}
  <i>no items</i>
{/foreach}

Pro sebe jsem si ho nabastlil takto, ale při zásahu do maker {foreach} a {/foreach} by to šlo asi čistěji:

NLatteMacros::$defaultMacros['elseforeach'] ='<?php endforeach;foreach($iterator->isEmpty()?array(1):array() as $_dummy): ?>';
Cifro
Člen | 245
+
0
-

Ako že nie? A toto? https://forum.nette.org/…achelse-each :)))

Filip Procházka
Moderator | 4668
+
0
-

pěkná funkce, ale na foreachelse ani eachelse bych si asi nezvykl…

{foreach $items as $item}
  $item['name']{sep},{/sep}
{/foreach}

{if !count($items)}
    <i>no items</i>
{/if}
vitas
Člen | 6
+
0
-

Cifro napsal(a):
Ako že nie? A toto? https://forum.nette.org/…achelse-each :)))

No, v podstatě jo. Jen … tvé řešení vyžaduje nutně použití {eachelse}, já to myslel jako nepovinné.
Když to tam nechci použiji foreach a když jo tak each, … přijde mi to takové neelegantní.

Cifro
Člen | 245
+
0
-

To je pravda. To moje vyžaduje aj {eachelse}.

Filip Procházka
Moderator | 4668
+
0
-

Od toho to ale přeci nepřepisuje původní foreach ne? když chci jen iterovat dám foreach, když chci else tak použiju Cifrovo řešení? :)

vitas
Člen | 6
+
0
-

HosipLan napsal(a):

Od toho to ale přeci nepřepisuje původní foreach ne? když chci jen iterovat dám foreach, když chci else tak použiju Cifrovo řešení? :)

Asi nikoho nepřesvědčím. Je jako by pro větvení bylo makro {ifelse}{else}{/ifelse} a {if}{/if} se mohlo použít jen bez {else}. {each} je jako hack dobrý, ale nepřijde mi to jako koncepční.

redhead
Člen | 1313
+
0
-

Souhlasím s vitasem, pokud by mělo být nějaké else pro foreach, rozhodně ne s dalším novým makrem navíc. Analogie s if/else je zcela logická.