Makro while s podmínkou na konci
- m93a
- Člen | 4
Ahoj.
Jen mě tak napadlo, že když je makro if s podmínkou na konci, mohlo by se
používat i while s podmínkou na konci. Chovalo by se jako cyklus do-while,
který je součástí PHP.
Příklad:
{var $i = 0;}
{while}
<a href="?prispevek={$i}">Příspěvek {$i}</a>
{$i++}
{/while $i<3}
By ve výsledku vypadalo takhle:
<a href="?prispevek=0">Příspěvek 0</a>
<a href="?prispevek=1">Příspěvek 1</a>
<a href="?prispevek=2">Příspěvek 2</a>
<a href="?prispevek=3">Příspěvek 3</a>
Je to spíš jen takový detail, ale ty právě z Nette dělají Nette, ne? ;-)
Editoval m93a (11. 1. 2013 14:42)
- Filip Procházka
- Moderator | 4668
Vůbec se mi to nelíbí. Na první pohled to vypadá, že neumíš používat limit v sql a proto chceš vypisování výsledků zaříznout za prvními třemi.
Ukaž lepší použití, tohle je velice nesmyslné a zjevně vykonstruované.
(A sprav si zvýrazňování, nad textareou na to máš čudlíky, díky)
Editoval Filip Procházka (10. 1. 2013 17:09)
- m93a
- Člen | 4
Dobře, tak tady je lepší příklad (z PHP Manuálu)
do {
echo 'Choose a type, 0 or 1: ';
$type = trim(fgets(STDIN));
if ($type == 0) {
/* do stuff */
} elseif ($type == 1) {
/* do stuff */
}
} while ($type != 0 && $type != 1);
Hodí se to, když něco pořebuješ udělat jednou a pokud výsledek neodpovídá, tak to opakovat.
- kuzma88
- Člen | 15
Já nikdy do-while cyklus ani nepoužil. Obecně vždy je jiné řešení. A také jsem hlavně zastáncem řešení Model si připraví validní data, presenter je přenese do šablony a ta v jednoduchém cyklu vygeneruje html. Takže bych to rozhodně nepoužil :)
Tvůj návrch bych řešil takto:
Model:
public function getIndexes(){
return array(0,1,2);
}
Presenter:
$presenter->template->indexes = $model->getIndexes();
Šablona:
{foreach $indexes as $index}
<a href="?prispevek={$index}">Příspěvek {$index}</a>
{/foreach}
nebo
<a n:foreach="$indexes as $index" href="?prispevek={$index}">Příspěvek {$index}</a>
- kuzma88
- Člen | 15
ViPErCZ napsal(a):
Nechci se zastávat, ale todle by se dalo pak použít na jakýkoliv cyklus. Syntaxe jazyka má for, while, do-while. Latte má for, while. Určitě se dá do-while obejít, ale autor (si myslím) měl na mysli jestli by nemělo smysl to udělat relevantně vůči php.
Otázkou je, zda má smysl investovat čas to udělat a kolik vývojářů by to použilo. Já osobně ne, ale jsem jen rybka ve velkém rybníce.
- Filip Procházka
- Moderator | 4668
Tohle už je trochu hardcore ne? Programování v šabloně. To do ní nepatří.
- cabadaj
- Člen | 8
kuzma88 napsal(a):
Já nikdy do-while cyklus ani nepoužil. Obecně vždy je jiné řešení. A také jsem hlavně zastáncem řešení Model si připraví validní data, presenter je přenese do šablony a ta v jednoduchém cyklu vygeneruje html. Takže bych to rozhodně nepoužil :)
Ono je vždy na všechno jiné řešení. Ale otázka je, jak hezké, přehledné a praktické. A moc se mi nelíbí argumenty typu „já to nikdy nepoužil“. O takovýchto věcech se má argumentovat objektivně a ne subjektivně.
Filip Procházka napsal(a):
Tohle už je trochu hardcore ne? Programování v šabloně. To do ní nepatří.
A co je potom podle tebe FOR a WHILE cyklus a IF, když ne programovaní :-).
Chápu, že to musí někdo naprogramovat. Ideální by bylo aby navrhovatel udělal pull request. Ale nechápu, proč je většina reakcí tak odmítavých. Pak se mu asi těžko bude chtít pull requestem vůbec zabývat.
- Filip Procházka
- Moderator | 4668
Protože to že něco vypadá na první pohled hezky, není nutně důvod k tomu, aby to bylo okamžitě začleněno do frameworku. Nehledě na to, že tohle nevypadá hezky a ještě pořád jsem neviděl ten use-case.
- enumag
- Člen | 2118
@cabadaj: Zabívat se tím pull requestem je prakticky zbytečné, protože by ho David nejspíš stejně nemergnul. Nemyslím si že by bylo vhodné aby framework bobtnal a bobtnal kvůli všem okrajovým případům pokud existuje jiné řešení. Kromě toho pokud to makro opravdu potřebuje, nikdo mu nebrání si to naprogramovat a doinstalovat do latte ve své aplikaci.