จำกัด ทีเซอร์เพื่อแสดงเฉพาะค่าแรกของฟิลด์


14

ฉันมีประเภทเนื้อหาพร้อมฟิลด์ภาพ โดยทั่วไปแล้วฟิลด์นี้จะมีค่า 0 ถึง 4 โดยค่าเริ่มต้นทีเซอร์สำหรับประเภทเนื้อหานี้จะส่งออกรูปภาพทั้งหมด 0 ถึง 4 ภาพ ฉันจะปรับ Teaser ให้แสดงเฉพาะภาพแรกได้อย่างไร

คำตอบ:


12

สร้างโมดูลที่กำหนดเองแทนที่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 ()สำหรับรายละเอียดเพิ่มเติม


ดูเหมือนว่าฉันจะลอง อาจใช้เวลาสองสามวันก่อนที่ฉันจะนำไปใช้และรายงานกลับ ฉันค่อนข้างใหม่ในการเขียนโมดูลดังนั้นฉันมีคำถามสองสามข้อ: (1) โค้ดตัวอย่างของคุณจะทำงาน (ไม่ผิดพลาด) เมื่อมีค่าศูนย์ในฟิลด์และ (2) จะทำงาน (ไม่ผิดพลาด) เมื่อมี ประเภทเนื้อหาอื่น ๆ ที่ไม่มีฟิลด์ภาพ? ขอบคุณ!
เกร็ก

1) ใช่มันควรจะเป็น 2) if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE')คุณสามารถเปลี่ยนถ้ามีคำสั่งให้เป็น
tim.plunkett

4
หรือเพียง & & isset ($ เอนทิตี้ -> เนื้อหา ['field_image']) จากนั้นคุณไม่จำเป็นต้องอัปเดตโค้ดเมื่อเพิ่มฟิลด์ในประเภทเนื้อหาอื่นหรือเปลี่ยนชื่อหนึ่งหรือ .. :)
รหัส

อืมม สิ่งนี้อาจใช้งานได้ แต่เป็นตัวอย่างของการใส่รหัสสิ่งที่ควรอยู่ในธีม
artfulrobot

มันจะใช้งานได้ แต่ถ้าคุณแก้ปัญหาคิดเช่นนี้ด้วยรหัสที่กำหนดเองเว็บไซต์จะได้รับการบำรุงรักษาน้อยลงในอนาคต ใช้โมดูลจาก drupal.org ที่กล่าวถึงในคำตอบอื่น ๆ แทน
Bobík

12

ไม่จำเป็นต้องเขียนรหัสที่กำหนดเอง

ลองใช้โมดูลขีด จำกัด หลายสนาม

ช่วยให้คุณสามารถเข้าสู่การตั้งค่าการแสดงผลสำหรับประเภทเนื้อหาของคุณและกำหนดค่าการตั้งค่าทีเซอร์เพื่อแสดงเฉพาะค่าจำนวนหนึ่ง คุณสามารถทำให้ข้ามขั้นตอนตัวอย่างเช่นหากคุณต้องการให้แสดงค่า 2 ถึง 5

.


4

หากใช้เทมเพลตทีเซอร์ (เช่น: node - CONTENT-TYPE - teaser.tpl.php ) สิ่งนี้จะทำงาน:

  <?php print render($content['IMAGE-FIELD'][0]); ?>

1

ฉันใช้ 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']);
    }
  }
}

หมายเหตุ: หากคุณเปิดใช้งานชุดการแสดงผลคุณสามารถทำได้ในแท็บจัดการการแสดงผล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.