FileFieldを持つコンテンツタイプ(特に画像)があります。これらの値のいずれかが削除されると、Drupalは(他のノードが同じファイルを参照していない限り)基礎となるファイルも削除します)。
基礎となるファイルを削除したくありません。ファイルシステムに残しておいてください。 FileField値が削除された後もそれが確実に残るようにするために使用できるフックまたは他の手法はありますか?
これは醜いハックですが、これはファイルが削除されるのを防ぐために私が見つけた最も簡単な方法です。これは、file_delete
をフックし、$file
変数からuri
プロパティを削除することで機能します。 URIがないと、Drupalはファイルを削除できません。
// 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;
}
}
}
私が検討した他の選択肢は:
file_usage_add
と同期するのは困難です。