当通过标准Drupal创建节点时,上传一个文件。
稍后,通过以下方法将2个文件添加到节点:
file_save(std Class)
file_usage_add(std Class, 'module', 'node', $node_id)
最后,我最终在file_managed和file_usage中有3个条目。
问题:当我通过标准Drupal删除节点时,删除在初始节点创建期间添加的文件,但不删除稍后添加的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);