私は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
だからすべてが良いようです。ただし、ノードに移動すると、代替テキストが表示されません。
既存の画像フィールドにaltタグを設定するにはどうすればよいですか?
@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();
}