さまざまなフィールドを含むノードがあります。テキストフィールドの値は取得できますが、画像フィールドの値は取得できません。以下は、twigテンプレートにダンプされるノード変数の関連出力です。
'field_main_image' =>
object(Drupal\field\Entity\FieldConfig)[1312]
protected 'deleted' => boolean false
protected 'fieldStorage' => null
protected 'id' => string 'node.homepage.field_main_image' (length=30)
protected 'field_name' => string 'field_main_image' (length=16)
protected 'field_type' => string 'image' (length=5)
protected 'entity_type' => string 'node' (length=4)
protected 'bundle' => string 'homepage' (length=8)
protected 'label' => string 'Main image' (length=10)
protected 'description' => string '' (length=0)
protected 'settings' =>
array (size=12)
...
protected 'required' => boolean false
protected 'translatable' => boolean false
protected 'default_value' =>
array (size=0)
...
protected 'default_value_callback' => string '' (length=0)
protected 'itemDefinition' => null
protected 'constraints' =>
array (size=0)
...
protected 'originalId' => string 'node.homepage.field_main_image' (length=30)
protected 'status' => boolean true
protected 'uuid' => string 'f40a7a65-18a5-4ced-85b0-ab1cdc41b2f5' (length=36)
private 'isSyncing' (Drupal\Core\Config\Entity\ConfigEntityBase) => boolean false
private 'isUninstalling' (Drupal\Core\Config\Entity\ConfigEntityBase) => boolean false
protected 'langcode' => string 'en' (length=2)
protected 'third_party_settings' =>
array (size=0)
...
protected '_core' =>
array (size=0)
...
protected 'trustedData' => boolean false
protected 'entityTypeId' => string 'field_config' (length=12)
protected 'enforceIsNew' => null
protected 'typedData' => null
protected 'cacheContexts' =>
array (size=0)
...
protected 'cacheTags' =>
array (size=0)
...
protected 'cacheMaxAge' => int -1
protected '_serviceIds' =>
array (size=0)
...
protected 'dependencies' =>
array (size=2)
...
SEで同様の質問 ノードのfield_imageから画像のURLを取得する のようなものを見たことがありますが、どの回答もうまくいきませんでした。
ご返信ありがとうございます。
画像フィールドは、ファイルIDをtarget_id
に格納します。次のコマンドでファイルIDにアクセスできます。
{{ node.field_main_image.target_id }}
画像フィールドには2番目のプロパティがあります。これは、参照されるエンティティ、この場合はファイルオブジェクト用です。これは計算されているため、デバッグ出力には表示されません。
{{ node.field_main_image.entity }}
ファイルオブジェクトで、フィールドuriを見つけます。
{{ node.field_main_image.entity.uri.value }}
元の画像のURLを取得するために使用できます
{{ file_url(node.field_main_image.entity.uri.value) }}
または画像スタイルのURL
{{ node.field_main_image.entity.uri.value | image_style('thumbnail') }}
画像スタイルのフィルターは、インストールする必要があるこのモジュールの一部です。
twigテンプレートで画像のURLを直接取得することはできません。画像フィールドには画像ファイルIDしかないためです。Drupal 8の画像はすべてファイルエンティティです。
template_preprocess_node()
で試すことができます:
$image_file_id = $variables['node']->field_image[0]->target_id;
$image_file = \Drupal\file\Entity\File::load($image_file_id);
$uri = $image_file->uri->value;
$variables['url']=file_create_url($uri);
<article{{ attributes.addClass(classes) }}>
<div>
<img src="{{ file_url(node.field_image.entity.uri.value) }}">
</div>
<div{{ content_attributes.addClass('content') }}>
{{ content|without('field_image') }}
</div>
これにより、twigテンプレート内のノードの画像フィールドを取得できます。
これにより、ノード画像フィールドのないコンテンツが取得されます。