ฉันมีประเภทเนื้อหาพร้อมฟิลด์ภาพ โดยทั่วไปแล้วฟิลด์นี้จะมีค่า 0 ถึง 4 โดยค่าเริ่มต้นทีเซอร์สำหรับประเภทเนื้อหานี้จะส่งออกรูปภาพทั้งหมด 0 ถึง 4 ภาพ ฉันจะปรับ Teaser ให้แสดงเฉพาะภาพแรกได้อย่างไร
ฉันมีประเภทเนื้อหาพร้อมฟิลด์ภาพ โดยทั่วไปแล้วฟิลด์นี้จะมีค่า 0 ถึง 4 โดยค่าเริ่มต้นทีเซอร์สำหรับประเภทเนื้อหานี้จะส่งออกรูปภาพทั้งหมด 0 ถึง 4 ภาพ ฉันจะปรับ Teaser ให้แสดงเฉพาะภาพแรกได้อย่างไร
คำตอบ:
สร้างโมดูลที่กำหนดเองแทนที่MODULENAME
ด้วยชื่อของโมดูลและfield_image
ด้วยชื่อของฟิลด์ของคุณ:
/**
* Implements hook_entity_view().
*/
function MODULENAME_entity_view($entity, $type, $view_mode, $langcode) {
if ($view_mode == 'teaser') {
$entity->content['field_image']['#items'] = array_slice($entity->content['field_image']['#items'], 0, 1);
}
}
ดูเอกสารประกอบhook_entity_view ()สำหรับรายละเอียดเพิ่มเติม
if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE')
คุณสามารถเปลี่ยนถ้ามีคำสั่งให้เป็น
ไม่จำเป็นต้องเขียนรหัสที่กำหนดเอง
ลองใช้โมดูลขีด จำกัด หลายสนาม
ช่วยให้คุณสามารถเข้าสู่การตั้งค่าการแสดงผลสำหรับประเภทเนื้อหาของคุณและกำหนดค่าการตั้งค่าทีเซอร์เพื่อแสดงเฉพาะค่าจำนวนหนึ่ง คุณสามารถทำให้ข้ามขั้นตอนตัวอย่างเช่นหากคุณต้องการให้แสดงค่า 2 ถึง 5
.
หากใช้เทมเพลตทีเซอร์ (เช่น: node - CONTENT-TYPE - teaser.tpl.php ) สิ่งนี้จะทำงาน:
<?php print render($content['IMAGE-FIELD'][0]); ?>
ฉันใช้ hook_field_extra_fields () และ hook_node_view () เพื่อสร้างฟิลด์ใหม่เพื่อแสดงภาพแรกเพื่อที่ฉันจะได้ไม่ยุ่งเกี่ยวกับฟิลด์ภาพต้นฉบับ
hook_field_extra_fields () เริ่มต้นฟิลด์ใหม่ซึ่งจะปรากฏบนแท็บจัดการการแสดงผลของประเภทโหนดของคุณ
function HOOK_field_extra_fields() {
$extra['node']['NODE_TYPE'] = array(
'display' => array(
'primary_image' => array(
'label' => t('Primary Image'),
'weight' => 0,
)
),
);
return $extra;
}
จากนั้น hook_node_view () ใช้เพื่อเพิ่มภาพแรกเพื่อเป็นเนื้อหาของฟิลด์ใหม่ของคุณ
function HOOK_node_view($node, $view_mode, $langcode) {
if($node->type == 'NODE_TYPE' && $view_mode == 'teaser') {
//make sure there are images
if(!empty($node->field_images)) {
$node->content['primary_image'] = $node->content['field_images'][0];
//hide the original field with multiple images
hide($node->content['field_images']);
}
}
}
หมายเหตุ: หากคุณเปิดใช้งานชุดการแสดงผลคุณสามารถทำได้ในแท็บจัดการการแสดงผล