ในที่สุดฉันก็บรรลุสิ่งที่ฉันต้องการดังต่อไปนี้
mymodule/mymodule.module
ใช้ Drupal\Core\Form\FormStateInterface;
ใช้ Drupal\mymodule\Alter\FieldWidget\BlockImagesParagraph;
/**
* ใช้ hook_field_widget_single_element_WIDGET_TYPE_form_alter()
*/
ฟังก์ชัน mymodule_field_widget_single_element_entity_reference_paragraphs_form_alter(&$element, FormStateInterface $form_state, $context) {
ถ้า ($องค์ประกอบ['#paragraph_type'] == 'block_images') {
\Drupal::service('class_resolver')
->getInstanceFromDefinition(BlockImagesParagraph::คลาส)
->alterFieldWidget($องค์ประกอบ, $form_state, $context);
}
}
mymodule/src/Alter/FieldWidget
เนมสเปซ Drupal\mymodule\Alter\FieldWidget;
ใช้ Drupal\Core\Form\FormStateInterface;
/**
* แก้ไขย่อหน้า block_images
*/
BlockImagesParagraph ชั้นสุดท้าย {
/**
* แก้ไขวิดเจ็ตฟิลด์
*
* @param อาร์เรย์ $องค์ประกอบ
* องค์ประกอบแบบฟอร์มวิดเจ็ตฟิลด์
* @param \Drupal\Core\Form\FormStateInterface $form_state
* สถานะแบบฟอร์ม
* @param อาร์เรย์ $context
* อาร์เรย์เชื่อมโยงที่แสดงถึงบริบท
*/
ฟังก์ชั่นสาธารณะ alterFieldWidget (อาร์เรย์ & $ องค์ประกอบ, FormStateInterface $ form_state, อาร์เรย์ $ บริบท) {
$widget = &$element['subform']['image']['widget'];
foreach ($widget เป็น $key => &$value) {
ถ้า (!is_int($key)) {
ดำเนินต่อ;
}
$value['#กระบวนการ'][] = [
'Drupal\mymodule\Alter\FieldWidget\BlockImagesParagraph',
'กระบวนการรูปภาพวิดเจ็ต'
];
}
}
/**
* ประมวลผลวิดเจ็ตรูปภาพ
*
* @param อาร์เรย์ $องค์ประกอบ
* องค์ประกอบแบบฟอร์มวิดเจ็ตฟิลด์
* @param \Drupal\Core\Form\FormStateInterface $form_state
* สถานะแบบฟอร์ม
* @param อาร์เรย์ $form
* อาร์เรย์เชื่อมโยงที่เป็นตัวแทนของแบบฟอร์ม
*/
ฟังก์ชั่นสาธารณะคงที่ processImageWidget (องค์ประกอบ $ อาร์เรย์, FormStateInterface $ form_state, อาร์เรย์ $ แบบฟอร์ม) {
ถ้า (isset($element['title'])) {
$element['title']['#title'] = t('คำบรรยาย');
}
ส่งคืนองค์ประกอบ $;
}
}