Comment ajouter par programme une image lors de la création de nœuds par programmation?

9

J'écris un script pour ajouter des nœuds par programme, et je ne connais pas la bonne façon d'ajouter / attacher une image. En fait, je ne connais pas très bien Drupal.

Voici les (exemples) objets d'image que j'ai trouvés en utilisant print_rl'existant que $nodej'utilise:

field_image: Array ([und] => Array ([0] => Array ([fxid] => 3089 [alt] => [title] => [width] => 95 [height] => 126 [uid] = > 249 [filename] => helloworld.jpg [uri] => public: //helloworld.jpg [filemime] => image / jpeg [filesize] => 3694 [status] => 1 [timestamp] => 1346748001 [type ] => image [media_title] => Array () [media_description] => Array () [field_tags] => Array () [field_license] => Array ([und] => Array ([0] => Array ([ value] => rien))) [metatags] => Array () [rdf_mapping] => Array ())))

Le suivant que j'ai trouvé est le suivant.

field_temp_image: Array ([und] => Array ([0] => Array ([value] => http://www.example.com/sample-path/helloworld.jpg [format] => [safe_value] => http://www.example.com/sample-path/helloworld.jpg))) `

Comment dois-je ajouter une image à ce nœud de cette façon?

夏 期 劇場
la source

Réponses:

4

Supposons que vos champs d'image field_body_images,

d'abord loadvotre nœud node_load et enregistrez votre image dans des filetableaux et ajoutez-la à votre champ d'image de nœud. J'espère que cet exemple vous aidera à atteindre:

$n=  node_load($nid);
$file = new stdClass();      
$file->filename =$file_name;
$file->filemime =file_get_mimetype($localimagepath.$file_name);
$file->filesize = @filesize(file_create_path($localimagepath.$file_name));
$file->uid = $user->uid;
$file->status = 1;
$file->timestamp = time();
$file->list=1;
$file->data=array('alt'=>'','title'=>$n->title);
drupal_write_record('files', $file);
$record->fid=$file->fid;
$n->field_body_images[]=(array)$file;
node_save($n);
Yusef
la source
Il y a du code pour le démontrer dans devel_generate: drupalcontrib.org/api/drupal/… Devel_generate génère bien sûr du contenu factice pour les sites Drupal, y compris des images. Cela fait partie du package Devel: drupal.org/project/devel
paul-m
N'oubliez pas d'ajouter file_usage_add($file, 'file', 'node', $n->nid);à la fin pour éviter la suppression accidentelle du fichier.
Neograph734
@ Neograph734, il sera ajouté lors du node_savedéclenchement.
Yusef
@ Neograph734 vous êtes les bienvenus;). tnx pour votre attention
Yusef
1

Drupal 8

Pour Drupal 8, cela se passerait comme suit. Ajoutez d'abord le fichier et obtenez un ID de fichier. Créez ensuite le nœud et attachez l'ID de fichier donné.

$data = file_get_contents(__DIR__ . '/images/my_image.jpeg');
$file = file_save_data($data, 'public://my_image.jpeg');

$node = \Drupal\node\Entity\Node::create([
  'type'             => 'page',
  'title'            => 'Foobar',
  'field_my_image' => [
    'target_id' => $file->id(),
    'alt'       => 'Lorem ipsum',
    'title'     => 'Dolor sit amet',
  ],
]);

$node->save();
leymannx
la source
0

Ce n'est peut-être pas exactement ce dont vous avez besoin, mais pourquoi ne pas simplement ajouter une référence à une image dans un champ, comme le suggère votre exemple 2? Et puis, dans le fichier de modèle de contenu, rendez ce champ sous forme d'image.

Dans le flux de création de noeud:

$node->field_image['und'][0]['value'] = "/path_to_image/image.jpg";

Dans le type de contenu:

<?php
global $base_url;
$image_source_link=$base_url . $node->field_image['und'][0]['value'];
?>
<img src="<?php print($image_source_link); ?>" />
NenadP
la source