Ako vyrobiť vlastné makro (filter) aj s helperom?

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

Zdravím,
chcel som si urobiť makro, ktoré by mi vypisovalo riadky tabuľky len ak existuje hodnota $value.
V šablóne mám:

<table>
  {tr $label, $value}
</table>

Presenter

<?php

      ...
      LatteMacros::$defaultMacros['tr'] = '<?php echo Class::macroTr(%%); ?>';
    }

    public function macroTr($label, $value) {
         if (!$value) return "";
         return "<tr><th>$label</th><td>$value</td></tr>";
    }
?>

čo mi aj funguje, ale rád by som použil na $label alebo $value nejaký helper napr:

<table>
  {tr $label, $value|upper}
</table>

Ako upraviť makro, aby som mohol aplikovať ľubovoľný helper na niektorý parameter?
Ďakujem.

Petr Motejlek
Člen | 293
+
0
-

Takhle narychlo by mně napadlo to třeba zkusit udělat takhle:

Aplikuj na tu proměnnou helper a ulož si výsledek do nějaké jiné proměnnné, kterou potom hodíš jako parametr toho makra, např:

<?php
  {assign temp => $value|upper}
  {tr $label, $temp}
?>

Editoval Petr Motejlek (5. 12. 2009 20:35)

Filip Procházka
Moderator | 4668
+
0
-

Zdravím,

chtěl jsem se zeptat, když mi nefunguje ani jeden zápis, je chyba u mě nebo je to feature? myslím že by se hodilo aby helpery byly podporované i uvnitř jiných maker, alespoň to assign

{foreach $rows as $key => $row}
<tr>
	{assign first => $key|first}
	{assign second => $key|second}
	<td><a href="{link previewEach $first, $second}">{!$row['source_medium']|hardspaces}</a></td>
	{foreach $row as $value}
	{if !$iterator->isFirst()}<td>{$value}</td>{/if}
	{/foreach}
</tr>
{/foreach}
{foreach $rows as $key => $row}
<tr>
	<td><a href="{link previewEach $key|first, $key|second}">{!$row['source_medium']|hardspaces}</a></td>
	{foreach $row as $value}
	{if !$iterator->isFirst()}<td>{$value}</td>{/if}
	{/foreach}
</tr>
{/foreach}

Editoval HosipLan (11. 12. 2009 13:50)