我的静态网站上已经有很多mp3文件存储在我的服务器上,现在我们正在转向drupal。我将为每个音频文件创建一个节点,但我不想再次上传每个文件。我宁愿将文件复制到我想要的drupal文件目录中,然后将节点与相应的文件关联起来。
关于如何实现这一目标的任何想法?
谢谢!
答案 0 :(得分:4)
我不确定我是否会提出不同的方法,或者我是否要用不同的词语来说明你对原始问题的看法,但是因为你希望节点是文件,我宁愿生成从文件开始的节点,而不是将现有节点与现有文件相关联。
在通用术语中,我会以编程方式执行:对于导入目录中的每个现有文件,我将构建$node
对象,然后调用node_save($node)
将其存储在Drupal中。
当然,在构建$node
对象时,您需要调用用于管理文件的模块的API函数。这是我写的一些示例代码,用于执行类似的任务。在这种情况下,我将产品表附加到产品(包含其他字段的节点),所以......
field_sheet
是产品节点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来执行您想要的操作会相对简单。