Návrh na nové Latte makro {showIf}
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- h4kuna
 - Backer | 741
 
Makro řeší následující situaci.
{if $foo}
	<a href="#anchor">bar</a>
{else}
	bar
{/if}
Nahradit tímto zápisem.
<a n:showIf="$foo" href="#anchor">bar</a>
Důvody:
- šetří místo
 - neduplikuje se obsah tagu <a>
 
Implementace:
<?php
namespace Foo;
use Latte\Compiler;
use Latte\MacroNode;
use Latte\Macros\MacroSet;
use Latte\PhpWriter;
class Macros extends MacroSet {
    public static function install(Compiler $compiler) {
        $me = new static($compiler);
        $me->addMacro('showIf', array($me, 'macroShowIf'), array($me, 'macroEndShowIf'));
    }
    public function macroShowIf(MacroNode $node, PhpWriter $writer) {
        return $writer->write('if (%node.args) {');
    }
    public function macroEndShowIf(MacroNode $node, PhpWriter $writer) {
        $out = NULL;
        $tag = $node->htmlNode->name;
        if (preg_match('/^<' . $tag . '.*?>(?P<inner>.*)<\/' . $tag . '>$/s', $node->content, $find)) {
            $out .= '} else { ?>' . $find['inner'];
        }
        return $out . '<?php }';
    }
}
					Editoval h4kuna (21. 10. 2014 10:22)

- jiri.pudil
 - Nette Blogger | 1034
 
Nebo pomocí prefixu
tag-aplikujeme makro jen na samotné HTML značky:<p><a href="{$url}" n:tag-if="$url">Title</a></p>