ฉันจะเพิ่มโหมดมุมมองเพิ่มเติมสำหรับโหนดได้อย่างไร


19

ฉันกำลังสร้างประเภทเนื้อหาที่กำหนดเอง โดยค่าเริ่มต้นโหนดสนับสนุนโหมดการดูสองโหมดเท่านั้น ( fullและteaser):

function mymodule_view($node, $view_mode)
{
    if ($view_mode == 'full') {
         $node->content['#theme']= 'my_full_node_view_theme';
    }

    if ($view_mode == 'teaser') {
          $node->content['#theme']= 'my_teaser_node_view_theme'; 
    }
    return $node;
}

ฉันต้องการเพิ่มโหมดมุมมองอื่น ๆ สำหรับประเภทโหนดนี้เช่น:

  • small_box
  • small_box_with_user_pic
  • big_box

และต้องการแสดงผลโหนดด้วยรหัสดังนี้:

$node = node_load($my_nid);
$output = drupal_render(node_view($node, 'big_box'));

ข้อเสนอแนะใด ๆ


2
ฉันพบmearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modesนี้อาจเป็นประโยชน์!
werqious

นี่คือการนำเสนอจาก Tim Cosgrove เกี่ยวกับโหมดมุมมอง: timcosgrove.net/drupalcon-viewmodes/#1คุณจะใช้hook_entity_info_alterเพื่อเพิ่มโหมดมุมมองใหม่ ( ตัวอย่าง )
aroo

งานนำเสนอนั้นยอดเยี่ยมมาก
niksmac

1
ลิงค์ที่กล่าวถึงโดยwerqiousถูกย้ายไปที่wunderkraut.com/NowOnWunderkraut/mearra/430
Andrey Rudenko

หน้านี้หายไป สไลด์อยู่ที่นี่แล้ว: slideshare.net/Phase2Technology/ …
Kari Kääriäinen

คำตอบ:


23

ก่อนอื่นเราต้องเพิ่มโหมดการดูเพิ่มเติมด้วย hook_entity_info_alter

function customuserblog_entity_info_alter(&$entity_info) {
     $entity_info['node']['view modes']['blog_post_big'] = array(
        'label' => t('simple big  teaser'),
        'custom settings' => TRUE,
      );
    }

// เราอาจแนบฟังก์ชั่นธีมเพิ่มเติมหรือแม่แบบและเพิ่มตัวแปรด้วย hook_view

function customuserblog_view($node, $view_mode) {
  if ($view_mode == 'blog_post_big') {
   // add some additional variables for template
    $node->content['#theme'] = 'custom_blog_big_teaser_view';
  }
}

// ในธีมของเรา

customuserblog_theme(){
    return array(
      'custom_blog_big_teaser_view'= array(
          'render element' => 'form',
          'template' => 'custom-blog-big-teaser-view',
       ),

    );
}

ฉันใช้โซลูชันของคุณ มันเป็นเรื่องที่ดี แต่ hook customuserblog_view ($ node, $ view_mode) ใช้งานไม่ได้ ดังนั้นฉันจึงใช้ hook_preprocess_node พร้อมกับฟังก์ชั่น anonymous_profile_preprocess_node (& $ vars) เพื่อสร้าง tpl ที่กำหนดเองสำหรับโหมดมุมมองที่กำหนดเอง
Mehrdad201

ฉันได้เพิ่มความคิดเห็นเกี่ยวกับ hooks ที่ใช้ในรหัสนี้
werqious

10

หากสิ่งที่คุณต้องการคือโหมดมุมมองกำหนดเองโหมดเอนทิตีมุมมองสามารถช่วยได้ Display Suiteยังทำให้การสร้างโหมดมุมมองกำหนดเองสร้างฟิลด์หลอกใหม่ได้ง่ายและมีอินเทอร์เฟซการลากและวางที่ดีสำหรับการจัดวางองค์ประกอบต่าง ๆ ในโหมดมุมมองต่างๆ

หากคุณต้องการทำสิ่งนี้ทั้งหมดในรหัส entity_example จากโมดูลตัวอย่างมีโหมดมุมมอง IIRC Drupal Commerce ยังมีเอนทิตีที่กำหนดเองจำนวนมากที่มีโหมดมุมมองที่กำหนดเอง


ขอบคุณ แต่การติดตั้งโมดูลเพิ่มเติมไม่ได้ชื่นชมขอบคุณสำหรับโมดูลนี้แฮ็ครหัสโมดูลอาจจะทำให้บางสิ่งบางอย่างที่เป็นประโยชน์
werqious

@werqious อัปเดตคำตอบ
Andy

1

หากคุณใช้ Display Suite ตรวจสอบให้แน่ใจว่าเปิดใช้งานโมดูล ds_ui แล้วและไปที่ผู้ดูแลระบบ / โครงสร้าง / ds / view_mode เพื่อรับรายการที่มีอยู่และสร้างโหมดมุมมองใหม่


1

ฉันรู้ว่านี่เป็นหัวข้อที่เก่ากว่า แต่ฉันได้พบวิธีต่อไปนี้เพื่อใช้งานได้ดีสำหรับกรณีการใช้งานส่วนใหญ่

ขั้นตอนง่าย ๆ เหล่านี้จะนำคุณไปสู่การสร้างโมดูลของคุณเองด้วยโหมดมุมมองใหม่ มันค่อนข้างง่าย ฉันชอบที่จะให้การระบุแหล่งที่มา แต่ฉันจำไม่ได้ว่าฉันพบที่ใดบนพื้นฐานของสิ่งนี้ มันทำตามตรรกะเดียวกันกับคำตอบของ werqious

ไฟล์ 1: my_module_view_modes.module

<?php
//Add more view modes for content type displays, in addition to default and teaser.
function almagest_view_modes_entity_info_alter(&$entity_info) {

//NB: media_ prefix required.
//You can repeat the following section for any view modes you'd like to create.

// First View Mode
// tag 1 references the entity type, ex. node or file
// tag 3 provides a machine name for your mode
  $entity_info['node']['view modes']['my_view_mode'] = array(
    'label' => t('My View Mode'), // This is what you'll see in your "Manage Display" tab.
    'custom settings' => TRUE,
  );

// Another View Mode    
  $entity_info['file']['view modes']['my_other_view_mode'] = array(
    'label' => t('Another View Mode'),
    'custom settings' => TRUE,
  );
}

ไฟล์ 2: my_module_view_modes.info

name = My Module View Modes
description = Add additional "View Modes" for entities in this module. Helpful for additional displays in views or node rendering.
package = My Modules
version = 7.x - 0.1
core = 7.x

บันทึกสองไฟล์เหล่านี้ในโฟลเดอร์ my_module_view_mode ในโฟลเดอร์โมดูลและเปิดใช้งาน ล้างแคชของคุณและตอนนี้คุณจะเห็นโหมดมุมมองใหม่ในเอนทิตีที่เกี่ยวข้อง


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