Přidání noescape do vlastního filtru
- Petr Parolek
- Člen | 455
Ahoj, lze přidat do vlastního filtru noescape filtr prosím v Latte 2.x?
Šablona
{$date|localeDate|noescape}
Zjednodušený kod filtru:
$template->addFilter('localeDate', function (DateTimeInterface $dateTime) use ($lang): string {
$localeDate = $dateTime->format('j.n.Y');
$localeDate = str_replace('.', ". ", $localeDate);
return $localeDate;
});
Výstup s noexcape:
16. 10. 2022
Výstup bez noescape:
6. 10. 2022
Editoval Petr Parolek (16. 10. 2022 15:07)
- Marek Bartoš
- Nette Blogger | 1264
- dakur
- Člen | 493
@PetrParolek Když vrátíš místo stringu
\HtmlStringable
, tak by to mělo jít. Něco jako:
$template->addFilter('localeDate', function (DateTimeInterface $dateTime) use ($lang): \Nette\HtmlStringable {
$localeDate = $dateTime->format('j.n.Y');
$localeDate = str_replace('.', ". ", $localeDate);
return \Nette\Utils\Html::el()->setHtml($localeDate);
});
Nevím ale, jestli není lepší jít cestou prostě tu nedělitelnou mezeru přímo napsat (na windowsech je to např. Alt+0160). PhpStorm ti ji ukáže a nemáš problém s escapováním. Používáme to tak už pár let jak přímo v HTML, tak i v překladech v PO souborech a nejsou s tím žádné problémy.
$dateTime->format('j. n. Y');
Editoval dakur (18. 10. 2022 7:37)
- m.brecher
- Generous Backer | 864
Řešil jsem podobný problém a @MarekBartoš mě poradil použít new Latte\Runtime\Html a mě to funguje:
Ukázka mého kódu kde noescape funguje:
$this->template->addFilter('label',
function(bool|int|null $value, ?string $true = null, ?string $false = null, ?string $class = null)
{
$class = $class ? ' '.$class : '';
[$caption, $lclass] = $value ? [$true? 'ano', 'label-true'] : [$false? 'ne', 'label-false'];
return new Latte\Runtime\Html("<span class='label {$lclass}{$class}'>$caption</span>") ;
});
- m.brecher
- Generous Backer | 864
Bezpochyby „by bylo dobré“ tento „trik“ jak aplikovat noescape ve vlastním filtru uvést v dokumentaci k Latte, protože to využije minimálně každý druhý uživatel Latte, pokud to tam někde není, ale řekl bych že to tam nebude. Pokud to tam nikdo jiný nepřidá, dám to tam sám nejpozději do vánoc.
EDITACE
a teď jsem to v dokumentaci našel:
https://latte.nette.org/cs/develop#…
Ovšem v souvislosti s případným dvojitým escapováním stringu v proměnné. I tak by bylo dobré dopsat větičku o automatickém noescape do části dokumentace o vlastních filtrech.
Editoval m.brecher (18. 10. 2022 1:34)