วิธีการเปลี่ยนโหมดมุมมองโดยทางโปรแกรม?


11

ฉันต้องการเปลี่ยนโหมดการดูของโหนดโดยทางโปรแกรม ฉันใช้hook_preprocess_node(&$vars)และตั้งค่าโหมดดู:

function moduleName_preprocess_node(&$vars) {
      // if conditions to apply particular view mode
      $vars['view_mode'] = 'teaser';
      $vars['elements']['#view_mode'] = 'teaser';
}

แต่สิ่งนี้ไม่ทำงานตามที่คาดไว้ ฉันทำอะไรบางอย่างหายไปหรือเปล่า


คุณลองทบทวนสิ่งนี้หรือไม่? drupal.org/node/1334206
chrisjlee

คำตอบ:


13

การเปลี่ยนโหมดมุมมองในฟังก์ชั่น preprocess กำลังจะสายเกินไป
วิธีที่ถูกต้องในการแก้ไขโมดูลมุมมองคือการนำhook_entity_view_mode_alter ()ซึ่งถูกเรียกใช้ก่อนที่จะแสดงเนื้อหาเอนทิตี ยกตัวอย่างเช่นในnode_view () , ตะขอที่ถูกเรียกจากnode_build_content ()node_view()ซึ่งเป็นฟังก์ชั่นเป็นครั้งแรกเรียกจาก

  if (!isset($langcode)) {
    $langcode = $GLOBALS['language_content']->language;
  }

  // Populate $node->content with a render() array.
  node_build_content($node, $view_mode, $langcode);

4
ขอบคุณ. โปรดทราบว่าตะขอนี้ต้องใช้ drupal> = 7.17
cissharp

6

ถ้าคุณต้องการเพียงแค่เปลี่ยนมันสำหรับบางหน้าผมขอแนะนำโหมดดูหน้า มันค่อนข้างมีประโยชน์และใช้งานง่าย


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