web-dev-qa-db-ja.com

プログラムで画像フィールドのaltタグを更新する

私はDrupal 8のサイトにコンテンツタイプの画像フィールドがあるサイトを持っています。このタイプの既存のノードの場合、ほとんどに画像ファイルがありますが、altタグがありません。

既存のノードのaltタグの値を設定する更新フックを書いています。しかし、その方法を理解することも、ドキュメントを見つけることもできませんでした。

これは私が持っているものです:

$nids = \Drupal::entityQuery('node')->condition('type','sfa_social_post')->execute();
$nodes = \Drupal\node\Entity\Node::loadMultiple($nids);

foreach ( $nodes as $node ) {
  $node->field_sfa_image_file->alt = 'Image for ' . $node->getTitle();
}

どこ field_sfa_image_fileは画像フィールドの名前です。

ノードをループし直すと、設定した値が返されます。

$nids = \Drupal::entityQuery('node')->condition('type','sfa_social_post')->execute();
$nodes = \Drupal\node\Entity\Node::loadMultiple($nids);

foreach ( $nodes as $node ) {
  drush_print('Title: ' . $node->getTitle());
  drush_print('Alt: ' . $node->field_sfa_image_file->alt);
}

それは私に与えます

Title: Instagram Post ID: 1917569620391415985_3017827348
Alt: Image for Instagram Post ID: 1917569620391415985_3017827348
Title: Instagram Post ID: 1917562614863492125_3017827348
Alt: Image for Instagram Post ID: 1917562614863492125_3017827348

だからすべてが良いようです。ただし、ノードに移動すると、代替テキストが表示されません。

enter image description here

既存の画像フィールドにaltタグを設定するにはどうすればよいですか?

2
user1359

@cliveが提案したように、$node->save();を使用します。ノードを保存しないと、画像の一部が編集フォームに表示されません。

$nids = \Drupal::entityQuery('node')->condition('type','sfa_social_post')->execute();
$nodes = \Drupal\node\Entity\Node::loadMultiple($nids);
foreach ($nodes as $node) {
  $node->field_sfa_image_file->alt = 'Image for ' . $node->getTitle();
  $node->save();
}
4
Ajay Reddy