Небольшой баг в загрузке изображений в типе поля Текст html

+10
139

В процессе разработки одного дополнения обнаружил, что загруженные в процессе создания записи картинки не удаляются. Если вы загружаете картинки в поле в процессе редактирования, то с ними все в порядке.

Речь идет о загрузке через эту кнопку и любую подобную в других редакторах.

Изображение

Немного подробностей

При загрузке картинки в процессе добавления новости загрузчик не знает, к какой новости ее привязать. Этой привязкой занимается уже само поле. Вот тут github.com/instantsoft/icms2/blob/0a0dbd62e7dc882925e525a3d75d2a87de287ae5/system/fields/html.php#L256

Но в процессе загрузки, если target_id не известен (а он не известен в момент создания новой записи), движок ставит вместо него 0. Вот тут github.com/instantsoft/icms2/blob/0a0dbd62e7dc882925e525a3d75d2a87de287ae5/system/controllers/images/frontend.php#L169

Решение

Решений я вижу два. А какое пойдет в движок, узнаем позже в коммитах. Выбирайте на вкус. 

Самое короткое, это поправить загрузчик.

Изображение

В файле system\controllers\images\frontend.php заменить

  1. 'target_id' => $this->request->get('target_id', 0)

на

  1. 'target_id' => $this->request->get('target_id', 0) ?: null

Или длиннее, поправить обновление target_id в поле.

Изображение

Для этого в файле system\fields\html.php замените

  1. $model->filterEqual('path', $path)->filterIsNull('target_id');

на

  1. $model->filterEqual('path', $path)
  2. ->filterStart()
  3. ->filterIsNull('target_id')
  4. ->filterOr()
  5. ->filterEqual('target_id',0)
  6. ->filterEnd();

Ждем 2.18.2 :)

Нет комментариев. Ваш будет первым!

Еще от автора

ZПоиск. Другой взгляд на поиск v.1.1.1
Обновленная версия небольшого компонента, который по функционалу повторяет встроенный компонент Поиск.
Группируем наборы v. 1.0.1
Обновление одной моей бесплатной разработки, которая предназначена для группировки наборов.
Запуск instantcms 2 локально в docker
Обновленный docker compose для локального запуска instantcms 2.
🍪Мы используем файлы cookie для работы сайта. Читать подробнее.