it-swarm.com.de

Fügen Sie den Formularnamen zum Eingabefeld für Themenvorschläge hinzu

Wie erhalte ich den Formularnamen für das Thema, wenn ein Vorschlag in Drupal 8) eingegeben wird?

function [THEME_NAME]_theme_suggestions_input_alter(array &$suggestions, array $variables) {
  if (isset($variables['element']['#parents'])) {
    $suggestions[] = 'input__'.$variables['element']['#parents'][0] ;
  }
}
3
purencool

In Ihrem yourTheme.theme Können Sie Folgendes tun:

function yourTheme_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {

  foreach (\Drupal\Core\Render\Element::children($form) as $key) {
    $form[$key]['#attributes']['data-twig-suggestion'] = $form['#id'];
  }

  $form['actions']['submit']['#attributes']['data-twig-suggestion'] = $form['#id'];
}

Die Funktion \Drupal\Core\Render\Element::children($form) gibt ein Array aller untergeordneten Elemente (für ein Formular) zurück, für die die Schlüssel nicht mit # Beginnen.

Dieses Array enthält also die Feldnamen als Elemente. Anschließend iterieren Sie über das Array und fügen das Attribut data-twig-suggestion Und den entsprechenden Wert hinzu. Beachten Sie, dass das Array einige zusätzliche Elemente enthält, die keine Formularfelder sind, und diese auch das neue Attribut und seinen Wert erhalten. Ich glaube nicht, dass dies einen Kollateralschaden darstellt.

Für die Schaltfläche "Senden" ($form['actions']['submit']) Fügen wir das Attribut "manuell" hinzu, da das Feldelement (submit) im Array actions "verschachtelt" ist, also unser vorheriges loop hat das Attribut nicht zum richtigen Element im Array hinzugefügt.

Dann fügen Sie auch diese Funktion hinzu:

function yourTheme_theme_suggestions_input_alter(&$suggestions, array $variables) {
  $element = $variables['element'];
  if (isset($element['#attributes']['data-twig-suggestion'])) {
    $suggestion_suffix = str_replace(['-'], '_', $element['#attributes']['data-twig-suggestion']);
    $suggestions[] = 'input__' . $element['#type'] . '__' . $suggestion_suffix;
  }
}

Hier wird jedes Formulareingabefeld verarbeitet und ein Vorlagenvorschlag basierend auf dem zuvor erstellten Attribut hinzugefügt.

PS: Diese Lösung basiert auf diesem Artikel: Granulieren mit Drupal 8 Formulare .

7