foreach v template u proměnné výstupu z databáze vícekrát
- simPod
- Člen | 383
Pouzivam kod na zobrazeni dat z databaze v template:
<li n:foreach="$db->order('id')->where('day', 1)->where('NOT name', '') as $thing">
{$thing->name}
</li>
to funguje, kdyz to ale pouziji 2×, napr.
<li n:foreach="$db->order('id')->where('day', 0)->where('NOT name', '') as $thing">
{$thing->name}
</li>
<li n:foreach="$db->order('id')->where('day', 1)->where('NOT name', '') as $thing">
{$thing->name}
</li>
Tak to nevyhodi zadnou chybu, jen to nic nezobrazi. Cim to je? Dekuji
Editoval simPod (28. 10. 2011 23:23)
- Jan Voráček
- Člen | 90
Čau. Předpokládám, že $db
je instance
Nette\Database\Table\Selection
.
Určitě víš (a sám to v ukázce používáš), že restrikce jdou „lepit“ na sebe. Od toho se vyvíjí ona „nefunkčnost“ :) V prvním cyklu procházíš výsledek dotazu
SELECT * FROM tabulka WHERE (day = 0) AND (NOT name = '') ORDER BY id;
V druhém cyklu ale připojuješ další podmínky, takže se vlastně snažíš projít výsledky dotazu
SELECT * FROM tabulka WHERE (day = 0) AND (NOT name = '') AND (day = 1) AND (NOT name = '') ORDER BY id, id;
což není syntaktická chyba, ale vrátí se prostě prázdná množina dat.
- Jan Voráček
- Člen | 90
Mně osobně se moc nelíbí ten způsob získávání dat v šabloně a do šablon si posílám už vyfiltrovaná a seřazená data, nad kterými pouze iteruji. Pokud ti ale mám odpovědět na tvou otázku, pak je tu asi jen jeden způsob, který se mi líbí ještě míň (programování do šablony prostě nepatří).
Presenter: (btw. pojmenování db
je vážně hloupé –
absolutně z toho nepoznáš, o jaká data jde)
$this->template->db = $database->table('tabulka')->where('NOT name', '')->order('id');
Šablona:
{var $tmpDb = clone $db}
<li n:foreach="$tmpDb->where('day', 0) as $thing">
{$thing->name}
</li>
{var $tmpDb = clone $db}
<li n:foreach="$tmpDb->where('day', 1) as $thing">
{$thing->name}
</li>
Editoval Jan Voráček (29. 10. 2011 14:15)