На данный момент:
- Я переопределил плагин ImageWidget и использую метод formMultipleElements для добавления изображений в поле.
- Это работает при перезагрузке страницы или при загрузке нового изображения с использованием функций по умолчанию.
Что я пробовал:
- В форму добавлена кнопка AJAX.
- В обратном вызове кнопки я пытаюсь обновить поле изображения вернув измененный элемент из formMultipleElements.
- Пытался сохранить данные с помощью $form_state и обновить значение поля с помощью #default_value.
Когда я нажимаю кнопку, поле изображения исчезает или не обновляется как ожидаемо.
Изображения, которые я добавляю через formMultipleElements, появляются только после перезагрузки страницы или при загрузке нового изображения через пользовательский интерфейс.
Что? Я хочу:
- При нажатии кнопки в поле изображения должны быть добавлены изображения (с определенными идентификаторами).
- Изображения должны сразу появиться в форме (например, с их предварительным просмотром).
- Поле должно корректно сохранять эти изображения при открытии формы узла. отправлено.
Вот часть моего кода, в которой я добавляю изображения:
Код: Выделить всё
$elements = parent::formMultipleElements($items, $form, $form_state);
if (!$form_state->isRebuilding()) {
$uniq_id = '675d4801b3b4a';
}
$query = \Drupal::database()->select('tmp_image', 'ti')->fields('ti', ['fid']);
$res = $query->condition('uuid', $uniq_id)
->execute()
->fetchCol('fid'); // Add files to the field.
$inputElem = $elements[$elements['#file_upload_delta']];
foreach ($res as $file_id) {
$newElem = $inputElem;
$newElem['#default_value'] = [
'target_id' => $file_id,
'alt' => '',
'title' => '',
'width' => 768,
'height' => 1024,
];
$elements[$elements['#file_upload_delta'] + 1] = $newElem;
$elements['#file_upload_delta']++;
}
return $elements;
Подробнее здесь: https://stackoverflow.com/questions/793 ... diting-for
Мобильная версия