Come posso modificare il comportamento dei campi modulo contenuti nel campo paragrafo?


18

Utilizzando il modulo Paragrafi in Drupal 8, sto tentando di modificare il comportamento dei campi modulo contenuti nel campo paragrafo. Questo è così posso aggiungere comportamenti come callback AJAX, nascondere mostrare altri campi usando stati ecc.

Posso accedere al campo principale del paragrafo usando questa funzione:

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

Ma come accedo ai campi all'interno del paragrafo?

Ho provato hook_field_widget_form_alterma senza successo .

Come faccio a fare questo?

Nota: sono ancora abbastanza nuovo nello sviluppo di Drupal.


Prova questo nel tuo alter, kint($form);e kint($form_id);questo dovrebbe darti l'id per l'alter id di hook e quindi dovrebbe anche darti i percorsi dell'array per quello che vuoi modificare.
Danny Englander,

Risposte:


14

Dal paragrafo ^ 1.3 puoi usare hook_field_widget_WIDGET_TYPE_form_alter () (ho collegato la versione 8.2 perché c'è un buon commento sull'uso dell'hook).

Puoi vedere il seguente esempio in 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';
  }
}

6
Nota che se stai usando il widget "Paragrafi SPERIMENTALI" invece di "Paragrafi classici", il tipo di widget è proprio paragraphsinvece di entity_reference_paragraphs.
Dalin,

1
Alcune cose utili (perché è impossibile eseguire il debug di questi hook): /* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
Dalin

1

L'uso di hook_form_alterte potrebbe alterare qualsiasi cosa nel modulo, anche cose provenienti da widget. Può facilmente diventare un po 'disordinato e tende a rompersi facilmente quando si scherza con i widget.

Se vuoi modificare i widget, puoi fare il tuo widget. I widget sono plugin (classe PHP), quindi puoi creare la tua sottoclasse personale e modificarla sostituendo completamente le funzioni o estendendole.

I widget utilizzano il sistema di annotazione, quindi è necessario definire nome, ID, ecc. Come commenti sopra la classe. Il modo più semplice è semplicemente copiare il widget originale e modificarlo con un nuovo nome e ID, il resto dovrebbe essere come deve essere.

Ricorda di cancellare la cache per far trovare a Drupal il nuovo plugin.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.