Я должен был сделать что-то подобное несколько недель назад и в конечном итоге адаптировал некоторые функции от Remote File module, особенно функцию remote_file_cck_attach_file()
. Он использует функцию field_file_save_file()
из модуля файлового поля, который может быть функцией, которую вы ищете.
В моем случае файлы извлекаются из нескольких удаленных мест и временно сохраняются с использованием file_save_data()
. Присоединение их к CCK FileField происходит на 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;
}
$filepath
путь к файлу, который должен быть присоединен, $fieldname
это внутреннее имя FileField экземпляра для использования в узле и $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?).');
}
}
Это сделало это для меня - все остальное происходит при автоматическом сохранении узла.
Я еще не использовал модуль getid3, поэтому я понятия не имею, будет ли он играть вместе с этим способом. Кроме того, мне не нужно было добавлять дополнительную информацию/атрибуты в файловое поле, поэтому, возможно, вам придется добавить в массив полей больше информации, чем только файл, возвращаемый field_file_save_file()
. В любом случае, надеюсь, что это поможет и удачи.
+1 для файла field_file_save_file(), который бы меня немного спас. –
Выглядит очень многообещающе, если у меня не было срока, я бы вскочил и сразу же попробовал. – googletorp