Importovaný block (define) nelze použít jako embed ve snippetu

medhi
Generous Backer | 255
+
+1
-

Pokud se mi to nepodaří vysvětlit správně, prosím doptejte se.

1. Mám soubor mujEmbed.latte, který obsahuje

{define mujEmbed}...{/define}

2. V layoutu ho importuji pomocí

{import '../../../embeds/mujEmbed.latte'}

3. Použiju embed někde v šabloně ve snippetu:

{snippet list}
	{embed mujEmbed}
		...
	{/embed}
{/snippet}

4. Po invalidaci tohoto snippetu dostávám chybu Cannot include undefined block ‚mujEmbed‘.

Pokud bych však {define ..} neimportoval, ale dal ho přímo do layoutu, funguje to.

Pepino
Člen | 256
+
0
-

Ten snippet máš v layoutu?

medhi
Generous Backer | 255
+
0
-

Pepino napsal(a):

Ten snippet máš v layoutu?

Ne, ten je v běžné šabloně, která layout používá.

Pepino
Člen | 256
+
0
-

Zkus ten import dat do te konkretni sablony.

medhi
Generous Backer | 255
+
0
-

Pepino napsal(a):

Zkus ten import dat do te konkretni sablony.

To funguje…

medhi
Generous Backer | 255
+
0
-

Může jít o bug?

Pepino
Člen | 256
+
0
-

medhi napsal(a):

Může jít o bug?

Nemyslím si.

Robin Martinez
Člen | 89
+
0
-

embed jsem nepouzival, ale tohle ne-e?

{embed '../mujEmbed.latte'}
 ...
{/embed}
medhi
Generous Backer | 255
+
0
-

Pepino napsal(a):

medhi napsal(a):

Může jít o bug?

Nemyslím si.

Ale fungovat by to tak mělo ne? Nebo je nějaký důvod, aby to nešlo? Přijde mi to logické.

medhi
Generous Backer | 255
+
0
-

Robin Martinez napsal(a):

embed jsem nepouzival, ale tohle ne-e?

{embed '../mujEmbed.latte'}
 ...
{/embed}

To není ideální. Ta cesta je totiž pokaždé jiná a při každém vkládání embedu hledat, kde se nachází vkládaná šablona a počítat hloubku adresářů je psycho. Nemluvě o nějakém refaktorování, kdy tyto cesty můžou přestat platit.

emololftw
Člen | 82
+
0
-

Presne tomu se venuje tato prednaska:

https://youtu.be/G-MigprZmzQ

Volas pak widget (vytvoreny embed) bez cesty, např. {embed ~mujEmbed}

Pepino
Člen | 256
+
0
-

medhi napsal(a):

Robin Martinez napsal(a):

embed jsem nepouzival, ale tohle ne-e?

{embed '../mujEmbed.latte'}
 ...
{/embed}

To není ideální. Ta cesta je totiž pokaždé jiná a při každém vkládání embedu hledat, kde se nachází vkládaná šablona a počítat hloubku adresářů je psycho. Nemluvě o nějakém refaktorování, kdy tyto cesty můžou přestat platit.

https://forum.nette.org/…olutni-cestu

David Grudl
Nette Core | 8218
+
+2
-

Asi bych to celé zredukoval na to, že se nevykonává {import} v layoutu při snippetovém požadavku, než na ohýbání {embed}