Wie ändere ich das Verhalten der Formularfelder im Absatzfeld?

18

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_alteraber erfolglos versucht .

Wie mache ich das?

Hinweis: Ich bin noch ziemlich neu in der Drupal-Entwicklung.

bart_88
quelle
Versuchen Sie dies in Ihrer Änderung, kint($form);und kint($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.
Danny Englander

Antworten:

14

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

/**  
 * Implements hook_field_widget_WIDGET_TYPE_form_alter().  
 */  
function paragraphs_test_field_widget_entity_reference_paragraphs_form_alter(&$element, &$form_state, $context) {
  if ($element['#paragraph_type'] == 'altered_paragraph') {
    $element['subform']['field_text']['widget'][0]['#title'] = 'Altered title';
  }
}
Lars Jendrzejewski
quelle
6
Beachten Sie, dass wenn Sie das Widget "Absätze EXPERIMENTELL" anstelle von "Absätze Klassisch" verwenden, der Widget-Typ einfach paragraphsanstelle von ist entity_reference_paragraphs.
Dalin
1
Einige nützliche Dinge (weil es unmöglich ist, diese Hooks zu debuggen): /* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
Dalin
1

Mit können hook_form_alterSie 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.

googletorp
quelle
-1

Es gibt einen Patch dafür in der Absatz-Warteschlange .

Es werden neue Hooks hinzugefügt:

hook_form_paragraphs_subform_alter()
hook_form_paragraphs_subform_TYPE_alter()
hook_form_paragraphs_subform_WIDGET_alter()
hook_form_paragraphs_subform_WIDGET_TYPE_alter()
Jonathan
quelle
1
Gemäß diesem Kommentar wurden diese Haken nicht zugunsten der Kerne hinzugefügt hook_field_widget_WIDGET_TYPE_form_alter().
Powpow12