ฉันจะเพิ่มรูปภาพโดยทางโปรแกรมในขณะที่สร้างโหนดโดยทางโปรแกรมได้อย่างไร


9

ฉันกำลังเขียนสคริปต์เพื่อเพิ่มโหนดโดยทางโปรแกรมและฉันไม่ทราบวิธีที่เหมาะสมในการเพิ่ม / แนบภาพ จริงๆแล้วฉันไม่คุ้นเคยกับ Drupal

นี่คือวัตถุรูปภาพ (ตัวอย่าง) ที่ฉันพบขณะprint_rที่$nodeกำลังใช้งานอยู่:

field_image: Array ([und] => Array ([0] => Array ([fxid] => 3089 [alt] => [title] => [width] => 95 [ความสูง] => 126 [uid] = > 249 [filename] => helloworld.jpg [uri] => สาธารณะ: //helloworld.jpg [filemime] => image / jpeg [filesize] => 3694 [สถานะ] => 1 [timestamp] => 1346748001 [ประเภท ] => image [media_title] => Array () [media_description] => Array () [field_tags] => Array () [field_license] => Array ([und] => Array ([0] = ค่า] => ไม่มีอะไร))) [metatags] => Array () [rdf_mapping] => Array ()))

ถัดไปที่ฉันพบคือต่อไปนี้

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

ฉันจะเพิ่มรูปภาพไปยังโหนดนั้นได้อย่างไร?

คำตอบ:


4

อนุญาตสมมติว่าเขตข้อมูลภาพของคุณfield_body_images,

ครั้งแรกที่loadโหนดของคุณnode_load และบันทึกภาพของคุณในfileตารางและเพิ่มไปยังเขตข้อมูลภาพโหนดของคุณฉันหวังว่าตัวอย่างนี้ช่วยให้คุณบรรลุ:

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

มีรหัสบางอย่างที่แสดงให้เห็นถึงสิ่งนี้ใน devel_generate: drupalcontrib.org/api/drupal/ ...... แน่นอนว่า Devel_generate สร้างเนื้อหาจำลองสำหรับไซต์ Drupal รวมถึงรูปภาพ เป็นส่วนหนึ่งของแพ็คเกจ Devel: drupal.org/project/devel
paul-m

อย่าลืมเพิ่มfile_usage_add($file, 'file', 'node', $n->nid);ท้ายเพื่อป้องกันไฟล์จากการลบโดยไม่ตั้งใจ
Neograph734

@ Neograph734 มันจะเพิ่มเมื่อnode_saveถูกทริกเกอร์
Yusef

@ Neograph734 ยินดีต้อนรับ;) tnx สำหรับความสนใจของคุณ
Yusef

1

Drupal 8

สำหรับ Drupal 8 มันจะเป็นดังนี้ ขั้นแรกให้เพิ่มไฟล์และรับ ID ไฟล์ จากนั้นสร้างโหนดและแนบ ID ไฟล์ที่กำหนด

$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

อาจไม่ใช่สิ่งที่คุณต้องการอย่างแน่นอน แต่ทำไมไม่เพียงเพิ่มการอ้างอิงไปยังรูปภาพในฟิลด์เหมือนตัวอย่างที่ 2 ของคุณแนะนำ จากนั้นในไฟล์เทมเพลตเนื้อหาจะแสดงฟิลด์นั้นเป็นรูปภาพ

ในสตรีมการสร้างโหนด:

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

ในประเภทเนื้อหา:

<?php
global $base_url;
$image_source_link=$base_url . $node->field_image['und'][0]['value'];
?>
<img src="<?php print($image_source_link); ?>" />
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.