Twig 避免在细枝模板中使用相同的语句

Twig 避免在细枝模板中使用相同的语句,twig,template-engine,Twig,Template Engine,我有 {%if element.type=='text%} ... {%elseif element.type=='image%} ... {%endif%} 如您所见,我必须多次执行相同的if条件。 怎样才能避免每次重复的情况?我对小树枝模板非常陌生。您通常会有一些冗余。但在我看来,重复HTML块而不是细枝是更好的做法 <div class="{{element.type == 'cover' ? 'cover-full' : 'fixed-width'}}"> <

我有


{%if element.type=='text%}
...
{%elseif element.type=='image%}
...
{%endif%}
如您所见,我必须多次执行相同的
if
条件。
怎样才能避免每次重复的情况?我对小树枝模板非常陌生。

您通常会有一些冗余。但在我看来,重复HTML块而不是细枝是更好的做法

<div class="{{element.type == 'cover' ? 'cover-full' : 'fixed-width'}}">
    <div class="element 
        {% if element.type == 'text' %}
           element-text
        {% elseif element.type =='image' %}
           element-image
        {% endif %}">

        {% if element.type == 'text' %}
           ...
        {% elseif element.type == 'image' %}
           ...
        {% endif %}
   </div>
{%if element.type='text%}
内容
{%elseif element.type=='image%}
内容
{%else%}
{%include'snippet.html%}
{%endif%}
  • 您拥有更有效、更可读的HTML
  • 如果你改变一个条件,你只需要改变一次
  • 您可以使用
    {%include'snippet.html%}
    来减少html块中的冗余

  • 您可以简化代码:

    {% if element.type == 'text' %}
        <div class="element element-text">
            content
        </div>
    {% elseif element.type =='image' %}
         <div class="element element-image">
            content
        </div>
    {% else %}
        {% include 'snippet.html' %}
    {% endif %}
    
    您可以使用细枝宏。在模板的顶部添加

    {% if element.type in ['text','image'] %}element-{{element.type}}{% endif %}
    
    后来:

    {% macro element_class(type) -%}
        {% if type in ['text','image'] %}element-{{type}}{% endif %}
    {%- endmacro %}
    {% from _self import element_class %}
    
    
    

    您可以根据类型使用动态包含。这将把条件的数量减少到一个
    <div class="{{element.type == 'cover' ? 'cover-full' : 'fixed-width'}}">
        <div class="element {{ element_class(element.type) }}">