2011-11-03 100 views
1

当节点通过标准Drupal创建时,一个文件会被上传。Drupal 7删除节点不会删除所有相关文件

后来,2个文件通过添加到节点:

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

在结束时,我结束了在file_managed和file_usage 3项。

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

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

回答

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

您可以强制文件的删除。

file_delete($old_file, TRUE); 

但要确保该文件未在其他节点使用使用:

file_usage_list($file); 
+0

具有垃圾链接 –

+0

@RimuAtkinson,THX。我删除了链接。看起来像链接的网站被黑了。 – milkovsky

+0

我删除了我的投票:) –