다른 방법으로하겠습니다. 노드 전처리 기능에서 :
use Drupal\image\Entity\ImageStyle; // Don't forget this use.
function THEMENAME_preprocess_node__NODETYPE(&$variables){
$node = $variables['node'];
if(isset($node->get('field_image')->entity)){
$image_style = 'large'; // Or whatever your image style's machine name is.
$style = ImageStyle::load($style);
$variables['image'] = $style->buildUrl($node->get('field_image')->entity->getFileUri()); // Generates file url.
}
}
그런 다음 템플릿 (node--NODETYPE.html.twig)에서 이미지를 다음과 같이 렌더링하십시오.
{% if image %}
<img src="{{ image }}" />
{% endif %}
많은 양의 이미지를 렌더링 해야하는 경우 각 이미지를 반복하기 전에 배열에 스타일을로드하는 것이 좋습니다. 300 개가 넘는 이미지를로드해야하기 때문에 심각한로드 시간 문제가 발생했기 때문에 각 이미지마다 이전에로드하지 않고 개별적으로 스타일을로드했습니다. 위와 같은 기본 예제는 다음과 같습니다.
use Drupal\image\Entity\ImageStyle; // Don't forget this use.
function THEMENAME_preprocess_node__NODETYPE(&$variables){
$node = $variables['node'];
if(isset(node->get('field_images')[0]->entity)){ // Notice how, this time, I check if the FIRST image is set (if it's true, then u'll allow the loop for at least 1 element)
$images_styles = [
'large' => ImageStyle::load('large'),
'thumbnail' => ImageStyle::load('thumbnail')
];
$count = 0;
foreach($node->get('field_images') as $image){
$variables['images'][$count]['large'] = $images_styles['large']->buildUrl($image->getFileUri());
$variables['images'][$count]['thumbnail'] = $images_styles['thumbnail']->buildUrl($image->getFileUri());
$count++;
}
}
}
그런 다음 템플릿 (노드 --NODETYPE.html.twig)에서 이미지를 다음과 같이 렌더링하면됩니다.
{% if images %}
<ul>
{% for image in images %}
<li>
<img src="{{ image.large }}" /> // Large image url.
<img src="{{ image.thumbnail }}" /> // Thumbnail image url.
</li>
{% endfor %}
</ul>
{% endif %}
나는 실제로 그것을 테스트하지 않았고 오류를 포함 할 수 있도록이 모든 것을 내 머리에서 꺼내고 있습니다.