Omezení počtu iterací foreach v Latte šabloně*
- wicked
- Člen | 290
Zdravím Vás přátelé :)
Mám takový dotaz, jak v šabloně mohu omezit počet výpisů z db pomocí foreach? Mám několik v šabloně hozených výpisů a potřebuji, aby třeba 1. vypisoval pouze 2 záznamy, 2. vypisoval 5 atd :) Jde to vůbec zakomponovat do latte šablony?
Zde uvádím jak mám jeden foreach v šabloně zapsán.
<div class="movie">
{if count($videos)}
{foreach $videos as $video}
<iframe width="255" height="151" src="{$video['odkaz']}"></iframe>
{/foreach}
{else}
<h2 align="left magrinL">Doposud nebyl přidán žádný videorecept!</h2>
{/if}
</div>
Předem Vám děkuji
- castamir
- Člen | 629
@wicked Foreach ti vypíše všechny prvky, ale ty nejspíš potřebuješ obyčejný cyklus for.
Navíc, pokud máš select z databáze, omez si to už tam (přidej limit). V nette database to zapíšeš (pro limit = 2) následovně
$result = $connection->table('tvoje_tabulka')->where(...)->limit(2)
V takovém případě máš to omezení zajištěno dopředu a můžeš v klidu použít foreach…
- vvoody
- Člen | 910
Bad practice:
Latte je v podstate nadstavba nad php takže nič ti nebráni prerušiť cyklus
breakom. Malo by sa to dať takto zapísať.
{? break;}
Best practice:
pripraviť si dáta presne tak ako ich potrebuješ ešte pred vložením do
šablóny. Predstav si že nastane situácia, že budeš chcieť zmeniť počet
vypísaných videí, miesto hrabania sa v zabordelenej šablóne, len zmeníš
nejakú vhodne pomenovanú konštantu v modelovej triede.
- wicked
- Člen | 290
Jedna se mi pravd o to, ze taham vsechna data z jednoho modelu a v sablone pouze vykresluji co potrebuji, proto chci vytvorit limit pro kazdy foreach, takto bych musel do modelu implementovat zbytecne moc dotazu a limitaci.
Proto jsem prave psal, jak docilim limitovani daneho foreachu v sablone.
Nebo je to spatny pristup? S nette zacinam, rad si necham pofadit od Vas zkusenejsich :)
Dekuji
- MartinitCZ
- Člen | 580
@**castamir**: For se na tohle určitě nehodí. Může použít foreach a vložit do něj break a nebo lepší způsob, tedy limit().
<div class="movie">
{if count($videos)}
{foreach $videos as $video}
{breakIf $iterator->getCounter() >= 3} // Vypíše pouze první 3 záznamy
<iframe width="255" height="151" src="{$video['odkaz']}"></iframe>
{/foreach}
{else}
<h2 align="left magrinL">Doposud nebyl přidán žádný videorecept!</h2>
{/if}
</div>