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