Як я можу програмно додати зображення під час програмного створення вузлів?


9

Я пишу сценарій для програмного додавання вузлів, і не знаю належного способу додавання / прикріплення зображення. Насправді я не так знайомий з Drupal.

Ось (зразки) об’єктів зображень, які я знайшов під час print_rвикористання існуючого $nodeя використовую:

field_image: Array ([und] => Array ([0] => Array ([fksid] => 3089 [alt] => [назва] => [ширина] => 95 [висота] => 126 [uid] = > 249 [ім'я файлу] => helloworld.jpg [uri] => public: //helloworld.jpg [filemime] => image / jpeg [fileize] => 3694 [status] => 1 [timetamp] => 1346748001 [type ] => image [media_title] => Array () [media_description] => Array () [field_tags] => Array () [field_license] => Array ([und] => Array ([0] => Array ([ значення] => нічого))) [метатеги] => Array () [rdf_mapping] => Array ())))

Наступний я знайшов наступний.

field_temp_image: Array ([und] => масив ([0] => масив ([значення] => http://www.example.com/sample-path/helloworld.jpg [формат] => [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запуску.
Юсеф

@ Neograph734 ласкаво просимо;). tnx для вашої уваги
Юзеф

1

Друпал 8

Для Drupal 8 це піде наступним чином. Спочатку додайте файл і отримайте ідентифікатор файла. Потім створіть вузол і прикріпіть заданий ідентифікатор файлу.

$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); ?>" />
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.