Přidání noescape do vlastního filtru

Petr Parolek
Člen | 455
+
0
-

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)

Milo
Nette Core | 1283
+
0
-

Nejde. Můžeš použít UTF-8 tvrdou mezeru, nebo vrátit HTML.

Pepino
Člen | 249
+
0
-

Myslím, že by šlo použít https://latte.nette.org/…ending-latte#…

dakur
Člen | 493
+
0
-

@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 | 736
+
0
-

Ř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 | 736
+
0
-

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)