Comment puis-je modifier le comportement des champs de formulaire contenus dans le champ de paragraphe?

18

En utilisant le module Paragraphs dans Drupal 8, j'essaie de modifier le comportement des champs de formulaire contenus dans le champ de paragraphe. C'est pour que je puisse ajouter un comportement comme les rappels AJAX, masquer afficher d'autres champs en utilisant des états, etc.

Je peux accéder au champ parent du paragraphe à l'aide de cette fonction:

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

Mais comment accéder aux champs à l'intérieur du paragraphe?

J'ai essayé hook_field_widget_form_altermais en vain.

Comment puis-je faire cela?

Remarque: je suis encore assez nouveau dans le développement Drupal.

bart_88
la source
Essayez ceci dans votre alter, kint($form);et kint($form_id);cela devrait vous donner l'id de l'id du hook alter, puis il devrait également vous donner les chemins de tableau pour ce que vous voulez modifier.
Danny Englander

Réponses:

14

Depuis les paragraphes ^ 1.3, vous pouvez utiliser hook_field_widget_WIDGET_TYPE_form_alter () (j'ai lié la version 8.2 car il y a un bon commentaire sur l'utilisation du hook).

Vous pouvez voir l'exemple suivant dans 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
la source
6
Notez que si vous utilisez le widget "Paragraphs EXPERIMENTAL" au lieu de "Paragraphs Classic", le type de widget est juste à la paragraphsplace de entity_reference_paragraphs.
Dalin
1
Quelques choses utiles (car il est impossible de déboguer ces crochets): /* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
Dalin
1

L'utilisation de hook_form_altervous pourrait modifier quoi que ce soit dans le formulaire, même des éléments provenant de widgets. Il peut facilement devenir un peu salissant et il a tendance à se briser facilement lorsque vous jouez avec des widgets.

Si vous souhaitez modifier les widgets, vous pouvez créer votre propre widget. Les widgets sont des plugins (classe PHP) afin que vous puissiez créer votre propre sous-classe celle que vous avez et modifier soit en remplaçant complètement les fonctions soit en étendant les fonctions.

Les widgets utilisent un système d'annotation, vous devez donc définir le nom, l'identifiant, etc. en tant que commentaires au-dessus de la classe. Le moyen le plus simple consiste simplement à copier le widget d'origine et à le modifier en lui donnant un nouveau nom et un nouvel identifiant, le reste devrait être comme il se doit.

N'oubliez pas de vider le cache pour que Drupal trouve le nouveau plugin.

googletorp
la source