Latte – výraz podmínky v ukončovací značce

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

Ahoj, v dokumentaci o Latte jsem se dozvěděl toto:

Výraz v podmínce {if} lze uvést také v ukončovací značce, což se hodí v situacích, kdy při otevírání podmínky ještě jeho výsledek neznáme:

{if}
    <h1>Výpis řádků z databáze</h1>

    {foreach $database->table as $row} ... {/foreach}
{/if $row}

Pokud je účelem této funkcionality to, aby při prázdném $database->table se nevypsal celý blok (tj. ani h1 element), tak musím konstatovat, že to nefunguje. Mám takhle v šabloně celkem 3 bloky, u prvního v seznamu jsou data, takže to projde, ale ve druhém je seznam prázdný a vyhazuje to výjimku, že nezná tu proměnnou v uzavírací značce.

Jde tedy o bug nebo jsem špatně pochopil účel této konstrukce? (Nette 2.0.10)

jiri.pudil
Nette Blogger | 1034
+
0
-

Není to bug. Ta výjimka dává smysl: jestliže v $database->table nejsou žádná data, pak se foreach vůbec neprovede, a proměnná $row tudíž není nikde definovaná. Pokud to chceš mermomocí používat takhle, použij v té podmínce isset($row).

Petr Daňa
Člen | 109
+
0
-

Jo, s tím isset to fungovat bude. Ale je fakt, že pro tento případ je vhodnější použít klasickou podmínku na count() hned na začátku.

Akorát by to teda chtělo, aby někdo (autor) opravil tu dokumentaci, protože je tam uvedený nefungující příklad.

jiri.pudil
Nette Blogger | 1034
+
0
-

Akorát by to teda chtělo, aby někdo (autor) opravil tu dokumentaci

Pošli pull request :)