Šablona, zpětné doplnění proměnné po iteraci
- LuKo
- Člen | 116
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>
- duke
- Člen | 650
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
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
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.