web-dev-qa-db-ja.com

プログラムでノード画像フィールドを更新し(画像のURIを使用)、twig

プログラムでノード画像フィールドを更新しようとしています。私は現在このようにノードをロードしています:

$node = Node::Load(1);

設定したい画像であればURIを持っています。私はこれを試しましたが運はありません:

$node->set('field_image_head', array('#uri' => $imageUri));
  1. ノードURIを画像URIで更新するにはどうすればよいですか?
  2. twigは、このように画像フィールドからURLを取得する必要があります
    {{ file_url(node.field_image_head.entity.fileuri}}
4
harnamc

ノードに追加する前に、まずイメージのファイルを作成する必要があります。

use Drupal\node\Entity\Node;
use Drupal\file\Entity\File;

  $node = Node::load(1);
  $uri = 'public://image.jpg';

  // check first if the file exists for the uri    
  $files = \Drupal::entityTypeManager()
    ->getStorage('file')
    ->loadByProperties(['uri' => $uri]);
  $file = reset($files);

  // if not create a file
  if (!$file) {
    $file = File::create([
      'uri' => $uri,
    ]);
    $file->save();
  }

  $node->field_image[] = [
    'target_id' => $file->id(),
    'alt' => 'Alt text',
    'title' => 'Title',
  ];

  $node->save();
8
4k4