Twigs gebruiken in een view

Wat zijn twigs en wat zijn de mogelijkheden in een view?

Wat is Twig? Wel... je kunt er simpele instructies mee schijven. Een soort brug tussen PHP en HTML. Het is ingebouwd in Drupal. Je hebt het zeker reeds gezien... {{ field_image}} is bijvoorbeeld een twig. Je herkent het aan de dubbele accolades.. Het wordt gebruikt om velden te herschrijven in views.

Bij de vervangingspatronen zie je de twigs staan.

Met een kort voorbeeld zal ik tonen hoe je kunt rekenen en voorwaarden instellen met twigs. Zo vervang je (onder andere) de Views Conditional en Views Simple Math modules.

Laat ons eerst eens een simpele optelling maken van 2 velden..

Het aantal gewonnen Oscars en Oscar nominaties  van een acteur/actrice zitten in 2 aparte (integer) velden. We gaan die optellen in een view. Zet de nodige velden boven je veld dat je gebruikt voor de twig.

Om te kunnen rekenen met twigs moet je eerst een variabele toekennen. Merk op dat ik hier {% gebruik om variabelen in te stellen en {{ om de gegevens weer te geven. De |trim zorgt er voor dat je alle mogelijke opmaak en spaties van de waarden verwijdert. 

{% set nominaties = field_oscar_nominaties|trim %}
{% set gewonnen= field_oscar_gewonnen|trim %}
{{nominaties + gewonnen}}

En ja hoor.. In totaal heeft Alec Guinness (ik weet wel de namen te kiezen hé) er drie: 1 gewonnen en 2 genomineerd.

Dit was slechts een opwarmertje.. Een vriend vroeg me om de leeftijd van overleden personen uit te rekenen in een view.

(bron: filmfreak.be) Merk op dat je niet zomaar de jaartallen van elkaar kunt aftrekken.. Hitchcock is geen 81 jaar geworden, aangezien hij niet zijn verjaardag gehaald heeft in 1980... Bij Alec Guinness   is dit wel zo. Als je gewoon wilt weten (bij nog levende personen) hoe oud ze zijn, gebruik dan de Views Birthday module. Wij kunnen daar echter geen gebruik van maken...

Het komt er op neer dat je de jaartallen van elkaar aftrekt en dan controleert of hij/zij hun verjaardag gehaald heeft. Zo niet moet er een jaartje af. Doe dit maar eens op de gewone manier.. Je hebt er heel wat velden voor nodig om te herschrijven en heel wat conditionials.. 

Enkel ter info heb ik hier de velden opgesomd die je nodig hebt als je geen twigs gebruikt..

Wij gaan dit anders aanpakken... Maak eerst een inhoudstype aan met de nodige 2 velden. Voeg inhoud toe.


Maak een view met de velden en voeg ook een tekstveld toe. Ik doe dit liever dan een veld te herschrijven. Zoveel overzichtelijker.

We bekijken de eerste code...

Ik herschrijf het veld met de geboortedatum dat enkel het jaar wordt opgenomen. (Y =year)

{% set geboortejaar = field_geboortedatum|date("Y") %}

Zo ook voor het sterfjaar. Deze twig bestaat uit 2 delen. Wat spreek je aan en hoe wil je dit weergeven, gescheiden door |

{% set sterfjaar = field_sterfdatum|date("Y") %}

Dan kan ik reeds op de gewone manier het verschil berekenen.

Zonder correctie: {{sterfjaar - geboortejaar}}

Het resultaat.. (Dit is verkeerd bij Guinness, omdat we nog geen controle gedaan hebben qua dag en maand..) Het valt reeds op hoe makkelijk deze manier van werken is? Je haalt er moeiteloos de veldwaarden mee binnen en je kan gewoon tekst schrijven tussen de code.

We gaan daarom ook de maanden en dagen omvormen tot een getal. md = maand en dag aan elkaar geschreven.

{% set geboortejaar = field_geboortedatum|date("Y") %}
{% set sterfjaar = field_sterfdatum|date("Y") %}

{% set geboorte_maand_en_dag= field_geboortedatum|date("md") %}
{% set sterf_maand_en_dag= field_sterfdatum|date("md") %}

{{geboorte_maand_en_dag}} </br> {{sterf_maand_en_dag}}</br>
Zonder correctie: {{sterfjaar - geboortejaar}}

Dit levert volgend resultaat op. Maand en dag worden tot een getal omgevormd. Een nul in het begin wordt door het programma automatisch weggelaten... Het komt er nu op neer dat iemand maar een jaar ouder kan genoemd worden als zijn geboorte 'cijfer' kleiner of gelijk is, dan zijn sterf 'cijfer'. Bij Hitchcock is dit niet zo.
 

We voegen daarom een voorwaarde toe. Kijk hoe dit in een twig wordt gedaan. Je kunt ook tekst, HTML, CSS er tussen aanbrengen. Het zal allemaal aan dezelfde voorwaarden voldoen.

{% if ( geboorte_maand_en_dag > sterf_maand_en_dag) %}
&#10015;{{ sterfjaar- geboortejaar - 1}} jaar
{% else %}
&#10015;{{ sterfjaar- geboortejaar }} jaar
{% endif %}
 

De correcte weergaves. Merk op dat ik de HTML code voor het kruisteken (&#10015;) en tekst zomaar kan gebruiken in combinatie met de twig.

OK.  We gaan het wat moeilijker maken...Wat als de persoon nog niet gestorven is... Wel dan moeten we de leeftijd bepalen aan de hand van de huidige datum (now) .Merk op dat de voorwaarden genest zijn. Een voorwaarde in een andere voorwaarde...Zie ook hoe ik test of er al dan niet een sterfdatum is (is empty)...


{% set geboortejaar = field_geboortedatum|date("Y") %}
{% set geboorte_maand_en_dag= field_geboortedatum|date("md") %}

{% if field_sterfdatum is empty %}

       {% set huidigjaar= "now"|date("Y") %}
       {% set huidig_maand_en_dag= "now"|date("md") %}

       {% if (geboorte_maand_en_dag > huidig_maand_en_dag) %}
           {{ huidigjaar- geboortejaar - 1}} jaar
       {% else %}
           {{ huidigjaar- geboortejaar }} jaar
       {% endif %}

{% else %}

 
      {% set sterfjaar = field_sterfdatum|date("Y") %}
      {% set sterf_maand_en_dag= field_sterfdatum|date("md") %}

      {% if ( geboorte_maand_en_dag > sterf_maand_en_dag) %}
             &#10015;{{ sterfjaar- geboortejaar - 1}} jaar
      {% else %}
           &#10015;{{ sterfjaar- geboortejaar }} jaar
      {% endif %}

{% endif %}

En zo zie je dat op het ogenblik van deze print (28-4-21) Penelope Cruz  47 geworden is op haar verjaardag. Dat de jaren nu naar rechts verschuiven, heeft te maken met de spaties die ik in de code hierboven heb gezet om het leesbaarder te maken. Het spreekt voor zich dat dit niet echt nodig is voor de weergave.

Conclusie: Twigs zijn één van de meest onderschatte tools in Drupal. Ze verdienen meer aandacht.