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


9

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

これは、私が使用してprint_rいる既存のもの$nodeをingしているときに見つけた(サンプル)画像オブジェクトです。

field_image:Array([und] => Array([0] => Array([fxid] => 3089 [alt] => [title] => [width] => 95 [height] => 126 [uid] = > 249 [ファイル名] => helloworld.jpg [uri] => public://helloworld.jpg [filemime] => image / jpeg [filesize] => 3694 [status] => 1 [timestamp] => 1346748001 [type ] => image [media_title] =>配列()[media_description] =>配列()[field_tags] =>配列()[field_license] =>配列([und] =>配列([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))) `

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

回答:


4

の画像フィールドをfield_body_images

最初loadにノードnode_loadfile作成し、テーブルに画像を記録して、ノード画像フィールドに追加します。このサンプルが達成に役立つことを願っています。

$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

トリガーされると追加され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.