Makro while s podmínkou na konci

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

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
+
0
-

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
+
0
-

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.

enumag
Člen | 2118
+
0
-

Nepřipadá mi to natolik důležité aby na to muselo existovat makro. Navíc ti nikdo nebrání napsat tohle:

{var $i = 0;}
<?php do { ?>
<a href="?prispevek={$i}">Příspěvek {$i}</a>
<?php } while (++$i < 3); ?>
ViPEr*CZ*
Člen | 805
+
0
-

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.

kuzma88
Člen | 15
+
0
-

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
+
0
-

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
+
0
-

Tohle už je trochu hardcore ne? Programování v šabloně. To do ní nepatří.

cabadaj
Člen | 8
+
0
-

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
+
0
-

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
+
0
-

@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.

David Grudl
Nette Core | 7565
+
0
-

Obecně proti cyklu do-while nic nemám…