import vs. include with blocks

elnathan
Člen | 17
+
0
-

Ahoj, v latte v2.11.7 jsem mohl použít: {include "block.latte" with blocks title: "Nadpis"} což mi do šablony načetlo X definic bloků, které jsem mohl ibovolně použít a všechny znaly proměnnou $title.
Po upgrade na latte v3.0.14 přestal with blocks fungovat. Nahradil jsem jej tedy za {import "block.latte"}. Jak těm blokům ale předám nějakou hodnotu v latte? Potřebuji ji ale definovat už při načítání bloků a né až v momentě vykreslení. Přímo do importu to přidat nejde a pokud to definuji jen jako běžnou proměnnou v latte, odkud je volán import, tak je to samozřejmě nezná, díky.

David Grudl
Nette Core | 8228
+
0
-

Co to znamená přestal fungovat? Fungovat by měl.

elnathan
Člen | 17
+
0
-

David Grudl napsal(a):

Co to znamená přestal fungovat? Fungovat by měl.

https://fiddle.nette.org/latte/#…
v2.11.7: funguje
v3.0.14: Cannot include undefined block 'content'.

David Grudl
Nette Core | 8228
+
+2
-

opraveno

elnathan
Člen | 17
+
0
-

David Grudl napsal(a):

opraveno

@DavidGrudl Prosím, v jaké verzi to bude? Ve Fiddle (viz odkaz dříve) to u 3.0.16 i 3.0.x-dev hlásí zatím stále stejný problém, děkuji.

David Grudl
Nette Core | 8228
+
0
-

Nakonec jsem to tam nedal, protože jsem si uvědomil, že to vlastně není správné řešení. Ale nenašel jsem tohle vlákno abych napsal a vlastně si vzpomněl, co to mělo řešit.

m.brecher
Generous Backer | 872
+
0
-

@DavidGrudl

Funkce tagu {include 'file.latte' with blocks} je v dokumentaci https://latte.nette.org/cs/tags#… popsána nejasně:

„Přemýšlejte o inkludovaných šabloných jako samostatných odstíněných částech stránek nebo modulů. Toto chování se dá změnit pomocí modifikátoru with blocks“

Funkci jsem vyzkoušel a přijde mě, že je to to samé, co nabízí {import}. Tyto příklady mě přijdou identické:

{include 'file.latte' with blocks}
{include 'box'}     {* vložení bloku z file.latte *}
{import 'file.latte'}
{include 'box'}     {* vložení bloku z file.latte *}

Není to zbytečné zesložitění API Latte ? Tag {include} by měl šablonu/blok vložit a import by měl provádět tag {import}.

Navrhuji proto zvážit, zda zmínku o {include 'file.latte' with blocks} z dokumentace úplně nevyřadit. V Latte by mohla zůstat kvůli BC.

Editoval m.brecher (17. 5. 2:30)

David Grudl
Nette Core | 8228
+
0
-

{import} načítá jen bloky a nic nevykresluje, na rozdíl od {include}

m.brecher
Generous Backer | 872
+
0
-

@DavidGrudl

{import} načítá jen bloky a nic nevykresluje, na rozdíl od {include}

Ano, ale s touto výjimkou:

{include 'file.latte' with blocks}  // nic nevykreslí, jenom načítá bloky

Nedělal jsem nějaké důkladné testy, ale přijde mě, že je to úplně stejná funkce jako:

{import 'file.latte'}  // načítá bloky

A proto jsem navrhnul zvážit, zda {include 'file.latte' with blocks} z dokumentace nevyřadit.

David Grudl
Nette Core | 8228
+
0
-
elnathan
Člen | 17
+
0
-

David Grudl napsal(a):

Nakonec jsem to tam nedal, protože jsem si uvědomil, že to vlastně není správné řešení. Ale nenašel jsem tohle vlákno abych napsal a vlastně si vzpomněl, co to mělo řešit.

A jaký je best practice mnou popsaného problému = jak to co v Latte 2 fungovalo převést na nové Latte 3?

David Grudl
Nette Core | 8228
+
0
-

Myslím, že řešením by mělo být doplnit podporu parametrů do {import}, asi jako

{import block.latte, title: 'world'}

elnathan
Člen | 17
+
0
-

David Grudl napsal(a):

Myslím, že řešením by mělo být doplnit podporu parametrů do {import}, asi jako

{import block.latte, title: 'world'}

To jsem právě tehdy i zkoušel, kdyby to náhodou prošlo, ale bohužel podpora ještě nebyl … je šance, že se to do další verze dostane?