it-swarm.com.de

Formularelement überschreiben twig Vorlage

Ich möchte die Vorlage twig für bestimmte Felder in einem Formular überschreiben, das ich über das Kontaktmodul in Drupal 8) erstellt habe.

Ich kann jedoch keine Dokumentation finden, und die Vorschläge in den HTML-Kommentaren zeigen mir auch nichts Nützliches.

Grundsätzlich möchte ich ein benutzerdefiniertes Feld (field_phone) und ein Standardfeld (Absendername) in einem bestimmten Kontakt aus folgenden Werten überschreiben:

  • form-element.html.twig
  • form-element-label.html.twig
  • input.html.twig

Ist das möglich? Und was sind die Vorschläge für Dateinamen?

3
pjcarly

Das Modul Drupal Themable Forms-Modul fügt einige hilfreiche Themenvorschläge für Formularelemente hinzu, die im Kern fehlen.

Die hinzugefügten Themenvorschläge für Formularelemente sind:

  form-element--[form-id]--[element-type].html.twig
  form-element--form-id--[form-id].html.twig
  form-element--type--[element-type].html.twig
  form-element.html.twig
5
thejimbirch

Sie müssen kein zusätzliches Modul installieren, sondern können die Vorschläge einfach selbst hinzufügen:

datei: MYMODULE.module

function MYMODULE_theme_suggestions_form_element_alter(array &$suggestions, array $variables, $hook) {
  if ( $variables['element']['#id'] === 'FORMID') {
    $suggestions[] = $hook . '__custom';
  }
}

dadurch wird Drupal nach einer twig Datei mit dem Namen 'form-element - custom.html.twig' suchen.

$ hook ist in diesem Fall 'form_element', da wir uns explizit daran anschließen, lautet der Funktionsname ' MYMODULE_theme_suggestions_HOOK_alter ', aber Sie können einfach wählen - ein beliebiger Name für die Vorlagendatei habe ich nur versucht, mich an die Namenskonventionen Drupal) zu halten.

Um die FORMID für Ihr spezifisches Formular herauszufinden, fügen Sie einfach die Zeile hinzu

  print '<-- FORMID:'.$variables['element']['#id'].'-->;

als erste Zeile der Funktion und dann Inspektion des Elements im Browser sehen Sie dort einen HTML-Kommentar mit dem Namen des Formulars.

5
Larzan