Puncte:1

Nu se poate formata data în twig din UTC în localitatea utilizatorului

drapel in

Încerc să formatez câmpul de dată dintr-un tip de conținut de eveniment pe care l-am creat, astfel încât să pot trece data într-un exportator de evenimente care creează evenimente în calendare precum Google, Apply, Yahoo și Microsoft. eu folosesc calendar_link care necesită câteva câmpuri și datele pentru a crea evenimentul corespunzător din calendar.

{# calendar_link(link_type, title, start_date, end_date, all_day, description, location) #}
{% set linkGoogle = calendar_link("google", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, data(dateStartField), data(dateEndField), false, "", "") %}
{% set linkICS = calendar_link("ics", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, data(dateStartField), data(dateEndField), false, "", "") %}
{% set linkYahoo = calendar_link("yahoo", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, data(dateStartField), data(dateEndField), false, "", "") %}
{% set linkWebOutlook = calendar_link("webOutlook", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, data(dateStartField), data(dateEndField), false, "", "") %}

Acest lucru funcționează bine. Cu toate acestea, când apuc câmpul de dată, este în UTC și nu în localitatea utilizatorului. Înțeleg de ce, pentru că Drupal stochează datele ca UTC în baza de date. (Notă: node.field_event_start_date.value este egal cu dateStartField deoarece fac doar o formatare simplă cu twig)

{{ node.field_event_start_date.value }}

Am găsit câteva sugestii, cum ar fi utilizarea extensiei Intl a Twig, care ar oferi un filtru Twig, localizeddate sau format_datetime (cred că localizeddate este versiunea veche), dar când am folosit Composer pentru a instala extensiile Twig (https://twig.symfony.com/doc/3.x/filters/format_datetime.html):

compozitorul necesită twig/intl-extra
compozitorul necesită crenguță/pachet suplimentar

nu merge. Filtrele nu sunt recunoscute de Twig. Am încercat să caut informații de la Aici. Am văzut pe alții referindu-se la noțiunea de activare a extensiilor Twig pentru proiecte Symfony, dar nu sunt sigur unde ar fi asta pe backend-ul site-ului Drupal. Vedeți imaginea atașată pentru eroarea de filtru:

introduceți descrierea imaginii aici

Cod cu format_datetime care ar trebui să ia în considerare localitatea utilizatorului (On https://twig.symfony.com/doc/3.x/filters/format_datetime.html se presupune că utilizarea implicită a format_datetime ține cont de localitatea curentă):

<span>Calendar Start Date TimeZone Format: {{ calStartDate|format_datetime }}</span>

Aproape că am încercat să-mi formatez datele UTC într-o dată localizată prin Twig pe care o pot introduce într-un exportator de linkuri de calendar. Știu că pot formata o dată într-un anumit fus orar cu filtrele de bază Twig, dar nu pot verifica care este localitatea utilizatorului, făcând astfel această abordare nulă, deoarece localitatea ar fi dinamică și nu statică.

Există o abordare mai bună? Ar trebui să creez un hook php care modifică câmpurile de dată pentru node--event.html.twig? Ar fi acest lucru potrivit? Nu cred că ar trebui să creez un modul doar pentru această problemă simplă, dar nu sunt sigur.

Anunțați-mă dacă aveți piste sau soluții la oricare dintre problemele mele.

Mulțumiri,
Tăbăcar

Puncte:0
drapel cn

Este greu să gestionați formatul de dată Drupals UTC cu biblioteci non-Drupal, obțineți marcajul de timp Unix:

{{ node.field_date.date.gettimestamp }}

Sau mai bine formatați câmpurile Drupal cu formatatoarele de câmpuri Drupal. În Twig puteți folosi |vedere filtru de Twig Tweak:

{{ node.field_date[0]|vizualizare }}

Puteți adăuga o matrice ca argument pentru setările formatatorului de câmp. Chiar dacă doriți să rezolvați acest lucru numai în cod, configurați temporar un formatator de câmp în UI și exportați configurația rezultată. Atunci știi setările pentru |vizualizare(). Vedea https://git.drupalcode.org/project/twig_tweak/-/blob/3.x/docs/cheat-sheet.md#view

Puteți face mai multe lucruri în PHP. Vedea Cum să obțineți șirul de date formatat de la un obiect DateTimeItem

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.