import vs. include with blocks
- elnathan
- Člen | 17
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.
- elnathan
- Člen | 17
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 | 8218
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 | 864
@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)
- m.brecher
- Generous Backer | 864
@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.
- elnathan
- Člen | 17
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 | 8218
Myslím, že řešením by mělo být doplnit podporu parametrů do {import}, asi jako
{import block.latte, title: 'world'}