Omezení počtu iterací foreach v Latte šabloně*

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

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

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

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

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

vvoody
Člen | 910
+
0
-

Nepotrebuješ dva dotazy, vykonaj len ten s väčším limitom, dáta si ulož do pola a vracaj len toľko prvkov pola koľko chceš zobraziť v šablóne.

wicked
Člen | 290
+
0
-

Mohl by jsi mi to prosim ukazat na nejakym example kodu?

MartinitCZ
Člen | 580
+
0
-

@**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>
wicked
Člen | 290
+
0
-

Super, funguje bezvadně :)

Děkuji všem za pomoc ;)