ฉันกำลังพยายามใช้ผลลัพธ์จากตัวจัดรูปแบบฟิลด์ที่ปรับแต่งอย่างหนักอีกครั้งเป็น <select><option>
ข้อความในเว็บฟอร์ม ฉันสามารถใช้การแสดงฟิลด์ซ้ำได้ แต่มีผลข้างเคียงจากการสลับธีมที่ใช้สำหรับการแสดงผล
ด้านล่างนี้เป็นรหัสแบบง่าย บรรทัด $dateRenderArray = ...
และ $dateHtml = ...
เป็นต้นฉบับและเป็นสาเหตุของปัญหา:
ฟังก์ชัน mymodule_webform_options_alter (อาร์เรย์ &$ตัวเลือก อาร์เรย์ &$องค์ประกอบ $options_id = NULL) {
foreach (ตัวเลือก $ เป็น $value => $text) {
$entity = getEntityByOption($value);
// ใช้เอาต์พุตตัวจัดรูปแบบฟิลด์ที่กำหนดเองซ้ำ
$dateRenderArray = $entity->get('field_daterange')->view('ทีเซอร์');
// บรรทัดต่อไปนี้ทำให้เกิดการเปลี่ยนธีม
$dateHtml = \Drupal::service('renderer')->renderPlain($dateRenderArray);
$datePlaintext = str_replace(["\n", " "], ["", " "], ตัดแต่ง(strip_tags($dateHtml)));
$muchBetterOptionText = $someOtherPlaintextFromEntity ' ' . $date ข้อความธรรมดา;
$options[$value] = $muchBetterOptionText;
}
}
วิธีนี้ใช้งานได้ดีในฟอร์มส่วนหน้าสำหรับอีเมลที่ส่งและในรายการการส่งฟอร์มเว็บของผู้ดูแลระบบ
แต่ในมุมมองรายละเอียดการส่งเว็บฟอร์มเดียว บรรทัดเหล่านั้นทำให้เกิดการเปลี่ยนธีมที่ไม่ต้องการจากธีมผู้ดูแลระบบเป็นธีมส่วนหน้า
คำถาม:
ฉันจะป้องกันไม่ให้เปลี่ยนธีมได้อย่างไร เรนเดอร์ธรรมดา()
และเก็บธีมผู้ดูแลระบบไว้เมื่อดูการส่งเว็บฟอร์มเดียว
คำถามโบนัสเพิ่มเติม:
เหตุใด hook ของฉันจึงทำงานได้อย่างถูกต้องในรายการการส่งแบบฟอร์มบนเว็บ และไม่อยู่ในมุมมองรายละเอียดการส่งแบบฟอร์มบนเว็บ รายการส่งใช้ฟังก์ชันเดียวกันทุกประการ แสดงข้อความตัวเลือกที่ประมวลผลเหมือนกันในคอลัมน์ที่เกี่ยวข้อง แต่ฉันอยู่ในธีมผู้ดูแลระบบอย่างถูกต้องเมื่อดูรายการ แต่เฉพาะในมุมมองรายละเอียดเท่านั้นที่จะเปลี่ยนเป็นธีมส่วนหน้า