#drupal #drupal-7
#drupal #drupal-7
Вопрос:
Один файл загружается при создании узла с помощью стандартного Drupal.
Позже в узел добавляются 2 файла с помощью:
file_save(std Class)
file_usage_add(std Class, 'module', 'node', $node_id)
В конце я получаю 3 записи в file_managed и file_usage.
Проблема: когда я удаляю узел с помощью стандартного Drupal, удаляется файл, который был добавлен во время первоначального создания узла, но не 2, которые были добавлены позже. Эти файлы остаются как в таблицах, так и физически на диске.
Есть ли какой-либо флаг, который устанавливается для сохранения файлов, даже если узел удален? Если да, то где находится этот флаг и как мне правильно его установить (для удаления вместе с узлом)?
Ответ №1:
Ответ находится в file_delete()
функции, см. Этот комментарий:
// Если какой-либо модуль все еще имеет запись об использовании в таблице file_usage, файл
// не будет удален
Поскольку ваш модуль объявил о заинтересованности в файле, используя file_usage_add()
его, он не будет удален, если ваш модуль явно не скажет, что это нормально.
Вы можете либо удалить вызов file_usage_add()
, либо реализовать hook_file_delete()
и использовать file_usage_delete()
, чтобы гарантировать, что файл может быть удален:
function mymodule_file_delete($file) {
file_usage_delete($file, 'mymodule');
}
Ответ №2:
Вы можете принудительно удалить файл.
file_delete($old_file, TRUE);
Но убедитесь, что этот файл не используется в других узлах с помощью:
file_usage_list($file);
Комментарии:
1. содержит спам-ссылку
2. @RimuAtkinson, спасибо. Я удалил ссылку. Похоже, что связанный веб-сайт был взломан.