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
    • Základní třídy
    • Nette\Annotations
    • Nette\Component
    • Nette\Debug
      • Základy
      • Logování chyb
      • Firebug
    • Nette\Environment
    • Nette\Image
    • Nette\Object
    • Nette\String
  • Nette\Application
    • Application
    • AppForm
    • Control
    • Presenter
    • PresenterCompo­nent
    • PresenterRequest
    • Routování
    • MultiRouter
    • Route
    • SimpleRouter
  • Nette\Caching
  • Nette\Forms
  • Nette\IO\SafeS­tream
  • Nette\Loaders
  • Nette\Security
    • Bezpečnost aplikací
    • Identity
    • SimpleAuthenti­cator
    • Permission
    • Dynamická správa rolí a zdrojů
  • Nette\Templates
    • Template
    • Template Filters
    • Template Helpers
  • Nette\Web
    • Web
    • Ftp
    • Html
    • HttpRequest
    • HttpResponse
    • Session
    • User
Naposledy změněno 1. 9. 2008 Edituj Historie Poslední změny

View vs. Scene

Na počátku životního cyklu aplikace stojí požadavek na view (tj. fully qualified view). Aplikace vytvoří příslušný presenter a předá mu řízení. Ten má za úkol view „odprezentovat“. V nejjednodušším případě to znamená načíst stejnojmennou šablonu a vykreslit ji.

Existují však situace, kdy se pod jedním pohledem mohou vykreslit diametrálně odlišné stránky. Příkladem je třeba pohled na zboží v e-shopu. Presenter vyhledá položku v databázi a zjistí, že:

  1. v databázi je a může se zobrazit
  2. v databázi je, ale má příznak „smazáno“ – zobrazí se informace o nedostupnosti a nabídnou se podobné produkty
  3. v databázi není – zobrazí se informace o chybějící stránce a nabídne např. vyhledávací formulář

Klíčové je si uvědomit, že tyto tři stánky existují v rámci jednoho pohledu. Presenter nemá nic jako „pohled na nedostupné zboží“ nebo „pohled na neexistující zboží“. Nelze se například na existující zboží podívat v pohledu/šabloně nedostupného zboží.

Pohled je tedy jen jeden (např. Product:show) a tento se rozpadá na tři scény. Kód by vypadal asi takto:

class ProductPresenter
{
    // view 'show' calls method 'presentShow'
    function presentShow($id)
    {
        $row = dibi::query('SELECT * FROM products WHERE id=%s', $id);
        if (!$row) {
            $this->changeScene('notfound');
        } elseif ($row['deleted']) {
            $this->changeScene('deleted');
        } else {
            // in this case scene == view == 'show'
        }
    }

    function renderShow()
    { ... }

    function renderNotfound()
    { ... }

    function renderDeleted()
    { ... }
}

Volání changeScene(...) tedy ovlivní, které metody prepareXYZ() a renderXYZ() budou volány a která šablona se načte. Jinak prostě platí, že view == scene.

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