
Vlastní Latte filtr
Jak si vytvořit vlastní filtr (helper) do Latte šablon v Nette Frameworku.
Při používání šablonovacího systému Latte si jde práci usnadnit používáním filtrů (dříve se jim říkalo helpery). Jedná se o příkazy zapisující se za |
(tento znak se na české klávesnici zapíše zkratkou Pravý Alt + W).
Spoustu filtrů je přímo zabudovaných:
- Nette dokumentace: Výchozí Latte filtry
Příklad elegantního formátování kalendářního data přímo v *.latte
šabloně vypadá následovně:
{$article->last_modification|date:'j. n. Y'}
Jednoduchý vlastní filtr
Vlastní filtry se registrují v presenteru (typicky soubory NecoPresenter.php
ve složce presenters
). Pro použití v rámci celé aplikace (modulu) se je hodí zaregistrovat v BasePresenter.php
v metodě beforeRender
.
Filtr je potom obyčejná funkce, které se předají parametry, a ona vrátí požadovaným způsobem upravený výstup.
protected function beforeRender()
{
$this->template->addFilter('tucne', function ($obsah) {
return "<b>" . $obsah . "</b>";
});
}
Použití v šabloně je následující:
{!$article->last_modification|date:'j. n. Y'|tucne}
Jak je vidět:
- Filtry je možné řetězit (použít více filtrů pro jednu proměnnou).
- Před proměnnou je vykřičník, aby se vypsaly HTML značky.
Více vlastních filtrů
Používat filtry výše uvedeným způsobem příliš nepomáhá přenositelnosti kódu. Lepší bude si pro filtry vytvořit vlastní třídu nebo dokonce více tříd.
Filters.php
<?php
class Filters
{
public static function common($filter, $value)
{
if (method_exists(__CLASS__, $filter)) {
$args = func_get_args();
array_shift($args);
return call_user_func_array(array(__CLASS__, $filter), $args);
}
}
public static function tucne($obsah)
{
return "<b>" . $obsah . "</b>";
}
}
BasePresenter.php
Přidá se metoda createTemplate
:
protected function createTemplate($class = NULL)
{
$template = parent::createTemplate($class);
$template->addFilter(NULL, 'Filters::common');
return $template;
}
Metoda common
ve třídě Filters
zajistí to, že půjde v šablonách všechny filtry ze třídy používat prostřednictvím názvu funkce.
Filtry z nějaké třídy jde přiřazovat i jednotlivě:
$template->addFilter("tucne", 'Filters::tucne');
Třída jako filtr
Byla-li by celá třída jeden filtr, mělo by jít použít __invoke
:
class TucneFilter
{
public function __invoke($obsah)
{
return "<b>" . $obsah . "</b>";
}
}
A následně připojit filtr v BasePresenter
u jako:
$template->addFilter('tucne', new TucneFilter);
Více informací:
- Petr Jirásek: Jak napsat vlastní Latte filtr v Nette?
Užitečné vlastní filtry
Hodně populární je filtr pro výpis data v podobě „před X minutami“:
Filtr se hodí i pro přidání formátování nástrojem Texy!, ale to ještě budu muset vymyslet, jak se dělá.
Starší způsob
Dříve se vlastní helpery registrovaly přes registerHelperLoader
:
$template->registerHelperLoader('Helpers::loader');
To už je deprecated a hlásí to chybu:
Nette\Bridges\ApplicationLatte\Template::registerHelperLoader() is deprecated, use dynamic getLatte()->addFilter()
Související články

Výpis náhodného textu
Jak na stránce náhodně vypsat obrázek, odkaz, reklamu, text nebo cokoliv jiného.

Instalace Apache, PHP a MySQL za 30 vteřin
Jak si ve Windows spustit vlastní Apache, PHP a MySQL na svém PC za půl minuty.

MySQL přes PDO
PDO je PHP rozhraní pro pohodlnější práci s SQL databásí. Jaké přináší výhody a jak ho používat.

Upload obrovských souborů v JS/PHP
Jak umožnit návštěvníkům nahrát soubory jako videa v řádech MB/GB s progress barem.