Как программно добавлять изображения по их идентификатору в форму создания/редактирования узла в Drupal 8 при нажатии кнPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как программно добавлять изображения по их идентификатору в форму создания/редактирования узла в Drupal 8 при нажатии кн

Сообщение Anonymous »

Я разрабатываю собственное решение в Drupal 8, в котором мне нужно программно добавлять изображения (по их идентификатору) в поле изображения в форме создания/редактирования узла.
На данный момент:
  • Я переопределил плагин ImageWidget и использую метод formMultipleElements для добавления изображений в поле.
  • Это работает при перезагрузке страницы или при загрузке нового изображения с использованием функций по умолчанию.
Однако мне нужно, чтобы изображения добавлялись в поле при нажатии кнопки AJAX без перезагрузки страницы.
Что я пробовал:
  • В форму добавлена ​​кнопка 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;
Как правильно обновить поле изображения через AJAX, чтобы добавленные изображения отображались без перезагрузки страницы и сохранялись при отправке формы??

Подробнее здесь: https://stackoverflow.com/questions/793 ... diting-for
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»