Drupal 7删除节点不会删除所有关联文件

时间:2011-11-03 19:04:26

标签: drupal drupal-7

当通过标准Drupal创建节点时,上传一个文件。

稍后,通过以下方法将2个文件添加到节点:

file_save(std Class)
file_usage_add(std Class, 'module', 'node', $node_id)

最后,我最终在file_managed和file_usage中有3个条目。

问题:当我通过标准Drupal删除节点时,删除在初始节点创建期间添加的文件,但不删除稍后添加的2。这些文件保留在两个表中,并且物理地保留在磁盘上。

是否有一些标志被设置为即使节点被删除也会保留文件?如果是,那么这个标志在哪里,以及如何正确设置它(与节点一起删除)?

2 个答案:

答案 0 :(得分:2)

答案在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');
}

答案 1 :(得分:1)

您可以强制删除文件。

file_delete($old_file, TRUE);

但请确保使用以下命令在其他节点中不使用此文件:

file_usage_list($file);