Bagaimana cara saya menambahkan gambar secara terprogram sementara membuat node secara terprogram?

9

Saya sedang menulis skrip untuk menambahkan node secara terprogram, dan saya tidak tahu cara yang tepat untuk menambahkan / melampirkan gambar. Sebenarnya saya tidak begitu akrab dengan Drupal.

Berikut adalah objek gambar (contoh) yang saya temukan saat print_rmenggunakan yang sudah $nodesaya gunakan:

field_image: Array ([und] => Array ([0] => Array ([fxid] => 3089 [alt] => [judul] => [lebar] => 95 [tinggi] => 126 [uid] = > 249 [nama file] => helloworld.jpg [uri] => publik: //helloworld.jpg [filemime] => image / jpeg [filesize] => 3694 [status] => 1 [cap waktu] => 1346748001 [ketik ] => gambar [media_title] => Array () [media_description] => Array () [field_tags] => Array () [field_license] => Array ([und] => Array ([0] => Array ([ value] => nothing))) [metatags] => Array () [rdf_mapping] => Array ()))))

Yang berikutnya saya temukan adalah sebagai berikut.

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

Bagaimana saya harus menambahkan gambar ke simpul itu dengan cara itu?

夏 期 劇場
sumber

Jawaban:

4

Anggap bidang gambar Anda di field_body_images,

pertama loadsimpul Anda dengan node_load dan merekam gambar Anda dalam filetabel dan menambahkannya ke bidang gambar simpul Anda. Saya harap sampel ini membantu Anda untuk mencapai:

$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
sumber
Ada beberapa kode untuk menunjukkan ini di devel_generate: drupalcontrib.org/api/drupal/… Devel_generate tentu saja menghasilkan konten tiruan untuk situs Drupal, termasuk gambar. Itu adalah bagian dari paket Devel
paul-m
Jangan lupa untuk menambahkan file_usage_add($file, 'file', 'node', $n->nid);pada akhirnya untuk mencegah file terhapus secara tidak sengaja.
Neograph734
@ Neograph734 akan ditambahkan ketika node_savedipicu.
Yusef
@ Neograph734 Anda dipersilakan;). tnx atas perhatian Anda
Yusef
1

Drupal 8

Untuk Drupal 8 akan seperti berikut. Pertama tambahkan file dan dapatkan ID file. Kemudian buat simpul dan lampirkan ID file yang diberikan.

$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
sumber
0

Mungkin bukan apa yang Anda butuhkan, tetapi mengapa tidak menambahkan referensi ke gambar di bidang, seperti contoh 2 yang Anda sarankan? Dan kemudian dalam file templat konten membuat bidang itu sebagai gambar.

Dalam aliran pembuatan simpul:

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

Dalam tipe konten:

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