Сохранение медиа файлов после удаления последней связи с материалами

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

Вот хотя бы две:

  • SEO-шникам важно, чтобы картинки однажды попавшие в индекс от туда не пропадали.
  • Возможно картинку нужно будет использовать в другом месте, в другое время или же требуется «подключить» к другому материалу, а в данной статье связь требуется убрать.

При удалении файла/изображения из поля, во время сохранения материала, связь будет удалена, а файл стерт. Поля файла/изображения при каждой загрузке даже одного и того же файла создают независимую запись в базе данных и файл с новым именем. Это приводит к тому, что файл всегда связан только с одной публикацией (или entity). При его удалении из поля, Drupal удаляет последнюю его связь и сам файл с диска.

Многократное использование одних и тех же файлов/картинок

Среди 3d part модулей есть хорошее решение для управления медиа-файлами плагин media, которое позволяет многократно прикреплять один и тот же файл к разным сущностям, ну и много ещё чего.

К нему можно еще добавить плагин media_library, который позволяет маркировать файлы как часть медиа-библиотеки. В объекте file появляется соответствующее свойство —

это признак того, что файл добавлен в библиотеку.

Было бы удачно, если бы при этом файлы, добавленные в библиотеку, не удалялись, когда пропадает последняя связь. Но в drupal 7 нельзя зацепиться за функцию удаления в том месте, где решается можно ли удалять файл или ещё нет (функция file_delete в /includes/file.inc).

Обходим удаление файлов

Пусть мы установили плагины media, media_library. Мы можем ставить флажок — library, но проблема в том, что нужна ещё одна дополнительная связь, которая бы удерживала файл от удаления.

Вы можете вручную прикреплять все нужные файлы к какой-то специальной публикации. Это нудно и не удобно. Но это не потребует от вас навыков программирования.

Второй путь — автоматизировать первый вариант — т.е. написать плагин, который бы все файлы, получающие флаг «library», подключал дополнительно к какой то системной entity и отключал бы  от неё при сбрасывании этого флага. Требует некоторого времени, но было бы здорово иметь такой плагин, т.к. это самый правильный путь.

Есть и третий путь — это немного пропатчить /includes/file.inc, чтобы добавить проверку на то, что файл включен в библиотеку. Путь не очень хороший, но для седьмой версии Друпала подойдет, т.к. обновляется ядро уже не часто, а патч добавляет лишь несколько строк.

Мало букафф? Читайте есчо !

Программно устанавливаем значения настроек на страницах, созданных Config Pages

Ноябрь 22, 2018 г.

Модуль Config Pages позволяет создавать страницы конфигурации для вашего модуля, всего сайта, или может быть просто одного из разделов сайта. Потом эти значения можно читать из программы и использовать так, как вам требуется. Но API Config Pages не содержит ...

Читать

Отсутствующие переводы в tmgmt

Сентябрь 26, 2024 г.

При не верной настройке провайдера переводов, может случаться следующая проблема - часть текстовых полей полностью или частично оказывается не переведена. ...

Читать

Как вскипятить воду

Март 11, 2024 г.

В большинстве случаев, вам потребуется нагреть воду до 100 градусов (по шкале Цельсия), чтобы она закипела. В домашних условиях - возьмите ёмкость ...

Читать

Превышение лимитов памяти при запросе перевода в модуле tmgmt

Октябрь 1, 2024 г.

Это проблема рекурсии при сборе информации о статье. Модуль сканирует ссылочные поля (reference entity fields) и может попасть в своеобразную рекурсивную петлю. К примеру, статья ссылается на параграф, а тот ссылается на эту же статью. Т.к. глубина ...

Читать
 

Комментарии к «Сохранение медиа файлов после удаления последней связи с материалами»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: