在树枝中重用具有不同ids'和名称'的选择菜单

时间:2017-01-26 09:07:17

标签: twig

我想重用一个选择菜单,但每次在Twig中更改id和它的名称。怎么可能呢?

我想到了一个关于选择菜单的包装块,然后每次重用时都会扩展它。但是如何使用{{ parent() }}设置id和name的值?

1 个答案:

答案 0 :(得分:1)

我通过在自定义Twig_Extension课程中存储和创建密钥来实现此目的,这是一个小设置。通过保持全局,我可以确保每个视图/宏/包括...

中的唯一ID

example.twig

{% for i in 1..5 %}
<ul id="{{ get_unique_key('my_menu') }}">
    <li>Foo</li>
</ul>
{% endfor %}

ProjectTwigExtension

class ProjectTwigExtension extends Twig_Extension {
    private $keys = array();

    public function getFunctions() {
        return array(
            new Twig_SimpleFunction('get_unique_key', array($this, 'getUniqueKey')),            
        ); 
    }

    /**
    *   Create an unique HTML identifier
    *
    *   @param $name String to make unique
    *
    *   @returns String
    */
    public function getUniqueKey($name) {
        if (!in_array($name, $this->keys)) {
            $this->keys[] = $name;
            return $name;
        }
        $i = 0;
        while(in_array($name.++$i,$this->keys)) {}
        $this->keys[] = $name.$i;
        return $name.$i;
    }

    public function getName() {
        return 'ProjectTwigExtension';
    }        
}

注册扩展名

$twig = new Twig_Environment($loader);
$twig->addExtension(new ProjectTwigExtension());