ชื่อไฟล์เทมเพลตของผู้สมัครสำหรับรายการประเภทเนื้อหาที่กำหนดเองโดยเฉพาะ


11

ฉันกำลังทำงานกับเว็บไซต์ Drupal 7 ฉันสร้างประเภทเนื้อหาที่กำหนดเองสำหรับงาน ฉันมีหลายฟิลด์และบางฟิลด์เกี่ยวข้องกับเลย์เอาต์ของหน้าเช่นหน้า bg เฉพาะสำหรับแต่ละรายการ ดังนั้นฉันต้องการ page.tpl ที่กำหนดเองสำหรับประเภทเนื้อหานี้โดยเฉพาะ

ดังนั้นฉันจึงเปิดใช้งานและเปิดโมดูล Theme Developer และคลิกพื้นที่ส่วนเนื้อหาเพื่อรับชื่อผู้สมัครสำหรับรายการหน้าประเภทเนื้อหานี้โดยเฉพาะ และมันทำให้ฉันเห็นหน้าจอด้านล่างซึ่งไม่ได้มีความหมายอะไรกับฉัน: / เมื่อฉันคลิกที่พื้นที่โหนดมันก็ดีมันให้โหนด - work.tpl.php แต่ฉันต้องการหน้า ฉันลอง "หน้า - work.tpl.php" มันไม่ทำงาน

ฉันกำลังคิดถึงอะไร

ป้อนคำอธิบายรูปภาพที่นี่

คำตอบ:


12
function mytheme_process_page(&$variables) {
    $variables['theme_hook_suggestions'][] = 'page__'. $variables['node']->type;
}

สมมติว่าชื่อประเภทเนื้อหาที่เครื่องอ่านได้ของคุณคือ "งาน" หน้า - work.tpl.php จะทำงาน

อ้างถึงหัวข้อนี้สำหรับข้อมูลเพิ่มเติม


ว้าว! มันใช้งานได้ดี! ฉันสามารถที่อยู่ไปยังหน้า - work.tpl.php ตอนนี้ :) แม้ว่ามันจะทำงานได้ดีฉันมีข้อผิดพลาดเป็นd.pr/EaMa ฉัน googled และพยายามที่จะแก้ปัญหายังคงพยายาม ... ความคิดใด ๆ ? ขอบคุณมากสำหรับเวลาของคุณ !!
Drupal guy

โอ้ฉันคิดว่ามันเป็นเพราะโมดูล Theme Developer ฉันปิดการใช้งานโมดูลและข้อผิดพลาดได้หายไป :) ขอบคุณมาก!
Drupal guy

2

ใน template.php เพิ่ม:

function themeName_preprocess_page(&$vars) {
  if (isset($vars['node'])) {
    // If the node type is "blog" the template suggestion will be "page--blog.tpl.php".
    $vars['theme_hook_suggestions'][] = 'page__'. str_replace('_', '--',    $vars['node']->type);
  }
}

คุณสามารถละเว้นstr_replace(); ทดสอบเวอร์ชันที่ดีที่สุดสำหรับคุณ

จากนั้นสร้างไฟล์เท็มเพลตที่มีชื่อไฟล์คือหน้า –- [content_type] .tpl.php (แทนที่ [content_type] ด้วยชื่อเครื่องประเภทเนื้อหา)

ดูhttp://drupal.org/node/1089656#comment-4426790


1

ในกรณีที่คุณต้องการ node id ให้ใช้สิ่งนี้

function mytheme_process_page(&$variables) {
  if (isset($variables['node'])) { 
    $variables['theme_hook_suggestions'][] = 'page__type__'. $variables['node']->type;
    $variables['theme_hook_suggestions'][] = 'page__node__' . $variables['node']->nid;
  }
}

0

การมีเทมเพลตที่แตกต่างกันสำหรับแต่ละประเภทเนื้อหานั้นไม่ใช่วิธีปฏิบัติที่ดีตามพวกที่ Drupal นั่นคือเหตุผลที่คุณไม่พบpage--work.tpl.phpในรายการไฟล์เทมเพลตของผู้สมัคร พวกเขารู้สึกว่าไฟล์เทมเพลตโหนดเท่านั้นควรแตกต่างกัน อย่างไรก็ตามหากคุณต้องการแฮ็คเข้าไปข้างใน

ใช้นามแฝงเส้นทางเพื่อตั้งค่าเส้นทางตามประเภทเนื้อหา แล้วใส่รหัสนี้

 if (module_exists('path')) {
    $alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
    if ($alias != $_GET['q']) {
      $template_filename = 'page';
      foreach (explode('/', $alias) as $path_part) {
        $template_filename = $template_filename . '-' . $path_part;
        $vars['template_files'][] = $template_filename;
      }
    }
  }

ใน phptemplate_preprocess_page(&$vars)ฟังก์ชั่นในtemplate.phpโฟลเดอร์ธีม

คุณสามารถปรับเปลี่ยนรหัสเล็กน้อยเพื่อให้มีประสิทธิภาพมากขึ้น

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