2010-01-20 4 views
2

J'ai un cck FileField attaché à un type de contenu. Lorsque je supprime un fichier d'un nœud, je veux supprimer la référence au fichier mais conserver le fichier sur le serveur. La raison en est que nous utilisons également IMCE sur le site et que d'autres éléments peuvent référencer l'image. Savez-vous si cela est possible?Drupal FileField supprime le fichier du nœud mais laisse sur le serveur

Répondre

2

En regardant le code FileField_delete ici:

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; 
    } 
    } 

Il ressemble hook_file_references peut venir à votre aide. Cependant, je ne peux pas voir beaucoup de modules (autres que filefield) qui utilisent ce hook.

Il vous serait possible d'écrire votre propre module pour suivre des champs spécifiques et implémenter vos propres hook_file_references. Vous pouvez par exemple suivre des valeurs cck spécifiques et les interroger lorsque le hook est appelé.

+0

Si vous utilisez quelque chose comme http://drupal.org/project/filefield_sources et que le fichier est associé à d'autres nœuds, le fichier ne sera pas supprimé tant que le dernier nœud faisant référence au fichier ne sera pas supprimé. – jhedstrom

0

Vérifiez également si vous ne créez pas une nouvelle révision du noeud lorsque vous l'enregistrez. Le fichier ne sera pas supprimé du système de fichiers dans ce cas car il restera attaché à la révision d'origine.

Questions connexes