J'essaie d'assigner (pas de télécharger) des fichiers aux nœuds par programme.
Voici le scénario:
Je vais créer 2000 nœuds et il y a 2000 PDF (un PDF par nœud). Je ne veux pas télécharger ces fichiers via Drupal. Je téléchargerai tous ces fichiers PDF via FTP.
Ces fichiers PDF sont bien nommés, je veux dire tous ont un nom standardisé tel que {field_magazine_name}-{field_issue_number}.pdf
(sous sites/default/files/pdf par exemple).
Ce que je veux faire, c'est affecter ces fichiers PDF aux nœuds associés lors de la création/sauvegarde des nœuds.
Une méthode pour ce faire serait d'utiliser le module File Field Sources .
Je pense que le transfert de fichiers à distance peut être utilisé avec du code JavaScript. L'entrée de transfert de fichiers à distance peut être automatiquement remplie avec les champs que je veux et cela fonctionnera (par exemple http://example.com/sites/default/files/pdf/{field_magazine_name}-{field_issue_number}.pdf
) ... mais je ne crée pas de nœuds manuellement , je crée les nœuds via Feeds . Donc, utiliser JavaScript n'est pas la méthode que je peux utiliser.
J'avais une situation similaire. Ma situation est d'attacher un fichier à un nœud dans la création d'un nœud de type de contenu différent. Fait ceci dans hook_node_insert
Le code utilisé est le suivant.
$source_node = node_load($nid);
$filename = $bio_file_name; //your specific filename
$dir = 'public://temp-path/'.$filename; //path to specific file with name
$file_size = filesize($dir);
//New file object
$file = new stdClass;
$file->uid = $source_node->uid;
$file->filename = $filename;
$file->uri = $dir;
$file->filemime = file_get_mimetype($dir);
// Make it permanent, otherwise it will get deleted later.
$file->status = FILE_STATUS_PERMANENT;
// Save file object to make it a 'managed file'.
$file_obj = file_move($file, 'public://newpath', FILE_EXISTS_REPLACE);
$source_node->your-file-field-name['und'][0] = array(
'fid' => $file_obj->fid,
'uid' => $file_obj->uid,
'filename' => $file_obj->filename,
'uri' => $file_obj->uri,
'filemime' => $file_obj->filemime,
'filesize' => $file_obj->filesize,
'status' => 1,
'display' => 1,
'description' => '',
);
node_save($source_node);
J'espère que cela vous aidera..
Ajouter des champs de fichier/image
// Some file on our system
$file_path = drupal_realpath('somefile.png'); // Create a File object
$file = (object) array(
'uid' => 1,
'uri' => $file_path,
'filemime' => file_get_mimetype($file_path),
'status' => 1,
);
$file = file_copy($file, 'public://'); // Save the file to the root of the files directory. You can specify a subdirectory, for example, 'public://images'
$node->field_image[LANGUAGE_NONE][0] = (array)$file; //associate the file object with the image field:
En plus d'Abin: définissez également l'utilisation du fichier en ajoutant ce code après la sauvegarde du nœud:
file_usage_add($file_obj, 'file', 'node', $source_node->nid);
Voir les documents drupal .
Une dernière chose à part cela: il est préférable d'utiliser LANGUAGE_NONE au lieu de "und".