Mit dem Absatzmodul in Drupal 8 versuche ich, das Verhalten der Formularfelder im Absatzfeld zu ändern. Auf diese Weise kann ich Verhalten wie AJAX-Rückrufe hinzufügen, andere Felder mithilfe von Status ausblenden usw.
Mit dieser Funktion kann ich auf das übergeordnete Absatzfeld zugreifen:
function hook_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
}
Aber wie greife ich auf die Felder im Absatz zu?
Ich habe es hook_field_widget_form_alter
aber erfolglos versucht .
Wie mache ich das?
Hinweis: Ich bin noch ziemlich neu in der Drupal-Entwicklung.
8
paragraphs
bart_88
quelle
quelle
kint($form);
undkint($form_id);
das sollte Ihnen die ID für die Hook-ID ändern und dann sollte es Ihnen auch die Array-Pfade für das geben, was Sie ändern möchten.Antworten:
Seit den Absätzen ^ 1.3 können Sie hook_field_widget_WIDGET_TYPE_form_alter () verwenden (ich habe die 8.2-Version verlinkt, weil es einen guten Kommentar zur Verwendung des Hooks gibt).
Sie können das folgende Beispiel in sehen
modules/contrib/paragraphs/tests/modules/paragraphs_test/paragraphs_test.module
quelle
paragraphs
anstelle von istentity_reference_paragraphs
./* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
Mit können
hook_form_alter
Sie alles in der Form ändern, auch Dinge, die von Widgets stammen. Es kann leicht etwas chaotisch werden und es kann leicht brechen, wenn Sie mit Widgets herumspielen.Wenn Sie Widgets ändern möchten, was Sie tun können, erstellen Sie Ihr eigenes Widget. Widgets sind Plugins (PHP-Klasse), mit denen Sie Ihre eigene Unterklasse erstellen und entweder durch vollständiges Überschreiben von Funktionen oder durch Erweitern von Funktionen ändern können.
Widgets verwenden ein Anmerkungssystem, daher müssen Sie Name, ID usw. als Kommentare über der Klasse definieren. Am einfachsten ist es, das ursprüngliche Widget zu kopieren und zu ändern und ihm einen neuen Namen und eine neue ID zu geben. Der Rest sollte so sein, wie er sein muss.
Denken Sie daran, den Cache zu leeren, damit Drupal das neue Plugin findet.
quelle
Es gibt einen Patch dafür in der Absatz-Warteschlange .
Es werden neue Hooks hinzugefügt:
quelle
hook_field_widget_WIDGET_TYPE_form_alter()
.