我只是也需要这样做。正确的方法是将样式图像的图像URL存储到变量中(通过预处理功能),然后该变量将在您的树枝文件中可用。
我编写了一个函数,该函数将获取任何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;
}
现在在我的树枝文件中(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
,则需要对其进行修改。