web-dev-qa-db-ja.com

プログラムでノードを作成しながら、プログラムで画像を追加するにはどうすればよいですか?

プログラムでノードを追加するスクリプトを書いていますが、イメージを追加/アタッチする適切な方法がわかりません。実際、私はDrupalにそれほど慣れていません。

ここに私が見つけた(サンプル)画像オブジェクトがありますprint_ring既存の$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))) `

その方法でそのノードに画像を追加するにはどうすればよいですか?

9
夏期劇場

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);
4
Yusef

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();
1
leymannx

あなたが必要とするものとは正確には違うかもしれませんが、例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); ?>" />
0
NenadP