ฉันจะทำอย่างอื่น ในฟังก์ชั่นการประมวลผลล่วงหน้าของโหนด:
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.
}
}
จากนั้นในเทมเพลตของคุณ (โหนด - 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 %}
ฉันไม่ได้ทำการทดสอบจริงๆและฉันได้รับสิ่งนี้ทั้งหมดจากหัวของฉันดังนั้นมันอาจมีข้อผิดพลาดอย่าลังเลที่จะเตือนฉันดังนั้นฉันจะแก้ไข :-) นี้