Korzystając z modułu akapitów w Drupal 8, próbuję zmienić zachowanie pól formularza zawartych w polu akapitu. Dzięki temu mogę dodawać zachowania, takie jak wywołania zwrotne AJAX, ukrywać pokazywanie innych pól za pomocą stanów itp.
Mogę uzyskać dostęp do pola nadrzędnego akapitu za pomocą tej funkcji:
function hook_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
}
Ale jak uzyskać dostęp do pól w akapicie?
Próbowałem, hook_field_widget_form_alter
ale bezskutecznie.
Jak mam to zrobic?
Uwaga: Nadal jestem całkiem nowy w rozwoju Drupala.
8
paragraphs
bart_88
źródło
źródło
kint($form);
akint($form_id);
to powinno dać ci identyfikator dla hook id id alter, a następnie powinno dać ci ścieżki tablicy dla tego, co chcesz zmienić.Odpowiedzi:
Ponieważ akapity ^ 1.3 możesz użyć hook_field_widget_WIDGET_TYPE_form_alter () (połączyłem wersję 8.2, ponieważ jest dobry komentarz na temat używania hooka ).
Możesz zobaczyć następujący przykład w
modules/contrib/paragraphs/tests/modules/paragraphs_test/paragraphs_test.module
źródło
paragraphs
zamiast tego widżet jest typuentity_reference_paragraphs
./* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
Za pomocą
hook_form_alter
możesz zmienić wszystko w formularzu, nawet rzeczy pochodzące z widżetów. Może łatwo się trochę popsuć i ma tendencję do łatwego psucia się, gdy masz do czynienia z widżetami.Jeśli chcesz zmienić widżety, co możesz zrobić, stwórz własny widżet. Widżety to wtyczki (klasa PHP), dzięki czemu możesz tworzyć własną podklasę, którą posiadasz, i modyfikować ją poprzez całkowite zastąpienie funkcji lub rozszerzenie funkcji.
Widżety używają systemu adnotacji, więc musisz zdefiniować nazwę, identyfikator itp. Jako komentarze nad klasą. Najprostszym sposobem jest po prostu skopiowanie oryginalnego widgetu i zmiana, nadanie mu nowej nazwy i identyfikatora, reszta powinna wyglądać tak, jak powinna.
Pamiętaj, aby wyczyścić pamięć podręczną, aby Drupal znalazł nową wtyczkę.
źródło
Jest na to łatka w kolejce problemów z akapitami .
Dodaje nowe haki:
źródło
hook_field_widget_WIDGET_TYPE_form_alter()
.