Como altero o comportamento dos campos de formulário contidos no campo de parágrafo?

18

Usando o módulo Parágrafos no Drupal 8, estou tentando alterar o comportamento dos campos do formulário contidos no campo Parágrafo. Isso é para que eu possa adicionar comportamentos como retornos de chamada AJAX, ocultar mostrar outros campos usando estados etc.

Eu posso acessar o campo pai do parágrafo usando esta função:

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

Mas como faço para acessar os campos dentro do parágrafo?

Eu tentei, hook_field_widget_form_altermas sem sucesso.

Como eu faço isso?

Nota: Ainda sou bastante novo no desenvolvimento do Drupal.

bart_88
fonte
Tente isso no seu alter, kint($form);e kint($form_id);isso deve fornecer o ID para o hook id alter e, em seguida, também deve fornecer os caminhos do array para o que você deseja alterar.
Danny Englander

Respostas:

14

Desde os parágrafos ^ 1.3, você pode usar hook_field_widget_WIDGET_TYPE_form_alter () (vinculei a versão 8.2 porque há um bom comentário sobre o uso do hook).

Você pode ver o exemplo a seguir em 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
fonte
6
Observe que se você estiver usando o widget "Parágrafos EXPERIMENTAL" em vez de "Parágrafo clássico", o tipo de widget será apenas em paragraphsvez de entity_reference_paragraphs.
Dalin
1
Algumas coisas úteis (porque é impossível depurar esses ganchos): /* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
Dalin
1

O uso de hook_form_altervocê pode alterar qualquer coisa no formulário, até coisas provenientes de widgets. Ele pode facilmente ficar um pouco confuso e tende a quebrar facilmente quando você mexe com widgets.

Se você deseja alterar widgets, o que você pode fazer é criar seu próprio widget. Os widgets são plugins (classe PHP), para que você possa criar sua própria subclasse e alterar, substituindo completamente as funções ou estendendo as funções.

Os widgets usam o sistema de anotações, portanto, você precisa definir nome, ID etc. como comentários acima da classe. A maneira mais fácil é simplesmente copiar o widget original e alterar, dar-lhe um novo nome e ID, o resto deve ser o que precisa ser.

Lembre-se de limpar o cache para fazer o Drupal encontrar o novo plugin.

googletorp
fonte
-1

Existe um patch para isso na fila de problemas de parágrafos .

Adiciona novos ganchos:

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
fonte
1
Por esse comentário , esses ganchos não foram adicionados em favor dos principais hook_field_widget_WIDGET_TYPE_form_alter().
powpow12 28/02