我有一个附加到内容类型的cck FileField。当我从节点中删除文件时,我想删除对该文件的引用,但将该文件保留在服务器上。这是因为我们在网站上也使用IMCE,其他项目可能会引用图像。你知道这是否可能吗?
答案 0 :(得分:2)
从这里查看FileField_delete中的代码:
function field_file_delete($file, $force = FALSE) {
$file = (object)$file;
// If any module returns a value from the reference hook, the
// file will not be deleted from Drupal, but file_delete will
// return a populated array that tests as TRUE.
if (!$force && $references = module_invoke_all('file_references', $file)) {
$references = array_filter($references); // only keep positive values
if (!empty($references)) {
return $references;
}
}
看起来hook_file_references可能会帮助您。但是我看不到使用这个钩子的很多模块(除了filefield)。
您可以编写自己的模块来跟踪特定字段并实现自己的hook_file_references。例如,您可以跟踪特定的cck值,并在调用钩子时查询它们。
答案 1 :(得分:0)
另外,请在保存时检查是否未创建节点的新修订版。在这种情况下,文件不会从文件系统中删除,因为它将保持附加到原始版本。