Nefunkční filtr v n:tagu (Latte 3)
- roman.campula
- Člen | 60
Zdravím,
po upgradu z Latte 2 na Latte 3 jsem narazil na tuto chybu.
Unexpected '|upper', expecting end of attribute in n:if
{var $player = "roman"}
<img n:if="$player|upper == 'ROMAN'" src="roman.webp">
V Latte 2 funkční, v Latte 3 nefunkční. Změnilo se něco? Problém
je všude, kde se pokusím použít jakýkoliv filtr v nějakém n:tagu. Bez
n:tagu filtry fungují, třeba
<a href="#">{$player|upper}</a>
.
Editoval roman.campula (21. 12. 2022 13:41)
- nightfish
- Člen | 517
@romancampula Nevím, mně to funguje: https://fiddle.nette.org/latte/#…
Konkrétně s tvým kódem: https://fiddle.nette.org/latte/#…
Editoval nightfish (21. 12. 2022 14:00)
- roman.campula
- Člen | 60
Dobře, s tím souhlasím. Příliš jsem svůj příklad zjednodušil. Když v n:if použiji nějakou další funkci, tak už to zase nejde. (že to teď nedává moc smysl není potřeba řešit, jde o princip)
- nightfish
- Člen | 517
@romancampula FTFY https://fiddle.nette.org/latte/#…
Myšlenka je taková, že když použiješ ($player|upper)
na
místě, kde je potřeba okolo toho mít kulaté závorky, tak je nelze
vynechat.
Editoval nightfish (21. 12. 2022 15:04)
- roman.campula
- Člen | 60
Díky, už jsem to pochopil. Přijde mi to tedy zvláštní chování, ale beru to. Díky za pomoc.
Pro shrnutí, v Latte 2 fungovalo (původní nezjednodušený příklad)
<img n:if="file_exists($parameters->wwwDir . '/files/teams/players/' . $player->name|webalize . '-' . $player->surname|webalize . '.webp')" src="{$basePath}/files/teams/players/{$player->name|webalize}-{$player->surname|webalize}.webp" alt="{$player->name} {$player->surname}">
V Latte 3 funguje (nový nezjednodušený příklad)
<img n:if="file_exists($parameters->wwwDir . '/files/teams/players/' . ($player->name|webalize) . '-' . ($player->surname|webalize) . '.webp')" src="{$basePath}/files/teams/players/{$player->name|webalize}-{$player->surname|webalize}.webp" alt="{$player->name} {$player->surname}">
Editoval roman.campula (21. 12. 2022 21:21)
- dakur
- Člen | 493
Mohlo by se to taky vyřešit (nebo aspoň výrazně zjednodušit), když nebudeš dělat logiku v šabloně, nepatří tam. Buďto ji udělej v presenteru, nebo si to slepování cest udělej v separé filtru.
Nebo můžeš modelové objekty překlápět do view objektů. To bys pak měl ve view jen:
<img n:if="$player->image" src="{$player->image}" alt="{$player->name}">
Editoval dakur (22. 12. 2022 11:12)
- David Grudl
- Nette Core | 8218
Latte 2 se v tomto od Latte 3 neliší, vždycky bylo potřeba zapsat
filtry do závorek jako ($player->name|webalize)
.
Akorát Latte 2 řadu chybně zapsaných konstrukcí nedokázalo odhalit a pak generovalo kód, který dělal třeba něco úplně jiného, než člověk zamýšlel.