Pořadí zpracování maker nerespektuje jejich pořadí v šabloně

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

Zjistil jsem, že se makra zpracovávají jaksi odzadu. Nejdříve mám v presenteru přidané makro confirm, poté `current, ale ve výsledku jsou zpracovány opačně.

<a n:href="this, detail => A" n:current="active" n:confirm="Opravdu?">
// pořadí maker v šabloně je irelevantní, tedy stejný výstup jako
<a n:href="this, detail => A" n:confirm="Opravdu?" n:current="active">

Tím pádem se mi makro current dostává před href a celou logiku $presenter->isLinkCurrent() narušuje, jelikož se dosud nevytvoří odkaz, kteří je ověřován.

Řešením by možná bylo na konec vlastních maker přidadt znovu marko href, ale to mi přijde divné a navíc netuším, zda by to stačilo k přepsání původního.

Jak z toho ven?

Tomáš Votruba
Moderator | 1114
+
0
-

M, nikdo nemá podobný problém?

jtousek
Člen | 951
+
0
-

Nad zvláštním pořadí maker v šablonách jsem se už párkrát pozastavil, ale nikdy jsem nenarazil na situaci, kde by to pořadí mělo vliv na výsledek, jen jsem tušil, že takový případ může nastat. Ostatní na tom asi budou podobně.

vvoody
Člen | 910
+
0
-

Super by bolo aj spracovanie n:if a n:foreach podla ich poradia.

// podmienka by sa vyhodnotila len raz
<a n:if="$showMenu" n:foreach="$menu as $item">$item->name</a>

// a tu pri kazdej iteracii
<a n:foreach="$menu as $item" n:if="$item->published">$item->name</a>

// alebo co takto 2x n:if v jednom elemente?
<a n:if="$showMenu" n:foreach="$menu as $item" n:if="$item->published">$item->name</a>
jtousek
Člen | 951
+
0
-

@vvoody: To by sice bylo hezké, jenže by to byl dost zásadní BC break, takže si můžeme nechat zajít chuť. ;-)

nAS
Člen | 277
+
0
-

vvoody napsal(a):

Něco takového už jsem navrhoval (i s implementací) před více než 2 lety, ale bez odezvy.

jtousek
Člen | 951
+
0
-

Mohl by tu podporu někdo dát do svého forku na githubu? Mohlo by se to mergnout do nějaké budoucí major verze a kdo by to chtěl už teď tak cherry-pick & commit. Kdybych měl více času udělal bych tu branch i sám, to ale momentálně nehrozí. :-/

Filip Procházka
Moderator | 4668
+
0
-

@vvoody: na if a foreach použij inner- a outer- ;)

jtousek
Člen | 951
+
0
-

@HosipLan: Takto? Nevěděl jsem že existují outer- makra. :-O

<a n:outer-if="$showMenu" n:foreach="$menu as $item" n:if="$item->published">$item->name</a>

Editoval jtousek (15. 7. 2012 17:25)