Bagaimana cara mengubah perilaku bidang formulir yang terkandung dalam bidang paragraf?

18

Menggunakan modul Paragraphs di Drupal 8, saya mencoba untuk mengubah perilaku bidang formulir yang terkandung dalam bidang paragraf. Ini agar saya dapat menambahkan perilaku seperti callback AJAX, menyembunyikan tampilkan bidang lain menggunakan status dll.

Saya dapat mengakses bidang induk paragraf menggunakan fungsi ini:

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

Tetapi bagaimana saya mengakses bidang di dalam paragraf?

Saya sudah mencoba hook_field_widget_form_altertetapi tidak berhasil.

Bagaimana saya melakukan ini?

Catatan: Saya masih cukup baru untuk pengembangan Drupal.

bart_88
sumber
Coba ini di alter Anda, kint($form);dan kint($form_id);itu akan memberi Anda id untuk alter hook id dan kemudian itu juga akan memberi Anda path array untuk apa yang ingin Anda ubah.
Danny Englander

Jawaban:

14

Sejak paragraf ^ 1.3 Anda dapat menggunakan hook_field_widget_WIDGET_TYPE_form_alter () (saya menautkan versi 8.2 karena ada komentar yang bagus tentang menggunakan hook).

Anda dapat melihat contoh berikut di 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
sumber
6
Perhatikan bahwa jika Anda menggunakan widget "Paragraphs EXPERIMENTAL" alih-alih "Paragraphs Classic", maka jenis widget itu paragraphsbukan entity_reference_paragraphs.
Dalin
1
Beberapa hal berguna (karena tidak mungkin untuk men-debug kait ini): /* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
Dalin
1

Menggunakan hook_form_alterAnda dapat mengubah apa pun dalam formulir, bahkan barang yang berasal dari widget. Ini dapat dengan mudah menjadi sedikit berantakan dan cenderung pecah dengan mudah ketika Anda dipusingkan dengan widget.

Jika Anda ingin mengubah widget apa yang dapat Anda lakukan, buat widget sendiri. Widget adalah plugin (kelas PHP) sehingga Anda dapat membuat sendiri subkelas yang Anda miliki dan mengubahnya baik dengan sepenuhnya menimpa fungsi atau dengan memperluas fungsi.

Widget menggunakan sistem anotasi, jadi Anda perlu mendefinisikan nama, id dll sebagai komentar di atas kelas. Cara termudah adalah dengan menyalin widget asli dan mengubah beri nama dan id baru, sisanya harus seperti yang seharusnya.

Ingatlah untuk menghapus cache untuk membuat Drupal menemukan plugin baru.

googletorp
sumber
-1

Ada tambalan untuk ini dalam antrian masalah Paragraf .

Itu menambah kait baru:

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
sumber
1
Per komentar ini , kait-kait itu tidak ditambahkan untuk mendukung inti hook_field_widget_WIDGET_TYPE_form_alter().
powpow12