Podmínka v latte souboru nefunguje?
- Terka04
- Člen | 44
Ahoj kluci,
řeším pro mě prazvláštní situaci.
Mám e-mailový layout, nazývejme ho „sablona.latte“. Ten importuje
pomocí {import} nějaký soubor (importer.latte), který importuje na základě
podmínek soubory s komponentami – např. komponenta1.latte,
komponenta2.latte, …
Ta sablona.latte pak vykresluje elementy pomocí {include} právě z těch
výsledných komponenta1.latte, popřípadě komponenta2.latte. To vše
funguje. Ale…
Ten importer má fungovat na základě podmínek, tzn. např.:
{if $a == $b}
{import 'komponenta1.latte'}
{else}
{import 'komponenta2.latte'}
{/if}
Ale nefunguje. Ani jedna z komponent se nenačte. Pokud ale zkusím pouze:
{import 'komponenta1.latte'}
Tak se to načte. Pokud ale udělám toto:
{if true}
{import 'komponenta1.latte'}
{/if}
Tak už zase nic…
{import ($a==$b)?'komponenta1.latte':'komponenta2.latte'}
už zase funguje. Tzn. klasický if nedělá, co by měl.
Samotná podmínka mi žádnou chybu nevyhodí, protože (if true) bude vždy pravda, ale dostanu chybu, že neexistuje block, který se snažím v sablona.latte {include}. Ten blok existuje v obou souborech komponenta1.latte i komponenta2.latte jen s jiným obsahem.
Cílem je importovat soubor jen pokud existuje a pokud ne, tak druhý.
Netušíte někdo, co dělám špatně?
Editoval Terka04 (21. 11. 2022 19:30)
- Marek Bartoš
- Nette Blogger | 1264
Nejspíš nefungují importy uvnitř podmínek. Buď by to mělo fungovat nebo tě upozornit, že to nejde. Založ issue :)
- m.brecher
- Generous Backer | 864
@Terka04 Ahoj, vyzkoušel jsem to jak v v šabloně tak i v layoutu a funguje to.
{if $test}
{import '../test1.latte'}
{else}
{import '../test2.latte'}
{/if}
{block content}
{include test} // importuje odpovídající soubor podle true/false
......
{/block}
Takže v Latte asi chyba není, pokud tam není kolize s něčím jiným. Vyzkoušej si to bokem na nějaké testovací šabloně.
- Marek Bartoš
- Nette Blogger | 1264
@m.brecher záleží taky na verzi Latte. Ve v3 se toho hodně změnilo.