Tôi chỉ có nhu cầu làm điều này là tốt. Cách tiếp cận đúng ở đây là lưu trữ URL hình ảnh của hình ảnh được tạo kiểu vào một biến (thông qua chức năng tiền xử lý), và sau đó biến đó sẽ có sẵn trong tệp twig của bạn.
Tôi đã viết một hàm sẽ nhận bất kỳ tệp field_image nào và trả về tên tệp gốc hoặc nếu bạn chỉ định tên kiểu, nó sẽ trả về URL của hình ảnh được tạo kiểu.
Trong .theme
tập tin của tôi :
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;
}
Bây giờ trong tệp twig của tôi (node.html.twig, vì tôi đã sử dụng hàm pre process_node):
<div class="banner" style="background-image:url({{ field_image_url }}"></div>
Hàm _var_image_url()
này phải được gọi từ THEME_preprocess_node()
hàm vì nó mong đợi một thiết lập nào đó trong $vars
đối số đầu tiên . Nếu bạn thử gọi nó từ preprocess_page
, bạn sẽ cần phải sửa đổi nó.