Šablony: Pokus o vlastní makra přímo v šabloně
- vitas
- Člen | 6
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)