/ Fonction / Twig pour répéter le modèle - symfony, twig, templating

Fonction Twig pour répéter le modèle - symfony, twig, templating

Je suis nouveau sur Twig et j'ai récemment commencé un projet. Dans ce cadre, j'utilise très souvent un affichage de classement par étoiles, qui nécessite également certaines valeurs, par exemple le classement à afficher ou la taille.

Actuellement, j'utilise toujours

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

partout, ce qui fait le travail, mais je me demandais s'il y avait la possibilité de le réduire à une fonction qui ne prend que les paramètres et renvoie le modèle souhaité, quelque chose comme ceci:

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

Est-ce possible? Ou une autre façon d'améliorer cela?

Ceci est le modèle:

<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>

Réponses:

2 pour la réponse № 1

Vous pouvez compter sur les macros,

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