Tôi đang cố gắng sử dụng lại đầu ra từ một trình định dạng trường được tùy chỉnh nhiều như <select><option>
văn bản trong một Webform. Tôi đã quản lý để sử dụng lại hiển thị trường, nhưng nó có tác dụng phụ là chuyển đổi chủ đề được sử dụng để hiển thị.
Dưới đây là một mã đơn giản hóa, các dòng $dateRenderArray = ...
và $dateHtml = ...
là bản gốc và gây ra vấn đề:
function mymodule_webform_options_alter(mảng &$options, mảng &$element, $options_id = NULL) {
foreach ($options as $value => $text) {
$entity = getEntityByOption($value);
// sử dụng lại đầu ra của trình định dạng trường tùy chỉnh
$dateRenderArray = $entity->get('field_daterange')->view('teaser');
// dòng sau gây ra sự thay đổi chủ đề
$dateHtml = \Drupal::service('renderer')->renderPlain($dateRenderArray);
$datePlaintext = str_replace(["\n", " "], ["", " "], trim(strip_tags($dateHtml)));
$muchBetterOptionText = $someOtherPlaintextFromEntity . ' ' . $datePlaintext;
$options[$value] = $muchBetterOptionText;
}
}
Điều này hoạt động xuất sắc trong biểu mẫu giao diện người dùng, cho các email gửi và cả trong danh sách gửi biểu mẫu web của quản trị viên.
Nhưng trong một chế độ xem chi tiết gửi biểu mẫu web, những dòng đó gây ra thay đổi chủ đề không mong muốn từ chủ đề quản trị viên sang chủ đề giao diện người dùng.
Câu hỏi:
Làm cách nào tôi có thể ngăn thay đổi chủ đề từ kết xuấtPlain()
và giữ chủ đề quản trị viên khi xem một lần gửi biểu mẫu web?
Câu hỏi tiền thưởng tùy chọn:
Tại sao hook của tôi hoạt động chính xác trong danh sách gửi biểu mẫu web chứ không phải trong chế độ xem chi tiết gửi biểu mẫu web? Danh sách gửi sử dụng chính xác cùng một chức năng, nó hiển thị cùng một văn bản tùy chọn được xử lý trong cột tương ứng, nhưng tôi thực sự ở bên trong chủ đề quản trị khi xem danh sách. Nhưng chỉ trong chế độ xem chi tiết mới chuyển sang chủ đề giao diện người dùng.