Nette Framework
  • Úvodní stránka
  • Download
  • Dokumentace
  • Fórum
  • Blog
  • Přispějte
  • Quick Start
    • Začínáme
    • Adresářová struktura
    • Vytvoření presenteru
    • Připojení šablony
    • Tvorba odkazů
    • Hezčí šablony
    • Zobrazení tabulky
    • Stránkování a řazení
    • Tvoříme komponentu
  • Nette\Application
    • Application
    • AppForm
    • Control
    • Presenter
    • PresenterCompo­nent
    • PresenterRequest
    • MultiRouter
    • Route
    • SimpleRouter
  • Nette\Caching
  • Nette\Component
  • Nette\Debug
    • Základy
    • Logování chyb
    • Firebug
  • Nette\Environment
  • Nette\Forms
  • Nette\IO\SafeS­tream
  • Nette\Loaders
  • Nette\Object
  • Nette\Security
    • Bezpečnost aplikací
    • Identity
    • SimpleAuthenti­cator
    • Permission
    • Dynamická správa rolí a zdrojů
  • Nette\String
  • Nette\Templates
    • Template
    • Template Filters
    • Template Helpers
  • Nette\Web\Html
  • Nette\Web\HttpR­equest
  • Nette\Web\HttpR­esponse
  • Nette\Web\Session
  • Nette\Web\User
Naposledy změněno 13. 11. 2008 Edituj Historie Poslední změny

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.

« Připojení šablony Hezčí šablony »

Nette Framework powered | dibi powered | Texy! powered | Institut Školení PHP