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!
