用于重复模板的 Twig 函数

Twig function for repeating template

我是 Twig 的新手,最近开始了一个项目。在这里我经常使用星级评分显示,它也需要一些值,例如要显示的评分或大小。

目前,我一直在使用

<div class="ratingarea">
    {% include 'Artist:rating.html.twig' 
    with {'rating': artist.rating, 'size': 'medium' } %} 
</div>

无处不在,它完成了这项工作,但我想知道,是否可以选择将其简化为只接受参数和 returns 所需模板的函数,如下所示:

<div class="ratingarea"> {% rating(2.8, 'medium') %} </div>

这可能吗?或者其他改进方法?

这是模板:

<span>
  <div class="review-rating">
    <div class="rating {{size}}-rating">
      <div class="stars stars-fontawesome-o top-art">
        <select class="list-rating fontawesome-o " 
                 data-current-rating="{{rating}}">
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
          <option value="4">4</option>
          <option value="5">5</option>
        </select>
      </div>
    </div>
  </div>
</span>

你可以依靠宏,

macro.twig

{% macro rating(rating, size) %}
<span>
  <div class="review-rating">
    <div class="rating {{size}}-rating">
      <div class="stars stars-fontawesome-o top-art">
        <select class="list-rating fontawesome-o " data-current-rating="{{rating}}">
          {% for i in 1..5 %}
          <option value="{{ i }}">{{ i }}</option>
          {% endfor %}
        </select>
      </div>
    </div>
  </div>
</span>
{% endmacro %}

template.twig

{# import the macro's in the file "macro.twig" as the namespace `macro` #}
{% import "macro.twig" as macro %}
{{ macro.rating(2.5, 'medium') }}

twigfiddle