使用Twig将对象设置为通过另一个模板导入的模板?

时间:2016-04-05 13:13:29

标签: twig

我将link.twig包含在block.twig中,将block.twig包含在page.twig中。在我的设置选项中是否有一种方法可以将链接对象名称更改为类似于heroLink的内容?

我需要在page.twig中设置选项。 link.twig包含在其他模板中,因此我不想更改它(例如将link.url更改为heroLink.url)。

在我的页面中:

{% set options = {
    title: 'my title',
    link: {
      text: 'Search',
      url: "www.google.com"
    }
}
%}
{% include "block.twig" with options %}

在block.twig中:

<div class="something">
    <h2>{{ title }}</h2>
    <div class="hero">
    {% include "link.twig" with {'style': 'primary'} %}
    </div>
</div>

在link.twig中:

<a href="{{ link.url }}" class="link-class-{ style }}">{{ link.text }}</a>

原因是block.twig实际上有其他链接。 link.twig可能会被多次导入。由于需要在page.twig中创建模拟对象,因此在此上下文中,诸如heroLink之类的东西更有意义。

1 个答案:

答案 0 :(得分:0)

在我的页面中:

  {% set options = {
      action: {
        text: 'Action',
        url: "action.com"
      }
  }
  %}
  {% include "component.twig" with options %}

在component.twig中:

{% import "link.twig" as mainLink %}

{{ mainLink.link(action.url, action.text) }}

在link.twig

    {% macro link(url, text) %}
      <a href="{{ url }}">{{ text }}</a>
    {% endmacro %}