私もこれを行う必要がありました。ここでの正しいアプローチは、スタイル付き画像の画像URLを(前処理関数を介して)変数に格納することです。そうすると、その変数がtwigファイルで使用可能になります。
任意のfield_imageファイルを取得して元のファイル名を返す関数を記述しました。または、スタイル名を指定すると、スタイル付き画像のURLを返します。
私の.theme
ファイル内:
function MYTHEME_preprocess_node(&$vars) {
//get thumbnail images from field_image
$vars['field_image_url'] = _var_image_url($vars, 'field_image', 'thumbnail');
}
//pull image field URL (original or styled)
function _var_image_url($vars, $field, $style_name = '') {
if (!empty($vars['elements'][$field]['#object'])) {
$fields = $vars['elements'][$field]['#object']->getFields();
$image = $fields[$field]->getValue();
if (!empty($image[0]['target_id'])) {
$file = \Drupal\file\Entity\File::load($image[0]['target_id']);
$uri = $file->getFileUri();
if(!empty($style_name)) {
$url = \Drupal\image\Entity\ImageStyle::load($style_name)->buildUrl($uri);
return $url; //the styled URL
} else {
return file_create_url($uri); //original
}
}
}
return false;
}
今私のtwigファイル(node.html.twig、私はpreprocess_node関数を使用したため):
<div class="banner" style="background-image:url({{ field_image_url }}"></div>
この関数_var_image_url()
はTHEME_preprocess_node()
、最初の$vars
引数で特定の設定を想定しているため、関数から呼び出す必要があります。から呼び出す場合はpreprocess_page
、変更する必要があります。