Klasická situace, ale není to tak jednoduché jak se zdá. Co všechno musíme řešit?
- podle kterého sloupce řadíme
- jak je naposledy seřazen
Pokud toto už máme napsáno, tak dále musíme řešit různé překliky mezi sloupci.
Jdeme na věc!
Presenter:
< ?php class AdminPresenter extends AdminBasePresenter { /** @persistent int */ // označuje proměnou níže jako persistentní - proměnná se sama přenáší mezi kliky v rámci presenteru (náhrada bezestavovosti protokolu HTTP) public $p_sort = 1; // proměnná pro uložením posledního řazeného sloupce /* * $sort Integer - pořadové číslo sloupce z dotazu podle kterého se má řadit * $by String - způsob řazení */ public function renderTabulka($sort = 1, $by = 'ASC') { $by = ($sort != $this->p_sort) ? 'ASC' : $by; // zjistíme jestli řadíme stejný sloupec jako minule $this->template->rows = dibi::fetchAll('SELECT ... FROM ... ORDER BY %i %sql', $sort, $by); // seřadíme $this->template->by = ($by == 'ASC') ? 'DESC' : 'ASC'; // pošleme proměnou s opačným způsobem řazení do templatu $this->p_sort = $sort; // uložíme sloupec, podle kterého jsme řadili } |
Template:
<table>
<tr>
<td><a href="{plink sklad, 1, $by}">Sloupec 1</a></td>
<td><a href="{plink sklad, 2, $by}">Sloupec 2</a></td>
<td><a href="{plink sklad, 3, $by}">Sloupec 3</a></td>
</tr>
{if count($rows) > 0}
{foreach $rows as $row}
<tr>
<td> {$row['sloupec1']} </td>
<td> {$row['sloupec2']} </td>
<td> {$row['sloupec3']} </td>
</tr>
{/foreach}
{else}
<tr><td colspan="3">V databázi se nenalézá žádný záznam.</td></tr>
{/if}
</table> |
Doufám, že to je pochopitelné :).