Latte: značka pro volitelné vložení bloku / souboru

David Grudl
Nette Core | 8284
+
+2
-

Chtěl bych do Latte přidat variaci značky {include} pro volitelné vložení souboru (nebo bloku). Tj. pokud soubor/blog nebude existovat, nevyhodí se výjimka. Syntax by měla být:

{include? file.latte}

Napadlo mě, že by bylo fajn přidat i obdobnou variantu značky {embed}. Ale tady váhám nad dvěma způsoby provedení:

{embed? file.latte}
	{block xx}...{/block}
{/embed}

nebo

{embed? file.latte}
	{block xx}...{/block}
{/embed?}

Rozdíl je jen v koncové značce. Tedy buď bude ? jen parametrem značky {embed}, nebo půjde o novou značku {embed?} a pak se otazník napíše i v koncové značce.

Prompt pro vás: uveď u obou řešení pro a proti a zvol lepší variantu :-)

MajklNajt
Člen | 516
+
+5
-

A čo tak tryInclude a tryEmbed? Máme aj tryAsset, tak by to zapadlo, či?

Edit: beriem späť, tryAsset je funkcia, nie makro…

Editoval MajklNajt (22. 6. 20:44)

Namespace
Člen | 87
+
+3
-

Přijde mi, že varianta s ? na začátku makra je lépe čitelná. Ta varianta s {/embed?} je taková… těch speciálních znaků je v tom už moc

Kamil Valenta
Člen | 844
+
+10
-

Proč je nutné zavádět nové značky, když v principu dělají „to samé“? Include je pořád include. To, co je volitelné, je název souboru. Ten nemusí existovat. V PHP otazník uvozuje volitelný parametr a je spojen s ním. Zachoval bych to i v latte:

{include file.latte} {* error *}
{include ?file.latte} {* silent *}

Problém s párovými značkami by pak odpadl také.

hrach
Člen | 1844
+
+4
-

Proč je nutné zavádět nové značky, když v principu dělají „to samé“?

  • Visibility je dost zasadnim zpusobem vic, nez par nejakych usetrenych znaku
  • Krome toho, ze se takova funkce (tryInclude) mnohem vice samodokumentuje, tak hlavne to neni nejaky single non-name znak, ktery jeste v kontenxtu „cest“ ma uplne jiny vyznam. glob
  • Integrace pro novou znacku pro autocomplete v pluginech je vyrazne jednodussi – jak napovidat navrhovanou funkcionalitu s otaznikem opravdu netusim.

Nechapu, jak to muze tolika lidem prijit dobry napad.

Editoval hrach (24. 6. 11:22)

David Grudl
Nette Core | 8284
+
+1
-

MajklNajt napsal(a):

A čo tak tryInclude a tryEmbed?

I to je samozřejmě cesta.

Samozřejmě nejlepší je, když syntaxe přesně trefí funkcionalitu. A tou je include bloku nebo souboru, který nemusí existovat. Prefix try může být zavádějící v tom, že naznačuje, že pokrývá všechny možné chyby, nejen neexistenci. Otazník mi připadal lepší v tom, že se v JS a PHP používá ve smyslu nepřítomnosti hodnoty (nullsafe), tady by to bylo přeneseně na nepřítomnost bloku nebo souboru.

Další možností je nějaký flag, jako {include if exists ...} což je skvěle srozumitelné, byť asi nezvyklé.

David Grudl
Nette Core | 8284
+
+4
-

Ale když nad tím přemýšlím, celé je to špatný nápad.

Bylo by lepší to řešit přidáním podmínky. Pro bloky existuje {if hasBlock(...)} nebo `{ifset block}, takže bude lepší přidat obdobu pro šablony, například hasTemplate(), což dává mnohem širší možnosti využití, především ohledně detekce, zda se tedy něco includovalo nebo ne. A celý problém tím padá.