Nette Framework Quick Start V.
Dalším krokem vývoje naší aplikace bude udělat jména tabulek „rozklikávací“. Zkrátka vytvoříme z nich odkazy, které povedou na stránky, kde bude vykreslen obsah tabulky.
Odkazujeme
Když v roce 2004 začal Nette Framework vznikat, hlavní úvahy se točily kolem toho, jak co nejvíce zjednodušit právě odkazování.
- Co je to vlastně odkaz? To je nabídka uživateli provést určitou akci.
- A co je to akce? To je třeba zavolání funkce či metody.
Zavolat metodu třídy samozřejmě umí každý programátor:
Products::print(17); // vytiskne produkt s ID 17
Ale teď si představte, že úplně stejným způsobem byste vytvořili odkaz! Prostě odkaz, na který když uživatel klikne, tak se zavolá zmíněná metoda:
<a href="<?=
link('Products:print', 17); // vytiskne produkt s ID 17 - až po odkliknutí!
?>">tiskni</a>
Programování webových aplikací by dostalo úplně novou šťávu. Žádné složité sestavování URL, předávání parametrů a pak jejich analýza. Pryč s tím. Každý odkaz jako prosté volání metody, jen s odkladem – až uživatel klikne.
Tak tohle Nette Framework umí.
Jak ale ovlivnit tvar URL? Co když budu chtít, aby tisk produktů byl na
URL http://example.com/catalog/print/17. Nebo třeba
http://example.com/print?product=17? Snadné řešení – podobu
adres si velmi jednoduše nadefinujeme. Ale nechme to na později. Teď přece
programujeme prohlížeč databáze, že?
Odkazování už nemůže být jednodušší. Až se vás někdo zeptá, čím je váš oblíbený Nette Framework tak výjimečný, můžete začít třeba od tvorby odkazů :-)
Praktická implementace
Protože dvojicí třída:metoda jsou vlastně i páry
presenter:view, budeme odkazovat přímo na ně. Zatím máme
vytvořenou jen odpověď Default:default, kde se zobrazí přehled
tabulek databáze. Pro vypsání obsahu tabulky můžeme přidat další pohled
table zapsáním následujících řádek do výchozího presenteru
DefaultPresenter.php:
public function renderTable($table)
{
...
}
A samozřejmě také novou šablonu. V původní šabloně
Default.default.phtml tedy doplníme generování odkazů:
...
<?php foreach ($tables as $table): ?>
<li><a href="<?php echo $presenter->link('Default:table', $table) ?>"><?php echo $table ?></a></li>
<?php endforeach ?>
..
V prohlížeči pak uvidíte tento výsledek:

Poznámka: $presenter je další proměnnou, kterou
šabloně předává Nette Framework automaticky. Pro větší přehlednost je
záměrně vynecháno escapování řetězců.
Po kliknutí na odkaz bude zavolána metoda renderTable(...) a
její parametr $table bude obsahovat název tabulky.
Tip: pokud odkazujeme na stejný presenter a liší se jen pohled, můžeme
název presenteru a dvojtečky vynechat (tj. $presenter->link('table',
$table)). A pokud odkazujeme i na stejný pohled, lze místo jeho
názvu použít slovo this.
Nezdá se vám kód šablon krapet nepřehledný? A to jsem přitom vynechal
volání htmlSpecialChars(). Něco s tím uděláme.
