Вы здесь

Как выполнить код после загрузки файла в поле?

0

Использую модуль EXIF для импорта тегов DateTimeOriginal из картинки, но он отрабатывает только при сохранении ноды с картинкой, что для меня поздновато - хотелось бы видеть эту дату (и использовать для заполнения других полей с помощью JS) на этапе заполнения формы добавления ноды, как только пользователь выбрал и загрузил картинку.
Я заметил, что после загрузки картинки рядом с ней появляется имя файла и его размер, нашел, что это жёстко закодировано в core/modules/image/image.field.inc, добавил прямо туда в порядке эксперимента вызов exif_read_data() и добавил вывод нужного мне тега после размера файла - всё работает.
Но мне не хотелось бы теперь тащить правленый мной файл ядра через все апдейты, а хотелось бы поместить мой код в какой-то правильный хук, только вот не могу сообразить в какой.
Кроме того, мне было бы удобнее, если бы значение нужного мне экзиф-тега не просто отображалось в форме рядом с размером файла, а становилось бы легко доступно js-скрипту, который должен отрабатывать после загрузки пользователем файла.
Буду премного благодарен за любые советы как это сделать правильным и стандартным для Друпала образом, а не грубым хаком как у меня сейчас.

Версия Drupal: 
8.x
Категория: 
Field API
Вопрос задан 23.07.2017 - 09:57

Ответы

1
/**
 * Implements hook_preprocess_image_widget().
 */
function HOOK_preprocess_image_widget(&$variables) {

}
Ответ дан 23.07.2017 - 10:45
Аватар пользователя Chi
Chi
68

Спасибо, работает!
Другие предложенные варианты тоже наверняка работают, но этот подкупил своей простотой ;)
Перенес свой код из ядра в свой модуль.
Теперь осталось научиться запускать свою js-функцию по событию загрузки картинки - изучаю AJAX Callback Commands ;)

Комментарий оставлен 25.07.2017 - 13:49
0

Создать свой виджет для поля типа image, класс виджет отнаследовать от дефолтного виджета в модуле image, прописать в своем виджет всю кастомную логику

Ответ дан 23.07.2017 - 20:39

Спасибо, решение показалось слишком сложным для простой задачи.

Комментарий оставлен 25.07.2017 - 13:50
0

Делал подобное недавно https://boolboost.com/blog/74.

В process будет ваш ход.

Правда придётся немного адаптировать под d8.

Ответ дан 24.07.2017 - 11:56

Спасибо, внимательно изучил, но решил пойти путём c hook_preprocess_image_widget.

Комментарий оставлен 25.07.2017 - 13:51