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\Annotations
  • Nette\Application
    • Application
    • AppForm
    • Control
    • Presenter
    • PresenterCompo­nent
    • PresenterRequest
    • Routování
    • 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 14. 11. 2008 Edituj Historie Poslední změny

Nette Framework Quick Start VI.

Psaní HTML šablon si můžeme výrazně usnadnit a zpřehlednit díky filtrům. Filtr je callback, který na šabloně provede určité úpravy. Například může odstranit zbytečné bílé znaky a snížit tak její objem. Přímo s Nette Frameworkem se několik filtrů dodává. Nás bude zajímat filtr TemplateFilter::curlyBrackets (jde o název statické metody).

Každé šabloně lze nastavit libovolný počet filtrů. Slouží k tomu metoda šablony registerFilter(). Otázkou je, ve kterém okamžiku nastavení provést. Jelikož budeme chtít filtr používat ve všech pohledech, můžeme využít metody beforeRender(), která se automaticky volá těsně před metodami jako je renderDefault() nebo renderTable(). Do výchozího presenteru DefaultPresenter.php tedy doplníme řádky:

protected function beforeRender()
{
    $this->template->registerFilter('TemplateFilters::curlyBrackets');
}

Tento filtr nám umožní zapisovat PHP kód zkráceným způsobem pomocí složených závorek:

zkrácený způsob PHP ekvivalent
{$variable} <?php echo htmlSpecialChars($variable) ?>
{!$variable} <?php echo $variable ?>
{=expression} <?php echo htmlSpecialChars(expression) ?>
{!=expression} <?php echo expression ?>
{*comment*} – komentář, bude odstraněn
{plink destination ...} <?php htmlSpecialChars($presenter->link(...)) ?>
{if ?} ... {/if} <?php if (?): ... endif; ?>
{for ?} ... {/for} <?php for (?): ... endfor; ?>
{foreach ?} ... {/foreach} <?php foreach (?): ... endforeach; ?>

Syntaxe je ještě bohatší, ale víc toho zatím potřebovat nebudeme.

Podívejte se, jak báječně můžeme kód zjednodušit. Přepište si šablonu Default.default.phtml novým obsahem:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>DataGrid – Nette Framework example</title>
    <link rel="stylesheet" media="screen,projection,tv" href="{$baseUri}css/screen.css" type="text/css">
</head>

<body>
    <h1>DataGrid - Nette Framework example</h1>

    <h2>Tables:</h2>
    <ul>
        {foreach $tables as $table}
        <li><a href="{plink table $table}">{$table}</a></li>
        {/foreach}
    </ul>
</body>
</html>

Co je důležité, tak že tuto čitelnější šablonu přeloží Nette Framework na původní PHP skript, takže filtry nemají vliv na výkonnost. „Přefiltrovaná“ šablona se uchovává v cache a dokonce se aktualizuje automaticky vždy, když upravíte zdrojovou šablonu.

Šablona layoutu

Naše aplikace už disponuje dvěma pohledy a tedy potřebuje i dvě šablony. Obě budou obsahovat stejné části – například HTML hlavičku. Jedním možným řešením, jak se vyhnout duplikování HTML kódu, je použití tzv. layoutů.

Vytvořte si soubor DataGrid/app/templates/@layout.phtml:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>DataGrid – Nette Framework example</title>
    <link rel="stylesheet" media="screen,projection,tv" href="{$baseUri}css/screen.css" type="text/css">
</head>

<body>
    <h1>DataGrid - Nette Framework example</h1>

    {?$content->render()}
</body>
</html>

Tato šablona layoutu se načte pro každý pohled a teprve do místa {?$content->render()} se vloží šablona příslušného pohledu. Tedy zároveň je nutné upravit soubor DataGrid/app/templates/Default.default.phtml a zkrátit jej jen na:

<h2>Tables:</h2>
<ul>
    {foreach $tables as $table}
    <li><a href="{plink table $table}">{$table}</a></li>
    {/foreach}
</ul>

A teď už je načase vytvořit šablonu a obsluhu pro pohled table. Pojďme na to!

« Tvorba odkazů Zobrazení tabulky »

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