Хабаровск, ул. Волочаевская 181Б, офис 413/4

Вы здесь

Drupal 7 импорт изображений с помощью Feeds

16.10.2016

Итак проблема:

Если вы настраиваете импорт материалов через модуль Feeds и вам необходимо импортировать изображения, Вы, возможно, предварительно загружаете изображения на сервер. Так вот, если загружать изображения в общую папку (/sites/default/files/all/) или другую папку, то при импорте (а именно при создании материалов) изображения будут продублированы, и возможно несколько раз - для каждого материала использующего данное изображение.

Это происходит из-за того что код проверяющий папку назначения для файла возвращает public: вместо public:// и не проходит проверка на их равенство и выполняется копирование файла. FeedsPairser.inc 354

Решение:

  • Идем в настройки типа материалов который мы импортируем, и указываем папку назначения (например 1c_images)

1_0.png

  • Идем в настройки импортера Feeds для этого материала, на вкладку mapping и просто импортируем это изображение
  • Прописать папку назначения для импортируемого изображения 2 способа

  1. В файле выгрузки для поля. Т.е. в поле значение у нас будет начинаться public://название_изображения.

  2. С помощью модуля Feeds Tamper. Ставим модуль идем на новую вкладку в настройках нашего импортера (Feeds Tamper). Ищем поле с изображением и создаем 2 правила: trim – убираем пробелы и Rewrite – сюда пишем public://название_папки/токен_поля

  • При первоначальной выгрузке изображения помещаем в эту папку.

Теперь мы сначала загружаем изображения в папку назначения, а далее используем именно это изображение во всех материалах, которые ссылаются на него в выгрузке. Никаких дублей.

И небольшой бонус напоследок, способ очистить множественное поле при импорте: когда делаем импорт в множественное поле (например галерея изображений), если у нас поменяются данные в выгрузке к уже существующему материалу, тогда старые значения полей останутся, а новые допишутся в конец. Это не всегда правильно (а возможно и вовсе неверно), чтобы использовать только новые значения, сначала записываем в поле пустое значение (в маппинге полей), затем в это же поле значение из выгрузки. Все - сначала чистим, потом пишем новые.