Nette - vlastní šablony

Kategorie: Programování » PHP, MySQL, HTML » Nette » Nette - vlastní šablony

Datum vydání: 07. 07. 2013, aktualizováno 17. 02. 2014

Šablony ve frameworku Nette obvykle nastavovat vůbec nemusíte, protože sám presenter je automaticky napojený na příslušnou svou šablonu. Stará se o to MVC model aplikace.

Může se však vyskytnout situace, kdy kromě této šablony chcete použít nějakou jinou vlastní a nechat si pomocí ní vyrendrovat nějaký HTML výstup, a to buď přímo na obrazovku, či do proměnné, kterou dále použijete. Vlastní šablona se může například hodit, pokud chcete metodou flashMessage() pomocí Html::el po zpracování formuláře zobrazit nějaký komplikovanější HTML výstup.

Standardní vyrendrování šablony na výstup

sablona.latte

Ahoj, tady je {$firstName} {$lastName}.

Vytvoření vlastní šablony v presenteru

$template = $this->createTemplate();
$template->setFile(__DIR__.'/../templates/sablona.latte');
$template->firstName = 'John';
$template->lastName = 'Doe';
$template->render();

Ruční vytvoření vlastní šablony

use Nette\Templating\FileTemplate;
//…
$template = new FileTemplate(__DIR__.'/../templates/sablona.latte');
$template->registerFilter(new Nette\Latte\Engine);		
$template->registerHelperLoader('Nette\Templating\Helpers::loader');
$template->firstName = 'John';
$template->lastName = 'Doe';
$template->render();

Možná by zde měla být nastavena ještě cache a další věci. Nicméně takto to již funguje.

Výstup po vyrendrování

Ahoj, tady je John Doe.

  • Více informací na nette.org: Šablony.

Vyrendrování šablony do proměnné

Standardně metoda šablony $template->render() vypisuje ihned výstup. Sama funkce nic nevrací. Pokud chcete mít výstup nikoli přímo na obrazovku, ale potřebujete si ho uložit do proměnné, pak to lze formou přetypování na string, při kterém se volá metoda $template->__toString().

Vytvoření vlastní šablony v presenteru

$template = $this->createTemplate();
$template->setFile(__DIR__.'/../templates/sablona.latte');
$template->firstName = 'John';
$template->lastName = 'Doe';
//$template->render();
$html = (string) $template;
echo $html;