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


46

ฉันต้องการธีมของโหมดมุมมองผลการค้นหาด้วยเทมเพลต

ฉันมีมันในหัวของฉันที่ตั้งชื่อโหนดไฟล์แม่แบบ - บทความ - search-result.tpl.php จะทำเคล็ดลับ แต่ฉันผิดอย่างชัดเจนเกี่ยวกับที่

ฉันรู้ว่าฉันสามารถทำโหนด - article.tpl.php และในการตรวจสอบนี้ $ view_mode แต่สิ่งนี้น่าอึดอัดใจกับโหมดมุมมองอื่น ๆ ทั้งหมดที่ฉันไม่ต้องการเทมเพลต

ไอเดีย?

คำตอบ:


45

การเพิ่มคำแนะนำเบ็ดธีมในฟังก์ชั่นการประมวลผลล่วงหน้าโหนดควรทำเคล็ดลับ:

function MYMODULE_preprocess_node(&$vars) {
  if ($vars['node']->type == 'article' && $vars['view_mode'] == 'search_result') {
    $vars['theme_hook_suggestions'][] = 'node__article__search_result';
  }
}

หลังจากล้างแคชคุณควรจะสามารถใช้โหนด - article - search-result.tpl.php สำหรับชื่อไฟล์เทมเพลตของคุณ

NB คุณสามารถทำได้ในไฟล์ template.php ของชุดรูปแบบของคุณโดยการเรียกใช้ฟังก์ชันMYTHEME_preprocess_node()แทน


2
ยอดเยี่ยม! ขอขอบคุณ. เพิ่งจะเพิ่มลิงก์ไปยังคำแนะนำเดียวกันได้ที่นี่: mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes
artfulrobot

1
ไม่มีปัญหา :) เพียงแค่ FYI ได้search_resultถูกประกาศให้เป็นโหมดมุมมองดังนั้นคุณไม่จำเป็นต้องนำไปใช้hook_entity_info_alter()ในกรณีของคุณ
Clive

3

Entity โหมดมุมมองโมดูลเพิ่มข้อเสนอแนะแม่แบบเหล่านี้โดยอัตโนมัติ

ผู้สืบทอด Drupal 7 เป็นโหมด Buildซึ่งจะอนุญาตให้ผู้ดูแลระบบกำหนดโหมดมุมมองที่กำหนดเองสำหรับเอนทิตี เอนทิตีแบบกำหนดเองจะถูกเพิ่มในการลงทะเบียนเอนทิตีผ่าน hook_entity_info_alter () เพื่อให้สามารถใช้งานได้กับรหัสใด ๆ ที่ใช้เอนทิตีget_get_info () เพื่อจัดทำรายการมุมมองโหมดสำหรับเอนทิตี ซึ่งรวมถึงเขตข้อมูลโหนดและผู้ใช้อ้างอิงมุมมอง ฯลฯ


2

นี่คือฟังก์ชั่นที่ให้คุณเพิ่มใหม่ได้แบบไดนามิก นอกจากนี้ยังเรียกฟังก์ชัน preprocess ที่เกี่ยวข้องหากคุณมีประกาศ

จากนั้นโทรติดต่อdrush cache-clear theme-registryเพื่อให้ทำงานได้

เมื่อต้องการใช้แทนที่ THEME ด้วยชื่อธีมของคุณและวางไว้ในไฟล์ template.php ของธีมของคุณ

เช่นสำหรับชุดรูปแบบชื่อ Droid คุณจะเรียกมันว่าdroid_preprocess_node(&$variables, $hook) {...

function THEME_preprocess_node(&$variables, $hook) {
  $view_mode = $variables['view_mode'];
  $content_type = $variables['type'];
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode;
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode . '_' . $content_type;

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode . '_' . $content_type;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.