Nefunkční filtr v n:tagu (Latte 3)

roman.campula
Člen | 60
+
0
-

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

@romancampula Zkus <img n:if="($player|upper) == 'ROMAN'" src="roman.webp">

roman.campula
Člen | 60
+
0
-

Změnila se chyba, a to na
Unexpected '|'

nightfish
Člen | 517
+
+1
-

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

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)

https://fiddle.nette.org/latte/#…

nightfish
Člen | 517
+
+1
-

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

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
+
+5
-

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
+
+3
-

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.