Jak v NETTE změnit řazení tabulky klikem na záhlaví sloupců

Klasická situace, ale není to tak jednoduché jak se zdá. Co všechno musíme řešit?

  1. podle kterého sloupce řadíme
  2. 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é :).

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..