テキストフィールドと画像フィールドを含むカスタムブロックがあります。画像のURLをブロックのラッパーdivのデータ属性として定義できるようにブロックをレンダリングして、JavaScript関数がテキストフィールドの背後に視差の背景効果を作成できるようにしたいと思います。
テンプレートファイルblock.parallax.html.twigを作成すると、画像をHTMLでレンダリングできます。
{{ content.field_parallax_image.0 }}
しかし、実際の画像URLを取得しようとすると、何も返されません
{{ content.field_parallax_image.0['#url'] }}
#itemキーをダンプすると
{{ dump(content.field_parallax_image.0['#item']|keys) }}
Target_id、alt、title、width、heightの値を取得できますが、どこにも定義されているURLが見つかりません。
私はまた、ブロックの前処理関数で何か有用なものを見つけることができるかどうかを確認しようとしましたが、変数のfield_parallax_image #urlフィールドも空です
function mytheme_preprocess_block(&$variables) {
if( isset($variables['content']['body']['#bundle']) && $variables['content']['body']['#bundle'] == 'parallax'){
$variables['img_url'] = $variables['elements']['content']['field_parallax_image'][0]['#url'];
}
}
このURLを取得する方法はありますか?
#url
この段階ではまだ処理されていません。これは後でイメージテンプレートで発生します。
ブロックテンプレートのURLを取得するには、代わりに画像ファイルエンティティのuriフィールドにアクセスできます。
{{ file_url(content.field_parallax_image.0['#item'].entity.uri.value) }}
ところで、このプロパティは、エンティティ参照の処理を容易にするために計算された値であるため、ダンプ出力では見つかりませんでした。