Eu só precisava fazer isso também. A abordagem correta aqui é armazenar o URL da imagem estilizada em uma variável (através de uma função de pré-processo) e, em seguida, essa variável estará disponível no seu arquivo twig.
Eu escrevi uma função que obterá qualquer arquivo field_image e retornará o nome do arquivo original ou, se você especificar um nome de estilo, ele retornará o URL da imagem com estilo.
Dentro do meu .theme
arquivo:
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;
}
Agora, no meu arquivo twig (node.html.twig, desde que usei a função preprocess_node):
<div class="banner" style="background-image:url({{ field_image_url }}"></div>
Essa função _var_image_url()
precisa ser chamada a partir da THEME_preprocess_node()
função, pois está esperando uma certa configuração no primeiro $vars
argumento. Se você tentar chamá-lo preprocess_page
, precisará modificá-lo.