¿Cómo modifico el comportamiento de los campos de formulario contenidos en el campo de párrafo?

18

Utilizando el módulo Párrafos en Drupal 8, intento alterar el comportamiento de los campos de formulario contenidos en el campo de párrafo. Esto es para que pueda agregar comportamiento como devoluciones de llamada AJAX, ocultar mostrar otros campos usando estados, etc.

Puedo acceder al campo padre de párrafo usando esta función:

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

Pero, ¿cómo accedo a los campos dentro del párrafo?

Lo he intentado hook_field_widget_form_alterpero fue en vano.

¿Cómo hago esto?

Nota: Todavía soy bastante nuevo en el desarrollo de Drupal.

bart_88
fuente
Intente esto en su alter, kint($form);y kint($form_id);eso debería darle la identificación para la alteración de la identificación del gancho y luego también debería darle las rutas de la matriz para lo que desea alterar.
Danny Englander

Respuestas:

14

Desde los párrafos ^ 1.3 puede usar hook_field_widget_WIDGET_TYPE_form_alter () ( vinculé la versión 8.2 porque hay un buen comentario sobre el uso del gancho).

Puedes ver el siguiente ejemplo en 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
fuente
66
Tenga en cuenta que si está utilizando el widget "Párrafos EXPERIMENTALES" en lugar de "Párrafos clásicos", entonces el tipo de widget es simplemente en paragraphslugar de entity_reference_paragraphs.
Dalin
1
Algunas cosas útiles (porque es imposible depurar estos ganchos): /* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
Dalin
1

Usarlo hook_form_alterpodría alterar cualquier cosa en el formulario, incluso cosas que provienen de widgets. Puede ponerse un poco desordenado y tiende a romperse fácilmente cuando juegas con widgets.

Si quieres alterar los widgets, lo que puedes hacer es crear tu propio widget. Los widgets son complementos (clase PHP), por lo que puede hacer que su propia subclase sea la que tiene y modificarla sobrescribiendo completamente las funciones o extendiendo las funciones.

Los widgets utilizan el sistema de anotación, por lo que debe definir el nombre, la identificación, etc. como comentarios sobre la clase La forma más fácil es simplemente copiar el widget original y luego darle un nuevo nombre e identificación, el resto debería ser como debe ser.

Recuerde borrar el caché para que Drupal encuentre el nuevo complemento.

googletorp
fuente