Spocitavanie prvkov Table\Selection v cyklu v sablone

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

Ahoj,
aktualizoval som verziu Nette Framework 2.0-beta d5b50dc released on 2011–06–03 na 1aae612 released on 2011–06–27 a neviem co sa v Nette/Database zmenilo, ale nasledovny zapis v sablonu uz nespocitava polia spravne.

Ide o to, ze v cyklu count($cat->related('articles')) v <a n:if> vracia/spocitava pole bez problemov, ale v druhom pouziti toho isteho prikazu v cyklu uz ‚count($cat->related('articles‘))' vracia nulu (<a>0</a>). Neviete v com to kotvi? Vhodnejsie riesenie ma nenapada.

<tr n:foreach="$categories as $cat" n:class="$iterator->odd ? odd, $iterator->even ? even">
<td>
	<a title="{$cat->name}" n:href=":admin:kategorie:upravit, $cat->id">{$cat->name}</a></td>
<td>
	<a n:if="count($cat->related('articles')) > 0" n:href=":admin:kategorie:zobraz, $cat->id">
{count($cat->related('articles'))}</a>
</td>
</tr>

Editoval rixi (28. 6. 2011 19:24)

bojovyletoun
Člen | 667
+
0
-

Nevím, chyba bude někde v předbíhání budoucnosti. Zkus si uložit výsledek takto {var $sum => count(...)} a pak použít n:if="$sum"{$sum}

rixi
Člen | 109
+
0
-

tomu som sa prave chcel vyhnut, ale dik. skusim ci to neosvieti celu vec.

David Grudl
Nette Core | 8227
+
0
-

Těch commitů do Nette\Database tam není moc, myslíš že bys mohl zjistit, který to pokazil?

hrach
Člen | 1838
+
0
-

Už jsem se na to zběžně díval, ale nenašel sem příčinu. Zkusím víc.

rixi
Člen | 109
+
0
-

Pravdepodobne https://github.com/…6a7dd05eed78

Editoval rixi (2. 7. 2011 13:12)

David Grudl
Nette Core | 8227
+
0
-

K čemu to tam vlastně je?

_Martin_
Generous Backer | 679
+
0
-

Narazil jsem na problém, pravděpodobně se stejnou příčinou. Taky jsem potřeboval projít vnořenou relaci dvakrát během jednoho nadřazeného cyklu:

foreach ($order->related('order_item') as $item) {
	echo '<h1>ITEM</h1>';

	if ($item->type == 'product') {
		echo '<h2>Prvni</h2>';

		foreach ($item->related('product') as $product) {
			NDebugger::dump($product === NULL);
		}

		echo '<h2>Druhy</h2>';

		foreach ($item->related('product') as $product) {
			NDebugger::dump($product === NULL);
		}
	}
}
Očekávaný výstup (na konkrétních datech) Skutečný výstup
ITEM ITEM
Prvni Prvni
FALSE FALSE
Druhy Druhy
FALSE FALSE
 
ITEM ITEM
Prvni Prvni
FALSE FALSE
FALSE FALSE
FALSE FALSE
Druhy Druhy
FALSE  
FALSE  
FALSE  
 
ITEM ITEM
Prvni Prvni
FALSE FALSE
Druhy Druhy
FALSE  
David Grudl
Nette Core | 8227
+
0
-

Tak jsem ten podezřelý commit odstranil.