Jak mogę zmienić zachowanie pól formularza zawartych w polu akapitu?

18

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_alterale bezskutecznie.

Jak mam to zrobic?

Uwaga: Nadal jestem całkiem nowy w rozwoju Drupala.

bart_88
źródło
Wypróbuj to w swoim alter, kint($form);a kint($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ć.
Danny Englander,

Odpowiedzi:

14

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

/**  
 * 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
źródło
6
Pamiętaj, że jeśli używasz widżetu „Akapity EKSPERYMENTALNE” zamiast „Akapitów klasycznych”, to paragraphszamiast tego widżet jest typu entity_reference_paragraphs.
Dalin
1
Kilka przydatnych rzeczy (ponieważ niemożliwe jest debugowanie tych haków): /* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
Dalin
1

Za pomocą hook_form_altermoż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ę.

googletorp
źródło
-1

Jest na to łatka w kolejce problemów z akapitami .

Dodaje nowe haki:

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
źródło
1
Zgodnie z tym komentarzem te haki nie zostały dodane na korzyść rdzeni hook_field_widget_WIDGET_TYPE_form_alter().
powpow12