Šablona, zpětné doplnění proměnné po iteraci

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

Mám seznam hráčů seřazený podle jména, přes který iteruji a vypisuji je do tabulky. Při iteraci si poznamenávám minimální a maximální skóre. Tyto hodnoty bych potřeboval zpětně doplnit do nadpisu nad tabulkou. Je na to nějaké šikovné udělátko v Nette, nebo musím nad seznamem iterovat dvakrát? Pro názornost ještě ukázka kódu:

<h1>Seznam hráčů od {$min_score} do {$max_score}</h1> <!-- zde potřebuji hodnoty zjištěné níže -->
<table>
{var $min = 1000, $max = 0}
<tr n:foreach="$players as $player">
	<td>{$player->name}</td><td>{$player->score}</td>
	<?php $min = min($min, $player->score); $max = max($max, $player->score); ?>
</tr>
<!-- zjištěné $min a $max potřebuji "poslat" do nadpisu -->
</table>
MartinitCZ
Člen | 580
+
0
-

Tohle by se nejspíš dalo udělat pomocí bloků.

LuKo
Člen | 116
+
0
-

Různé kombinace {block}, {define} a {include} jsem zkoušel, avšak bez úspěchu. Například:

<h1>{include min}</h1>

{for}
...
{/for}
{define min}{$min}{/define}

Vyhodí Undefined variable $min.

duke
Člen | 650
+
0
-

Lze použít makro {capture}:

{var $min = 1000}
{var $max = 0}
{capture $playersList}
<tr n:foreach="$players as $player">
    <td>{$player->name}</td><td>{$player->score}</td>
    {? $min = min($min, $player->score); $max = max($max, $player->score);}
</tr>
{/capture}
<h1>Seznam hráčů od {$min} do {$max}</h1>
<table>
{$playersList|noescape}
</table>

Editoval duke (14. 6. 2014 15:59)

japlavaren
Člen | 404
+
0
-

nejaka iteracia nad polom nieje az taky problem (predpokladam, ze nebudes mat milion poloziek).
dolezitejsia je citatelnost kodu preto by som to spravil takto:

{var $scores = array_map(function($player){ return $player->score; }, $players)}
<h1>Seznam hráčů od {min($scores)} do {max($scores)}</h1>
<table>
	<tr n:foreach="$players as $player">
		<td>{$player->name}</td>
		<td>{$player->score}</td>
	</tr>
</table>

popripade presun $scores do presenteru

LuKo
Člen | 116
+
0
-

S capture počítám jako se zálohou, kdyby to nešlo přehledněji.

LuKo
Člen | 116
+
0
-

Příklad jsem v maximální možné míře zjednodušil, abych se co nejvíce zaměřil na to, co bych potřeboval. V reálu je pak jeden $player_list, který na jedné stránce rozhazuje do několika tabulek a pro každou potřebuji znát $min a $max. Tvé řešení by proto znamenalo velké množství duplicitního kódu. Zatím to vypadá, že nijak rozumně nejde poslat proměnnou zpět. Při formulaci otázky i reakcí mě napadají další způsoby, jak můj reálný příklad komplet předělat.