vectoroc@drupal.org: Блог

Главные вкладки

удаление файлов filefield

1 октября 2010 в 18:00

Как правильно удалять загруженные с помощью filefield файлы?
Написал следующую функцию:

function _delete_file_references($file, $field, $files_quene = array()) {
  foreach (filefield_get_file_references($file) as $nid => $vid) {
    $node   = node_load($nid, NULL, TRUE);
    $images = $node->{$field['field_name']};
   
    foreach ($images as $i => $image) {
      if ($image['fid'] == $file['fid'] || isset($files_quene[$image['fid']])) {
        unset($images[$i]);
      }
    }
   
    if (count($images) < count($node->{$field['field_name']})) {
      $node->{$field['field_name']} = $images;
      node_save($node);
    }
  }

  if (count($files_quene) > 0) {
    _delete_file_references(
      array_shift($files_quene),
      $field,
      $files_quene
    );
  }
}

и потом отдельно удаляю файлы из $files_quene. Работает это очень медленно.

Наверно гораздо быстрее будет удалить все fid-сы из соответствующей таблицы cck, но не уверен в корректности такого варианта.
В общем надеюсь на совет сообщества