Šablony: Pokus o vlastní makra přímo v šabloně

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
vitas
Člen | 6
+
0
-

Připadlo mi zajímavé definovat si v Latte vlastní makra, přímo v šabloně. Jak jsem zjistil, tuto práci již částečně dělá {block} a {include}. Má to však nevýhodu: definice makra ({blok}) je opsána do výstupu. Proto jsem použil následující fintu s if(0): endif:

<?php if(0): ?>

{block #myform}
<form method="POST" action="{link myFormSubmit}">
{/block}

{block #_myform}
</form>
{/block}

{block #inputT}
{var tab => $_args[0]}
{var id  => $_args[1]}
{var col => $_args[2]}
<input type="text" name="{$tab}@{$id}@{$col}" value="{$val}"/>
{/block}

<? endif ?>

Makra nyní mohu použít:

{include #myForm}
{include #inputT, $table, $id , colname3, val=>"nic2"}
{include #_myForm}

Když použiji dalšího drobného háčku a přidefinuji si makro ‚#‘ pomocí:

NLatteMacros::$defaultMacros['#'] = '<?php %:macroInclude% ?>';

Můžu psát svoje makra již zkráceně bez include (dva # jsou tam proto, že jeden je název makra a druhý je už začátek argumentu pro originální {include}):

{##myForm}
{##inputT, $table, $id , colname3, val=>"nic2"}
{##_myForm}

Otázka zní, jestli na podobný problém existuje best-practice, zvláště háček se získáváním argumentů pomocí $_args[] a haček s `if(0): – endif' mi přijde trochu přes ucho.

Možná to je feature request na nějaké silent definování bloků ({define}?). A když už by se to dělalo, byl bych pro aby se na vlastní makra mohlo odkazovat třeba jen pomocí jednoho hashe ({#myForm}).

Díky

Editoval vitas (31. 1. 2011 17:22)

Jan Tvrdík
Nette guru | 2595
+
0
-

Tohle je divné, spíš si nějak rozšiř LatteFilter normálně.