Tôi đang cố định dạng trường ngày từ loại nội dung sự kiện mà tôi đã tạo để có thể chuyển ngày vào một trình xuất sự kiện tạo sự kiện trong lịch chẳng hạn như Google, Apply, Yahoo và Microsoft. tôi sử dụng lịch_link cần một vài trường và ngày để tạo sự kiện lịch phù hợp.
{# lịch_liên kết(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, ngày(dateStartField), ngày(dateEndField), sai, "", "") %}
{% set linkICS = calendar_link("ics", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, ngày(dateStartField), ngày(dateEndField), sai, "", "") %}
{% set linkYahoo = calendar_link("yahoo", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, ngày(dateStartField), ngày(dateEndField), sai, "", "") %}
{% set linkWebOutlook = calendar_link("webOutlook", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, ngày(dateStartField), ngày(dateEndField), sai, "", "") %}
Điều này hoạt động tốt. Tuy nhiên, khi tôi lấy trường ngày, nó ở dạng UTC chứ không phải ở ngôn ngữ của người dùng. Tôi hiểu tại sao, vì Drupal lưu trữ ngày ở dạng UTC trong cơ sở dữ liệu. (Lưu ý: node.field_event_start_date.value bằng dateStartField vì tôi chỉ thực hiện một số định dạng đơn giản với twig)
{{ node.field_event_start_date.value }}
Tôi đã tìm thấy một số đề xuất như sử dụng tiện ích mở rộng Intl của Twig sẽ cung cấp bộ lọc Twig, localizeddate hoặc format_datetime (tôi nghĩ localizeddate là phiên bản cũ), nhưng khi tôi sử dụng trình soạn nhạc để cài đặt tiện ích mở rộng twig (https://twig.symfony.com/doc/3.x/filters/format_datetime.html):
nhà soạn nhạc yêu cầu twig/intl-extra
nhà soạn nhạc yêu cầu twig/bó phụ
nó không hoạt động. Twig không nhận ra các bộ lọc. Tôi đã thử xem thông tin từ đây. Tôi đã thấy những người khác tham khảo khái niệm kích hoạt tiện ích mở rộng Twig cho các dự án Symfony nhưng tôi không chắc điều đó sẽ ở đâu trong phần phụ trợ của trang Drupal. Xem hình ảnh đính kèm để biết lỗi bộ lọc:
Mã có format_datetime được cho là tính đến ngôn ngữ của người dùng (Bật https://twig.symfony.com/doc/3.x/filters/format_datetime.html việc sử dụng format_datetime mặc định được cho là có tính đến ngôn ngữ hiện tại):
<span>Calendar Start Date TimeZone Format: {{ calStartDate|format_datetime }}</span>
Tôi gần như cạn kiệt ý tưởng khi cố gắng định dạng ngày UTC của mình thành ngày được bản địa hóa thông qua Twig mà tôi có thể đưa vào trình xuất liên kết lịch. Tôi biết tôi có thể định dạng ngày thành múi giờ cụ thể bằng các bộ lọc Twig cơ bản, nhưng tôi không thể kiểm tra ngôn ngữ của người dùng là gì, do đó làm cho phương pháp này trở nên vô hiệu vì ngôn ngữ sẽ là động và không tĩnh.
Có một cách tiếp cận tốt hơn? Tôi có nên tạo một hook php để sửa đổi các trường ngày cho nút--event.html.twig không? Điều này có phù hợp không? Tôi không nghĩ mình cần tạo một mô-đun chỉ cho vấn đề đơn giản này nhưng tôi không chắc.
Hãy cho tôi biết nếu bạn có bất kỳ đầu mối hoặc giải pháp nào cho bất kỳ vấn đề nào của tôi.
Cảm ơn,
thợ thuộc da