ฉันกำลังพยายามจัดรูปแบบฟิลด์วันที่จากประเภทเนื้อหาเหตุการณ์ที่ฉันสร้างขึ้น เพื่อให้ฉันสามารถส่งวันที่ไปยังเครื่องมือส่งออกกิจกรรมที่สร้างกิจกรรมในปฏิทิน เช่น Google, Apply, Yahoo และ Microsoft ฉันใช้ ปฏิทิน_ลิงค์ ซึ่งใช้ฟิลด์สองสามฟิลด์และวันที่เพื่อสร้างกิจกรรมในปฏิทินที่เหมาะสม
{# 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, วันที่(dateStartField), วันที่(dateEndField), เท็จ, "", "") %}
{% set linkICS = calendar_link("ics", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, วันที่(dateStartField), วันที่(dateEndField), เท็จ, "", "") %}
{% set linkYahoo = calendar_link("yahoo", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, วันที่(dateStartField), วันที่(dateEndField), เท็จ, "", "") %}
{% set linkWebOutlook = calendar_link("webOutlook", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, วันที่(dateStartField), วันที่(dateEndField), เท็จ, "", "") %}
มันใช้งานได้ดี อย่างไรก็ตาม เมื่อฉันคว้าฟิลด์วันที่ มันอยู่ใน UTC ไม่ใช่โลแคลของผู้ใช้ ฉันเข้าใจว่าทำไม เนื่องจาก Drupal เก็บวันที่เป็น UTC ในฐานข้อมูล (หมายเหตุ: node.field_event_start_date.value เท่ากับ dateStartField เนื่องจากฉันเพิ่งจัดรูปแบบง่ายๆ ด้วย twig)
{{ node.field_event_start_date.value }}
ฉันพบคำแนะนำบางอย่าง เช่น การใช้ส่วนขยาย Intl ของ Twig ซึ่งจะให้ตัวกรอง Twig วันที่ที่แปลเป็นภาษาท้องถิ่น หรือรูปแบบวันที่เวลา (ฉันคิดว่าวันที่ที่แปลเป็นภาษาท้องถิ่นเป็นเวอร์ชันเก่า) แต่เมื่อฉันใช้ผู้แต่งเพื่อติดตั้งส่วนขยายของกิ่งไม้ (https://twig.symfony.com/doc/3.x/filters/format_datetime.html):
นักแต่งเพลงต้องการ twig/intl-extra
นักแต่งเพลงต้องการกิ่งไม้ / มัดพิเศษ
มันไม่ทำงาน Twig ไม่รู้จักตัวกรอง ผมได้ลองหาข้อมูลจาก ที่นี่. ฉันเคยเห็นผู้อื่นอ้างถึงแนวคิดของการเปิดใช้งานส่วนขยาย Twig สำหรับโครงการ Symfony แต่ฉันไม่แน่ใจว่าจะอยู่ที่ใดในแบ็กเอนด์ของไซต์ Drupal ดูภาพที่แนบมาสำหรับข้อผิดพลาดของตัวกรอง:
โค้ดที่มี format_datetime ที่ควรจะคำนึงถึงโลแคลของผู้ใช้ (On https://twig.symfony.com/doc/3.x/filters/format_datetime.html การใช้ค่าเริ่มต้นของ format_datetime ควรคำนึงถึงสถานที่ปัจจุบันด้วย):
<span>Calendar Start Date TimeZone Format: {{ calStartDate|format_datetime }}</span>
ฉันเกือบจะหมดปัญญาในการพยายามจัดรูปแบบวันที่ UTC ของฉันให้เป็นวันที่ที่แปลเป็นภาษาท้องถิ่นผ่าน Twig ที่ฉันสามารถป้อนลงในเครื่องมือส่งออกลิงก์ปฏิทินได้ ฉันรู้ว่าฉันสามารถจัดรูปแบบวันที่เป็นเขตเวลาเฉพาะได้ด้วยตัวกรอง Twig พื้นฐาน แต่ฉันไม่สามารถตรวจสอบได้ว่าโลแคลของผู้ใช้คืออะไร จึงทำให้วิธีนี้เป็นโมฆะเนื่องจากโลแคลจะเป็นไดนามิกและไม่คงที่
มีแนวทางที่ดีกว่านี้หรือไม่? ฉันควรสร้าง php hook ที่แก้ไขฟิลด์วันที่สำหรับ node--event.html.twig หรือไม่ สิ่งนี้จะเหมาะสมหรือไม่? ฉันไม่คิดว่าจะต้องสร้างโมดูลสำหรับปัญหาง่ายๆ นี้ แต่ฉันไม่แน่ใจ
แจ้งให้เราทราบหากคุณมีโอกาสในการขายหรือวิธีแก้ไขปัญหาใดๆ ของฉัน
ขอบคุณ,
แทนเนอร์