在以编程方式创建节点时,如何以编程方式添加图像?


9

我正在编写脚本以编程方式添加节点,但我不知道添加/附加图像的正确方法。实际上,我对Drupal不太熟悉。

以下是我在使用print_r现有图像时发现的(样本)图像对象$node

field_image:数组([und] =>数组([0] =>数组([fxid] => 3089 [alt] => [title] => [width] => 95 [height] => 126 [uid] = > 249 [文件名] => helloworld.jpg [uri] => public://helloworld.jpg [filemime] =>图片/ jpeg [文件大小] => 3694 [状态] => 1 [时间戳] => 1346748001 [类型] =>图片[media_title] => Array()[media_description] => Array()[field_tags] => Array()[field_license] => Array([und] => Array([0] => Array([值] =>否))))[元数据] =>数组()[rdf_mapping] =>数组())))

我发现的下一个是以下内容。

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

我应该如何以这种方式将图像添加到该节点?

Answers:


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 2015年

@ Neograph734它将在node_save触发时添加。
2015年

@ 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); ?>" />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.