Cách tôi nghĩ để cập nhật danh sách thả xuống của trường nút sẽ không hoạt động. Điều này nên được thực hiện theo cách này:
https://codimth.com/blog/web/drupal/dependent-select-dropdowns-using-ajax-node-addedit-form-drupal-8-9
<?php
sử dụng Drupal\Core\Form\FormStateInterface;
sử dụng Drupal\Core\Url;
/**
* Triển khai hook_form_alter().
*/
hàm MODULENAME_form_alter(&$form, FormStateInterface $form_state, $form_id)
{
if ($form_id == 'node_article_form' || $form_id == 'node_article_edit_form') {
// thêm trình bao bọc để chọn 2
$form['field_select2']['#prefix'] = '<div id="select2-wrapper">';
$form['field_select2']['#suffix'] = '</div>';
// thêm ajax để chọn 1
$form['field_select1']['widget']['#ajax'] = [
'gọi lại' => 'gọi lại_field_select1_trigger',
'trình bao bọc' => 'select2-trình bao bọc',
'sự kiện' => 'thay đổi',
'tiến độ' => [
'gõ' => 'đập',
'tin nhắn' => t('Đang tìm nạp nội dung...'),
],
];
// lấy 2 tùy chọn trong form chỉnh sửa
$field_select1_value = $form_state->getValue('field_select1');
if ($form_id == 'node_article_edit_form' && !$field_select1_value) {
$field_select1_edit_value = isset($form['field_select1']['widget']['#default_value'][0]) ? $form['field_select1']['widget']['#default_value'][0] : null;
$form['field_select2']['widget']['#options'] = getSelect2Options($field_select1_edit_value);
}
}
}
/**
* @param mảng $form
* @param $form_state
* @return hỗn hợp
*/
hàm callback_field_select1_trigger(mảng $form, $form_state)
{
$field_select1_value = $form_state->getValue('field_select1');
if (!empty($field_select1_value)) {
$select1_value = $field_select1_value[0]['target_id'];
$form['field_select2']['widget']['#options'] = getSelect2Options($select1_value);
} khác {
$form['field_select2']['widget']['#options'] = getAllSelect2Options();
}
trả về $form['field_select2'];
}
/**
* @param $select1_value
* @return mảng
*/
hàm getSelect2Options($select1_value)
{
$query = \Drupal::entityQuery('taxonomy_term');
$query->condition('vid', "select2_term");
$query->condition('field_select1.0.target_id', $select1_value);
$tids = $query->execute();
$terms = \Drupal\taxonomy\Entity\Term::loadMultiple($tids);
tùy chọn $ = [];
$options['_none'] = t('- Bất kỳ -');
foreach ($terms as $key => $term) {
$options[$key] = $term->name->value;
}
trả lại tùy chọn $;
}
/**
* @return mảng
*/
hàm getAllSelect2Options()
{
$query = \Drupal::entityQuery('taxonomy_term');
$query->condition('vid', "select2_term");
$tids = $query->execute();
$terms = \Drupal\taxonomy\Entity\Term::loadMultiple($tids);
tùy chọn $ = [];
$options['_none'] = t('- Bất kỳ -');
foreach ($terms as $key => $term) {
$options[$key] = $term->name->value;
}
trả lại tùy chọn $;
}
// ví dụ về cách lấy tùy chọn nếu chọn 1 là nhiều trường
$sselectedItems = [];
$default_values = $form['field_select1']['widget']['#default_value'];
nếu ($default_values != NULL) {
foreach ($default_values as $key => $value) {
nếu ($giá trị != 0) {
$sselectedItems[$value] = $value;
}
}
}
nếu (đếm($tab) > 0) {
$form['field_select2']['widget']['#options'] = getSelect2Options($selectedItems);
} khác {
$form['field_select2']['widget']['#options'] = getAllSelect2Options();
}