Logique
Balises
- assign — assigne une valeur a une variable
- capture — balise de bloc qui capture du texte dans une variable
- case
- comment — Commente le code
- cycle
- for — boucle
- if — if/else standard
- unless — miroir de if
- include — permet d'inclure un snippet
- layout — permet d'affiche le template courant dans un autre layout que celui par défaut
Opérateurs
You can use different operators when using logic statements ...
- == — Égal
- != — Non égal
- > — Plus grand que
- < — Plus petit que
- >= — Plus grand ou égal à
- <= — Plus petit ou égal là
- or — "ou"
- and — "et"
If / Elsif / Else
Exemples :
{% if blog_post.accepts_comments? %}
<h2>Poster un commentaire</h2>
[...]
{% else %}
<p>Les commentaires sont fermés.</p>
{% endif %}
{% if category.slug == 'shirts' and product.price > 999.99 %}
Merci d'acheter des t-shirts à prix élevé !
{% endif %}
Case
Exemple :
{% case condition %}
{% when 1 %}
a touché 1
{% when 2 or 3 %}
[a touché 2 ou 3]
{% else %}
a touché quelquechose d'autre
{% endcase %}
Cycle
Exemples :
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}
résultera en
one
two
three
one
Si aucun nom est donné pour le groupe "cycle", il est assumé que plusieurs appels avec les mêmes paramètres sont un seul groupe.
Si vous souhaitez avoir un contrôle complet sur les groupes, vous pouvez de façon optionnelle préciser un nom de gruope. Il peut être variable.
{% cycle 'groupe 1': 'one', 'two', 'three' %}
{% cycle 'groupe 1': 'one', 'two', 'three' %}
{% cycle 'groupe 2': 'one', 'two', 'three' %}
{% cycle 'groupe 2': 'one', 'two', 'three' %}
résultera en
one
two
one
two
Boucles "for"
Exemple :
{% for item in array %}
{{ item }}
{% endfor %}
Durant chaque boucle, les variables d'aides sont accessible :
forloop.length # => length of the entire for loop
forloop.index # => index of the current iteration
forloop.index0 # => index of the current iteration (zero based)
forloop.rindex # => how many items are still left?
forloop.rindex0 # => how many items are still left? (zero based)
forloop.first # => is this the first iteration?
forloop.last # => is this the last iteration?
Il y a plusieurs attributs pour influencer quels éléments que vous souhaitez recevoir dans votre boucle :
- limit:[int] permet de restreindre le nombre d'éléments que vous aurez.
- offset:[int] permet de commencer à boucler sur l'élément n°X.
# array = [1,2,3,4,5,6]
{% for item in array limit:2 offset:2 %}
{{ item }}
{% endfor %}
# résulte en 3,4
Changer le sens :
{% for product in products reversed %} {{product.name}} {% endfor %}
Au lieu de boucler autour d'un tableau existant, vous pouvez définir un rayon de nombres à boucler.
Le rang peut être défini de façon litérale ou avec des variables :
# si quantity = 4...
{% for i in (1..quantity) %}
{{ i }}
{% endfor %}
# résultera en 1,2,3,4
Assignement de variables
Vous pouvez mettre des données dans vos propres variables.
La façon la plus simple de créer une variable est avec la balise "assign" :
{% assign right_price = 42 %}
{% for product in products %}{% if product.price == right_price %}
<p>The price is right!</p>
{% endif %}{% endfor %}
Si vous souhaitez combiner plusieurs chaînes dans une seule et l'enregistrer dans une varaible, vous pouvez le faire avec la balise "capture". Cette balise est un bloc qui capture tout ce qui est généré à l'intérieur, et l'assigne au nom de variable au lieu de l'afficher.
{% capture picture_html_id %}picture_{{ picture.id }}{% endcapture %}
<img src="{{picture.url}}" alt="" id="{{picture_html_id}}" style="display:none" />
<a href="javascript:$('#{{picture_html_id}}').show();return false;">Afficher l'image</a>