content type variable to string in twig-template

Hallo,

In het verleden heb ik een aantal websites gemaakt in drupal 7. Echter ben ik nu begonnen aan mijn eerste drupal 8 website en stuit ik op een probleem. Ik heb een eigen contenttype gemaakt genaamd event, dat enkel een titel, omschrijving, datum en locatie heeft. Datum is een veld van het type "Datum" (module), locatie is een tekst-veld (max 255 karakters).

Wanneer ik de lay-out van de node-pagina wil aanpassen, sla ik er niet in om zowel datum als locatie op 1 lijn te krijgen. Wat ik wens is een tekst die zegt "Place to be: " + locatie.tostring() + " at " datum.tostring();

Hier sla ik niet in, omdat de velden contenttype.locatie en contenttype.datum, een array teruggeven i.p.v. een string en wanneer ik contenttype.locatie.value of conttenttype.datum.value opvraag, is de inhoud leeg...

Wanneer ik echter gewoon {{ contenttype.locatie }} opvraag krijg ik wel de inhoud van het veld geoutput, alleen kan ik dan geen concatenate met een stuk tekst doen (ik krijg dan een error met melding dat ik geen array kan concatenaten met tekst.

Ik ben hier nu al een tijdje zoet mee, en sla er niet in dit op te lossen.

Met vriendelijke groeten,

Laura

Drupalversie: 
8.x
Auteur: 
laura
afbeelding van Niek Kloots
Door Niek Kloots op 3 september, 2018 - 21:04

En als je het als een page view benaderd?

http://familiekloots.nl
hobby: http://noww.nl en http://openwaterswimming.eu

Door laura op 3 september, 2018 - 21:21

Hmmm, hierin ben ik niet meteen mee. De views moet ik toch nog steeds layouten via een twig-template?

Ik ben in de tussentijd al iets verder gekomen (via debuggen van mijn velden). Wanneer ik mijn veld oproep via {{node.field_locatie}} of via {{node.field_locatie.0}} blijkt die telkens een array weer te geven.

Wanneer ik die dan probeer te debuggen door te lopen over de array (node.field_locatie.0) en het weergeven van de inhoud die daarin zit, krijg ik volgende output:

  • Key: #type Value: processed_text
  • Key: #text Value: Café de zwaan
  • Key: #format Value: restricted_html
  • Key: #langcode Value: nl

Echter wil ik nu dus gewoon kunnen weergeven Place to be: Café de zwaan, maar ik geraak aan de content van de entry met key "#text" om een of andere reden niet aan. Het veld node.field_locatie.0.text bestaat niet en het veld node.field_locatie.0.#text levert een parsing error op

Door laura op 3 september, 2018 - 21:53

In de tussentijd ben ik erin geslaagd om toch "iets" te kunnen maken wat lijkt op mijn bedoeling:

// eerst haal ik de inhoud van mijn contenttype zijn velden op:
{% set locatie = content.field_locatie.0 %}
{% set datum = content.field_datum.0 %}

//Dan loop ik over de velden in de eerste variabele (die een array is), wanneer ik een entry vind met als substring in de key "text", wordt dit de nieuwe inhoud van het veld locatie:
{% for key,value in locatie %}
{% if ( 'text' in key) %}
Key: {{ key }}
Value: {{ value }}
{% set locatie = value %}
{% endif %}
{% endfor %}

// Hetzelfde doe ik voor het datum veld
{% for key,value in datum %}
{% if ( 'text' in key) %}
Key: {{ key }}
Value: {{ value }}
{% set datum = value %}
{% endif %}
{% endfor %}

// Daarna print ik het uit:
{{ "The place to be? #{locatie} at #{datum}." }}

Dit levert me de tekst: "The place to be? Café de zwaan at wo, 09/26/2018 - 20:00.

Echter is dit:

  1. zeer omslachtig, ik zou verwachten dat er een soort get-method bestaat die ik over het hoofd zie
  2. nu is mijn datum een content type string, met de amerikaanse layout, graag had ik hier zelf een andere layout aan gegeven... De enige optie die ik nu zie is het veld parsen naar een type datum

Ik denk eigenlijk dat ik gewoon de eenvoudige manier om dit te doen over het hoofd zie...

afbeelding van belba
Door belba op 9 september, 2018 - 16:21

Ik weet niet welk thema je gebruikt.In node.html.twig. Daar kan je alle velden aanroepen middels
{{ content.jouw_field_name }}. Je kan die node.html.twig best herschrijven voor je eigen gemaakte content type.

Bookmark and Share

Drupal is een geregistreerd merk van Dries Buytaert. | Powered by Pantheon.

Drupal.be/Drupal.nl is de website van de Nederlandstalige Drupalgemeenschap.