プログラムでノードを追加するスクリプトを書いていますが、イメージを追加/アタッチする適切な方法がわかりません。実際、私はDrupalにそれほど慣れていません。
ここに私が見つけた(サンプル)画像オブジェクトがありますprint_r
ing既存の$node
使用しています:
field_image:Array([und] => Array([0] => Array([fxid] => 3089 [alt] => [title] => [width] => 95 [height] => 126 [uid] => 249 [filename] => helloworld.jpg [uri] => public://helloworld.jpg [filemime] => image/jpeg [filesize] => 3694 [status] => 1 [timestamp] => 1346748001 [type] => image [media_title] => Array()[media_description] => Array()[field_tags] => Array()[field_license] => Array([und] => Array([0] =>配列([値] =>なし)))[メタタグ] =>配列()[rdf_mapping] =>配列())))
次に見つけたのは以下です。
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))) `
その方法でそのノードに画像を追加するにはどうすればよいですか?
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);
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();
あなたが必要とするものとは正確には違うかもしれませんが、例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); ?>" />