Tôi muốn thêm các trường tùy thuộc vào tùy chọn đầu tiên được chọn. Tôi cũng đã tạo một biểu mẫu có hành vi tương tự nhưng đó không phải là tiện ích trường.
Tôi đã sử dụng mô-đun này làm ví dụ để tạo biểu mẫu
Tôi không chắc liệu cách tôi triển khai hành vi AJAX này có khác trong một tiện ích hay không.
Hành vi của biểu mẫu này có thể được triển khai trong tiện ích trường không? Tôi đang cố gắng tìm kiếm các ví dụ về các tiện ích trường cụ thể triển khai điều này nhưng tôi vẫn chưa tìm thấy bất kỳ thứ gì có thể trợ giúp `
hàm công khai formElement(FieldItemListInterface $items, $delta, mảng $element, mảng &$form, FormStateInterface $form_state) {
$value = isset($items[$delta]->value) ? $items[$delta]->value : '';
phần tử $ = [];
// Tập hợp số lượng tên trong mẫu đã có.
$num_names = $form_state->get('num_names');
// Chúng ta phải đảm bảo rằng có ít nhất một trường tên.
nếu ($num_names === NULL) {
$tên_trường = $form_state->set('num_names', 1);
$num_names = 1;
}
$element['breakpoints'] = [
'#type' => 'chọn',
'#title' => $this->t('Nhóm điểm ngắt'),
'#options' => $this->getBreakpointsGroups(),
'#default_value' => $value,
'#empty_option' => $this->t('-Chọn nhóm điểm dừng-'),
];
$element['images_fieldset'] = [
'#type' => 'bộ trường',
'#title' => $this->t('Tải hình ảnh cho từng điểm dừng'),
'#prefix' => '<div id="breakpoint-wrapper">',
'#suffix' => '</div>',
];
for ($i = 0; $i < $num_names; $i++) {
$element['images_fieldset']['image'][$i] = [
'#type' => 'hình ảnh',
'#title' => $this->t('Hình ảnh'),
'#name' => "Tên"
];
}
$element['images_fieldset']['submit'] = [
'#type' => 'gửi',
'#title' => 'Gửi',
'#submit' => ['::submitForm'],
'#value' => $this->t("gửi"),
'#ajax' => [
'gọi lại' => '::loadImageFields',
'trình bao bọc' => 'trình bao bọc điểm dừng',
],
];
trả về ['giá trị' => $element];
}
/**
* Trả về danh sách các điểm dừng.
*
* @return mảng
* Một mảng kết hợp các điểm dừng, phù hợp để sử dụng làm biểu mẫu
* tùy chọn.
*/
chức năng được bảo vệ getBreakpointsGroups() {
$breakpoints = \Drupal::service('breakpoint.manager')->getGroups();
$breakpoint_names = array_keys($breakpoints);
$breakpoint_group = mảng();
foreach ($breakpoint_names là $name) {
$breakpoint_group += [$name => $name];
}
trả về $breakpoint_group;
}
hàm được bảo vệ submitForm($form, &$form_state) {
$state = $form_state->getTriggeringElement();
$breakpoint= $state['#value'];
$mảng = mảng();
$breakpoint = \Drupal::service('breakpoint.manager')->getBreakpointsByGroup($breakpoint);
$breakpoints_name = array_keys($breakpoint);
foreach ($breakpoints_name as $breakpoint_definition) {
$mediaQuery = $breakpoint[$breakpoint_definition]->getMediaQuery();
array_push($array,$mediaQuery);
}
$name_field = $form_state->get('num_names');
$form_state->set('num_names',count($array));
$form_state->setRebuild();
}
hàm công khai loadImageFields(mảng $form, FormStateInterface $form_state) {
trả về $form['images_fieldset'];
}
}