goo*_*orp 2 drupal cck drupal-6 drupal-files
我正在为Drupal站点创建批量上传功能.使用flash我可以将文件上传到特定的URL然后处理文件.我想要做的不仅仅是上传文件,而是创建一个特定类型的节点,并将文件保存到已使用CCK设置的文件字段中.由于这些是音频文件,因此文件字段处理文件非常重要,因此可以使用getid3模块提供附加元数据.
现在我已经查看了一些代码,因为我无法找到API文档,但我不清楚我应该如何处理它.理想情况下,我可以将文件传递给函数,只使用保存节点时返回的数据,但我无法找到该函数.
如果任何人有这方面的经验,我会提出一些关于如何处理这个问题的指示.
几个星期前我不得不做类似的事情,最后调整了远程文件模块的一些功能,特别是remote_file_cck_attach_file()功能.它使用field_file_save_file()filefield模块中的函数,该函数可能是您正在寻找的函数.
在我的例子中,文件从几个远程位置获取并临时存储使用file_save_data().将它们附加到CCK文件字段会在hook_nodeapi()presave 上发生,使用以下内容:
public static function attachAsCCKField(&$node, $filepath, $fieldname, $index=0) {
// Grab the filefield definition
$field = content_fields($fieldname, $node->type);
$validators = array_merge(filefield_widget_upload_validators($field), imagefield_widget_upload_validators($field));
$fieldFileDirectory = filefield_widget_file_path($field);
// This path does not necessarily exist already, so make sure it is available
self::verifyPath($fieldFileDirectory);
$file = field_file_save_file($filepath, $validators, $fieldFileDirectory);
// Is the CCK field array already available in the node object?
if (!is_array($node->$fieldname)) {
// No, add a stub
$node->$fieldname=array();
}
$node->{$fieldname}[$index] = $file;
}
Run Code Online (Sandbox Code Playgroud)
$filepath是应该附加的文件的路径,$fieldname是在节点中使用的文件字段实例的内部名称,并且$index在多个字段条目的情况下将是附加文件的基于0的索引.
该函数最终在实用程序类中,因此是verifyPath()调用的类语法.该调用只是确保目标目录可用:
public static function verifyPath($path) {
if (!file_check_directory($path, FILE_CREATE_DIRECTORY)) {
throw new RuntimeException('The path "' . $path . '" is not valid (not creatable, not writeable?).');
}
}
Run Code Online (Sandbox Code Playgroud)
这样做对我来说 - 其他一切都发生在节点自动保存上.
我还没有使用getid3模块,所以我不知道它是否会与这种方式一起使用.另外,我没有必要在文件字段中添加额外的信息/属性,所以也许你不得不在字段数组中输入更多的信息,而不仅仅是返回的文件field_file_save_file().无论如何,希望这有帮助,祝你好运.
| 归档时间: |
|
| 查看次数: |
1736 次 |
| 最近记录: |