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é :).