J'ai dû faire quelque chose de similaire il y a quelques semaines et j'ai fini par adapter certaines fonctionnalités du Remote File module, en particulier la fonction remote_file_cck_attach_file()
. Il utilise la fonction field_file_save_file()
du module de fichier, qui pourrait être la fonction que vous recherchez.
Dans mon cas, les fichiers sont récupérés à partir de plusieurs emplacements distants et stockés temporairement en utilisant file_save_data()
. de les attacher à un filefield CCK qui se passe sur hook_nodeapi()
preSave, en utilisant:
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
est le chemin du fichier qui doit être attaché, $fieldname
est le nom interne de l'instance filefield à utiliser dans le noeud et $index
serait l'index basé sur 0 du fichier joint en cas de plusieurs entrées de champ.
La fonction s'est retrouvée dans une classe d'utilitaires, d'où la syntaxe de classe pour l'appel verifyPath(). L'appel s'assure juste que le répertoire cible est disponible:
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?).');
}
}
Cela a fait pour moi - tout le reste se produit sur l'enregistrement de noeud automatiquement.
Je n'ai pas encore utilisé le module getid3, donc je ne sais pas si cela fonctionnerait de cette façon. En outre, je n'avais pas besoin d'ajouter des informations/attributs supplémentaires au champ de fichier, donc peut-être que vous auriez à mettre plus d'informations dans le tableau de champs que juste le fichier retourné par field_file_save_file()
. Quoi qu'il en soit, j'espère que cela aidera et bonne chance.
+1 pour field_file_save_file() qui m'aurait sauvé du temps. –
On dirait très prometteur, si je n'avais pas de date limite, je creuserais et j'essaierais tout de suite. – googletorp