Come posso aggiungere un'immagine a livello di codice durante la creazione a livello di codice di nodi?


9

Sto scrivendo uno script per aggiungere nodi a livello di codice e non conosco il modo corretto di aggiungere / allegare l'immagine. In realtà non ho molta familiarità con Drupal.

Ecco gli oggetti immagine (campione) che ho trovato durante print_rl'uso dell'esistente $nodeche sto usando:

field_image: Array ([und] => Array ([0] => Array ([fxid] => 3089 [alt] => [title] => [larghezza] => 95 [altezza] => 126 [uid] = > 249 [nome file] => helloworld.jpg [uri] => public: //helloworld.jpg [filemime] => image / jpeg [filesize] => 3694 [status] => 1 [timestamp] => 1346748001 [tipo ] => image [media_title] => Array () [media_description] => Array () [field_tags] => Array () [field_license] => Array ([und] => Array ([0] => Array ([ value] => nothing))) [metatags] => Array () [rdf_mapping] => Array ())))

Il prossimo che ho trovato è il seguente.

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))) `

Come devo aggiungere un'immagine a quel nodo in quel modo?

Risposte:


4

Supponiamo che i campi immagine in field_body_images,

prima il loadtuo nodo node_load e registra la tua immagine nelle filetabelle e aggiungila al tuo campo immagine del nodo Spero che questo esempio ti aiuti a raggiungere:

$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);

C'è del codice per dimostrarlo in devel_generate: drupalcontrib.org/api/drupal/… Devel_generate ovviamente genera contenuti fittizi per i siti Drupal, comprese le immagini. Fa parte del pacchetto Devel: drupal.org/project/devel
paul-m

Non dimenticare di aggiungere file_usage_add($file, 'file', 'node', $n->nid);alla fine per impedire la cancellazione accidentale del file.
Neograph734,

@ Neograph734 verrà aggiunto quando node_saveviene attivato.
Yusef,

@ Neograph734 sei il benvenuto;). grazie per l'attenzione
Yusef

1

Drupal 8

Per Drupal 8 sarebbe come seguire. Prima aggiungi il file e ottieni un ID file. Quindi creare il nodo e allegare l'ID file specificato.

$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();

0

Potrebbe non essere esattamente ciò di cui hai bisogno, ma perché non aggiungere semplicemente un riferimento a un'immagine in un campo, come suggerisce il tuo esempio 2? E quindi nel file del modello di contenuto renderizzare quel campo come immagine.

Nel flusso di creazione del nodo:

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

Nel tipo di contenuto:

<?php
global $base_url;
$image_source_link=$base_url . $node->field_image['und'][0]['value'];
?>
<img src="<?php print($image_source_link); ?>" />
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.