web-dev-qa-db-fra.com

Mettre à jour par programme le champ d'image du nœud (en utilisant l'URI de l'image) et obtenir l'URL dans twig

J'essaie de mettre à jour un champ d'image de nœud par programme. Je charge actuellement le nœud comme ceci:

$node = Node::Load(1);

avoir l'URI si l'image que je veux définir. J'ai essayé mais pas de chance:

$node->set('field_image_head', array('#uri' => $imageUri));
  1. Comment puis-je maintenant mettre à jour l'image du nœud avec un URI d'image?
  2. Le twig devra obtenir l'URL du champ d'image comme ceci
    {{ file_url(node.field_image_head.entity.fileuri}}
4
harnamc

Vous devez d'abord créer un fichier pour l'image avant de pouvoir l'ajouter au nœud.

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