Redukce redundance latte kódu ;-)
- Kcko
- Člen | 468
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
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
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
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
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
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 podobyMoc 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?
- Kcko
- Člen | 468
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?
- Kcko
- Člen | 468
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
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
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
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.