Redukce redundance latte kódu ;-)

Kcko
Člen | 468
+
0
-

V latte šabloně mám dejme tomu několik výpisů k formátování proměnné cca takto:

<?php
        {switch $formatFn}
         {case $dashboardBase::MONEY}
            {$amount|number:0, ' ', ' '} Kč <span class="font-light text-sm">bez DPH</span>
         {case $dashboardBase::NUMBER}
            {$amount|number:0, ' ', ' '}
         {default}
            {$amount}
        {/switch}
?>

Lze z toho nějak „vyrobit“ 1 formátovací funkci, ať takhle nehezky neopakuju kód.
Nechci to přesouvat do modelů / presenteru a pak v latte volat něco jako

<?php
	$helperModel->format($amount)?
?>

Rád bych využil latte filtrů s možností doplnit si ke každému řádku třeba ještě dodatečné HTML viz ukázka.

Jediné co by šlo, ale je to trošku nehezké mít includovaný fragment a v něm mít onen blok viz výše.

<?php
	{include latte/format-fns/base.latte, amount => $amount, formatFn => $formatFn}
?>

Editoval Kcko (8. 8. 2023 15:15)

Kamil Valenta
Člen | 815
+
+1
-

A proč si z toho neuděláš filtr? Pak Ti v latte zůstane jen

{$amount|fn:$dashboardBase::MONEY}

Editoval Kamil Valenta (9. 8. 2023 13:39)

Kcko
Člen | 468
+
0
-

Kamil Valenta napsal(a):

A proč si z toho neuděláš filtr? Pak Ti v latte zůstane jen

{$amount|fn:$dashboardBase::MONEY}

Protože nechci přepisovat latte filtry (ať už nativních nebo mých / firemních / 3 stran) do PHP podoby jen kvůli tomu, aby to byl wrapper nad voláním dalších X. Navíc součástí tohoto filtru je i kus plain textu, to tam taky nechci :-), nebo se mi jeví, že by to tam být nemělo.

Nebo jsi to myslel jinak?

Editoval Kcko (9. 8. 2023 15:57)

David Grudl
Nette Core | 8218
+
0
-

Tohle je ok, ne? (Nenapadá mě, jak by to mohlo být kratší.) Vytvoř si na to {define}

{include formatFn $amount, $formatFn}
Kamil Valenta
Člen | 815
+
0
-

Kcko napsal(a):
Protože nechci přepisovat latte filtry (ať už nativních nebo mých / firemních / 3 stran) do PHP podoby

Moc nerozumím, co tím myslíš. Každý latte filtr je normální PHP metoda. A že volá nějaké další metody? Čemu to vadí? Neděje se to stejně všude jinde ještě 100x?

Navíc součástí tohoto filtru je i kus plain textu, to tam taky nechci :-)

Kde? Jaký? Co?

Nebo jsi to myslel jinak?

Myslel jsem to prostě tak, že si zaregistruješ filtr, který v sobě bude tahat to, co se chystáš dělat (třeba v includované) šabloně.

Kcko
Člen | 468
+
0
-

Kamil Valenta napsal(a):

Kcko napsal(a):
Protože nechci přepisovat latte filtry (ať už nativních nebo mých / firemních / 3 stran) do PHP podoby

Moc nerozumím, co tím myslíš. Každý latte filtr je normální PHP metoda. A že volá nějaké další metody? Čemu to vadí? Neděje se to stejně všude jinde ještě 100x?

Navíc součástí tohoto filtru je i kus plain textu, to tam taky nechci :-)

Kde? Jaký? Co?

Nebo jsi to myslel jinak?

Myslel jsem to prostě tak, že si zaregistruješ filtr, který v sobě bude tahat to, co se chystáš dělat (třeba v includované) šabloně.

Myslel jsem, jestli neexistuje něco jako obálka nad latte filtrem či více filtry (taková funkce přímo v latte).
Tomu, že si mám udělat vlastní filtr rozumím. Ale třeba jsem vůbec nenašel, jak bych použil **|noescape **

Filtry jsou v vendor\latte\latte\src\Latte\Runtime\Filters.php ale ne noescape. Jsou ještě nějaké případy filtrů, které tu nejsou?

mystik
Člen | 308
+
+2
-

Pokud chces z filtru vratit uz hotove Html, ktere se nema escapovat tak staci vratit objekt Html.

Napsat si vlastni filtr je nejjednodusi zpusob jak tohle vyresit. Moc nerozumim proc se tomu branis.

Kcko
Člen | 468
+
0
-

mystik napsal(a):

Pokud chces z filtru vratit uz hotove Html, ktere se nema escapovat tak staci vratit objekt Html.

Napsat si vlastni filtr je nejjednodusi zpusob jak tohle vyresit. Moc nerozumim proc se tomu branis.

Ahoj, nebráním se tomu, tuto možnost znám, často si píši vlastní filtry, leč mě nikdy asi nenapadlo, napsat filtr, který v sobě ponese x již hotových filtrů.

Filtry jsou ve třídě filter, noescape najdu kde?

mystik
Člen | 308
+
+3
-

Noescape neni filtr jako takovy, ale meni nastaveni escaperu v latte.

Ale jak jsem psal pokud generujes uz rovnou html, ktere uz nechces dal escapovat tak vrat objekt Html. Koukni treba na filtr nl2br kde se to dela.

Kcko
Člen | 468
+
0
-

mystik napsal(a):

Noescape neni filtr jako takovy, ale meni nastaveni escaperu v latte.

Ale jak jsem psal pokud generujes uz rovnou html, ktere uz nechces dal escapovat tak vrat objekt Html. Koukni treba na filtr nl2br kde se to dela.

Máš pravdu. Mrknu se na to a udělám to tak, dává to smysl a já jsem někdy roztěkaný (když toho řeším víc ..) a trvá než mi to doputuje.
Díky.

Editoval Kcko (10. 8. 2023 12:32)

Kcko
Člen | 468
+
0
-

David Grudl napsal(a):

Tohle je ok, ne? (Nenapadá mě, jak by to mohlo být kratší.) Vytvoř si na to {define}

{include formatFn $amount, $formatFn}

Ano, define bych použil mít to v jednom souboru, což jsem asi i napsal, ale samozřejmě je tam víc šablon, takže spíše includovaný fragment nebo vlastní filtr, díky za odpověď.

PS. To je pseudo kód, nebo proč nedefinuješ klíčem název proměnné?

David Grudl
Nette Core | 8218
+
0
-

Zeptám se jinak. Nedala ti dokumentace na něco z toho, co píšeš, odpověď (více šablon, názvy proměnných)? Pokud nedala, máš nápad, jak ji vylepšit?

Kcko
Člen | 468
+
+2
-

David Grudl napsal(a):

Zeptám se jinak. Nedala ti dokumentace na něco z toho, co píšeš, odpověď (více šablon, názvy proměnných)? Pokud nedala, máš nápad, jak ji vylepšit?

Zamyslím si, lítám mezi verzemi (2 a 3), nědělám jenom Nette (PHP) a občas mi něco unikne, nebo špatně pochopím.
Dokumentace je dobrá, ale prostor ke zlepšení tam je, když se mi něco nebude zdát, pošlu PR.