Tengo un tipo de contenido con un FileField (imagen, en particular). Cuando se elimina uno de estos valores, entonces Drupal también elimina el archivo subyacente (siempre que ningún otro nodo haga referencia al mismo archivo).
No quiero que se eliminen los archivos subyacentes, quiero que permanezcan en el sistema de archivos. ¿Hay algún gancho u otras técnicas que pueda usar para asegurarme de que permanezca después de que se elimine su valor de FileField?
Es un truco feo, pero esta es la forma más simple que encontré para evitar que se elimine un archivo. Funciona enganchando file_delete
y luego eliminando la propiedad uri
de la $file
variable. Sin la uri, Drupal no puede eliminar el archivo.
// Think twice before using this ugly hack.
// It probably breaks something and kills kittens.
function mymodule_file_delete($file) {
$path = drupal_realpath($file->uri);
if (!is_dir($path) && is_file($path)) {
if (preg_match('/insert_regex_here/', $path)) {
$file->uri = NULL;
}
}
}
Las otras alternativas que consideré fueron:
file_usage_add
sería desalentador.Esto ya ha sido respondido: https://stackoverflow.com/questions/2101754/drupal-filefield-remove-file-from-node-but-leave-on-server