如何将许多现有文件与drupal文件域相关联?

时间:2009-11-25 13:35:13

标签: drupal drupal-6

我的静态网站上已经有很多mp3文件存储在我的服务器上,现在我们正在转向drupal。我将为每个音频文件创建一个节点,但我不想再次上传每个文件。我宁愿将文件复制到我想要的drupal文件目录中,然后将节点与相应的文件关联起来。

关于如何实现这一目标的任何想法?

谢谢!

2 个答案:

答案 0 :(得分:4)

我不确定我是否会提出不同的方法,或者我是否要用不同的词语来说明你对原始问题的看法,但是因为你希望节点是文件,我宁愿生成从文件开始的节点,而不是将现有节点与现有文件相关联。

在通用术语中,我会以编程方式执行:对于导入目录中的每个现有文件,我将构建$node对象,然后调用node_save($node)将其存储在Drupal中。

当然,在构建$node对象时,您需要调用用于管理文件的模块的API函数。这是我写的一些示例代码,用于执行类似的任务。在这种情况下,我将产品表附加到产品(包含其他字段的节点),所以......

  • field_sheet是产品节点
  • 中产品表的CCK字段
  • product是节点类型
  • $sheet_file是产品表文件的完整参考(路径+文件名)。

所以示例:

// Load the CCK field
$field = content_fields('field_sheet', 'product');
// Load the appropriate validators
$validators = array_merge(filefield_widget_upload_validators($field));
// Where do we store the files?
$files_path = filefield_widget_file_path($field);
// Create the file object
$file = field_file_save_file($sheet_file, $validators, $files_path);
// Apply the file to the field, this sets the first file only, could be looped
// if there were more files
$node->field_scheda = array(0 => $file);
// The file has been copied in the appropriate directory, so it can be
// removed from the import directory
unlink($sheet_file);

顺便说一句:如果您使用库来阅读MP3元数据,您可以以合理的方式设置$ node->标题和其他属性。

希望这有帮助!

答案 1 :(得分:0)

file_import module并不能完全符合您的要求(它创建节点附件而不是节点),但使用该模块作为指导以及Drapal API来执行您想要的操作会相对简单。