Încerc să reutilizați rezultatul de la un formatator de câmpuri puternic personalizat ca <select><option>
text într-un formular Web. Am reușit să refolosesc afișarea câmpului, dar are efectul secundar de a schimba tema folosită pentru randare.
Mai jos este un cod simplificat, liniile $dateRenderArray =...
și $dateHtml =...
sunt originale si cauzeaza problema:
funcția mymodule_webform_options_alter(matrice &$opțiuni, matrice &$element, $opțiuni_id = NULL) {
foreach ($opțiuni ca $valoare => $text) {
$entity = getEntityByOption($valoare);
//reutilizați ieșirea formatatorului de câmp personalizat
$dateRenderArray = $entity->get('field_daterange')->view('teaser');
// linia următoare provoacă schimbarea temei
$dateHtml = \Drupal::service('renderer')->renderPlain($dateRenderArray);
$datePlaintext = str_replace(["\n", " "], ["", " "], trim(strip_tags($dateHtml)));
$muchBetterOptionText = $someOtherPlaintextFromEntity . ' ' . $datePlaintext;
$options[$value] = $muchBetterOptionText;
}
}
Acest lucru funcționează excelent în formularul de front-end, pentru e-mailurile de trimitere și, de asemenea, în lista de trimitere a formularelor web de administrare.
Dar într-o singură vizualizare de detaliu a trimiterii formularului web, acele linii provoacă o schimbare nedorită a temei de la tema de administrare la temă de interfață.
Întrebare:
Cum pot preveni schimbarea temei de la renderPlain()
și păstrați tema de administrare atunci când vizualizați o singură trimitere a unui formular web?
Întrebare bonus opțională:
De ce funcționează corect cârligul meu în lista de trimitere a formularelor web și nu în vizualizarea detaliată a trimiterii formularelor web? Lista de trimitere folosește exact aceeași funcție, redă același text de opțiune procesat în coloana corespunzătoare, dar eu rămân corect în tema de administrare atunci când vizualizez lista. Dar numai în vizualizarea de detaliu comută la tema frontend.