LATTE – proč foreach nejde použít 2×

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

ahoj,
chtěl bych v latte šabloně použít 2× stejný cyklus foreach

{foreach $discuss as $item}{$item->text} | {/foreach}
{foreach $discuss as $item}{$item->text} | {/foreach}

Jednou se vypíše , ale ten 2. už ne. Nevíte někdo proč?

Jan Endel
Člen | 1016
+
0
-

Foreach používá vnitřně iterator, přesune se pomaličku skrze pole. Pokud to chceš použít takhle, je třeba $discuss před druhým foreachem vyresetovat.

Marek Šneberger
Člen | 130
+
0
-

Zkus to jinak pojmenovat, něco jako

{foreach $discuss as $item}{$item->text} | {/foreach}
{foreach $discuss as $item2}{$item2->text} | {/foreach}
David Matějka
Moderator | 6445
+
0
-

@Jan Endel: foreach resetuje sam

@Zerig: nech me hadat: jedna se o vysledek z nette\database\connection::query a je to nette\database\statement (resp. pdostatement)?
pokud jo, tak to vypada na nejakou chybu (nebo vlastnost?) pdo, ten pdostatement nejde iterovat 2×, takze nekde v modelu zkus vysledek upravit pres fci iterator_to_array na pole

petr.pavel
Člen | 535
+
0
-

Hádal bych stejně jako @matej21. Chyba by mohla mít kořeny ještě v NotORM, které takovou taky má. Ochcávkou je clonovat výsledek ještě před prvním iterováním.

Zerig
Člen | 70
+
0
-

No mám to přes query, čili by to neměl být NotORM, pokud to dobře chápu.

$this->template->discuss = $this->connection->query("SELECT * FROM `discuss` WHERE `from`<=".$this->template->end." AND `from`>=".$this->template->start." ORDER BY ID ASC");	// Zápis do diskuss

Jinak to co řeším:
Mám Několik článků pod sebou a ke každé zvlášť diskusi. Tudíž k 1 článku je více diskusí. A já je potřebuju všechny vypsat.

Eda
Backer | 220
+
0
-

Taky jsem se s neprůchodností Nette\Statement po prvním průchodu setkal. Vyřešil jsem to převedením na pole…

hrach
Člen | 1838
+
0
-

->fetchAll() nyni v masteru je mozne volat vicekrat.

Zerig
Člen | 70
+
0
-

Díky moc ->fetchAll() pomohlo