Šablony
Nette používá šablonovací systém Latte. Jednak proto, že jde o nejlépe zabezpečený šablonovací systém pro PHP, a zároveň také systém nejintuitivnější. Nemusíte se učit mnoho nového, vystačíte si se znalostí PHP a několika značek.
Je obvyklé, že stránka se složí ze šablony layoutu + šablony dané akce. Takhle třeba může vypadat šablona layoutu,
všimněte si bloků {block}
a značky {include}
:
<!DOCTYPE html>
<html>
<head>
<title>{block title}My App{/block}</title>
</head>
<body>
<header>...</header>
{include content}
<footer>...</footer>
</body>
</html>
A tohle bude šablona akce:
{block title}Homepage{/block}
{block content}
<h1>Homepage</h1>
...
{/block}
Ta definuje blok content
, který se vloží na místo {include content}
v layoutu, a také
re-definuje blok title
, kterým přepíše {block title}
v layoutu. Zkuste si představit
výsledek.
Hledání šablon
Cestu k šablonám odvodí presenter podle jednoduché logiky. Zkusí, zda existuje jeden z těchto souborů umístěných
relativně od adresáře s třídou presenteru, kde <Presenter>
je název aktuálního presenteru a
<view>
je název aktuální akce:
templates/<Presenter>/<view>.latte
templates/<Presenter>.<view>.latte
Pokud šablonu nenajde, je odpovědí chyba 404.
Můžete také změnit view pomocí $this->setView('jineView')
. Nebo místo dohledávání přímo určit
jméno souboru se šablonou pomocí $this->template->setFile('/path/to/template.latte')
.
Soubory, kde se dohledávají šablony, lze změnit překrytím metody formatTemplateFiles(), která vrací pole možných názvů souborů.
Layout se očekává v těchto souborech:
templates/<Presenter>/@<layout>.latte
templates/<Presenter>.@<layout>.latte
templates/@<layout>.latte
layout společný pro více presenterů
Kde <Presenter>
je název aktuálního presenteru a <layout>
je název layoutu, což je
standardně 'layout'
. Název lze změnit pomocí $this->setLayout('jinyLayout')
, takže se budou
zkoušet soubory @jinyLayout.latte
.
Můžete také přímo určit jméno souboru se šablonou layoutu pomocí
$this->setLayout('/path/to/template.latte')
. Pomocí $this->setLayout(false)
se dohledávání
layoutu vypne.
Soubory, kde se dohledávají šablony layoutu, lze změnit překrytím metody formatLayoutTemplateFiles(), která vrací pole možných názvů souborů.
Proměnné v šabloně
Proměnné do šablony předáváme tak, že je zapisujeme do $this->template
. Třeba takto vytvoříme
proměnnou $article
:
$this->template->article = $this->articles->getById($id);
Pomocí $this->template->getLatte()
získáte přístup k objektu Latte\Engine
a můžete
nastavovat filtry apod.
Výchozí proměnné
Presentery a komponenty předávají do šablon několik užitečných proměnných automaticky:
$basePath
je absolutní URL cesta ke kořenovému adresáři (např./eshop
)$baseUrl
je absolutní URL ke kořenovému adresáři (např.http://localhost/eshop
)$user
je objekt reprezentující uživatele$presenter
je aktuální presenter$control
je aktuální komponenta nebo presenter$flashes
pole zpráv zaslaných funkcíflashMessage()
Vytváření odkazů
V šabloně se vytvářejí odkazy na další presentery & akce tímto způsobem:
<a n:href="Product:show">detail produktu</a>
Atribut n:href
je velmi šikovný pro HTML značky <a>
. Chceme-li odkaz vypsat jinde,
například v textu, použijeme {link}
:
Adresa je: {link Homepage:default}
Více informací najdete v kapitole Vytváření odkazů URL.