คำแนะนำเทมเพลตของหน้าไม่ทำงาน


12

ฉันสร้างธีมและมีไฟล์เทมเพลตของฉันในโครงสร้างนี้

  • /templates/page/page.tpl.php
  • /templates/page/page--node-type.tpl.php

ฉันได้สร้างเทมเพลตหน้าเว็บที่กำหนดเองแล้ว แต่ด้วยเหตุผลบางอย่าง Drupal ไม่ได้มารับเอง ฉันล้างแคชของฉันแล้วและพยายามเพิ่มฟังก์ชันตัวประมวลผลล่วงหน้านี้ในไฟล์ template.php ของชุดรูปแบบ แต่ก็ยังใช้งานไม่ได้

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);
  }

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม


/templates/page/page--node-type.tpl.php ควรเป็นเพจ - blog.tpl.php หรือไม่
Jeremy French

คำตอบ:


14

ดังที่รายงานไว้ในข้อเสนอแนะเทมเพลตของ Drupal 7 คำแนะนำเทมเพลตที่ใช้โดยค่าเริ่มต้นจาก Drupal 7 สำหรับหน้าคือหน้า - [front | internal / path] .tpl.php

สำหรับหน้าเว็บที่สามารถดูได้ที่http://www.example.com/node/1/edit Drupal จะค้นหาไฟล์เทมเพลตต่อไปนี้:

  • หน้า - โหนด - edit.tpl.php
  • หน้า - โหนด - 1.tpl.php
  • หน้า - node.tpl.php
  • page.tpl.php

หากต้องการเพิ่มคำแนะนำพิเศษธีมของคุณควรใช้template_preprocess_page ()และเพิ่มคำแนะนำใหม่ใน$variables['theme_hook_suggestions']( $variablesคือตัวแปรที่ส่งผ่านโดยอ้างอิงถึงฟังก์ชัน)

หากคุณทำเช่นนั้นเหตุผลเดียวที่ไฟล์เทมเพลตที่แนะนำนั้นไม่ได้ถูกใช้งานคือไฟล์นั้นมีชื่อไม่ถูกต้อง: ในกรณีที่หน้าแสดงหน้าหนังสือตัวอย่างเช่นไฟล์เทมเพลตควรเป็นหน้า - book.tpl .php คุณสามารถเปลี่ยนรหัสสำหรับธีมของคุณและปล่อยให้มันใช้หน้า - แม่แบบ node-type.tpl.php หากไม่พบแม่แบบเช่นหน้า - book.tpl.php

หากต้องการแจ้งให้ทราบด้วยว่าในtheme_get_suggestions () (ซึ่งเป็นฟังก์ชันที่เรียกใช้โดยtemplate_preprocess_page () ) ยัติภังค์จะถูกแทนที่ด้วย_และไม่ใช่ในทางกลับกัน เหตุผลที่ทำมีการอธิบายในความคิดเห็นที่รายงานในรหัสฟังก์ชั่น

// When we discover templates in drupal_find_theme_templates(),
// hyphens (-) are converted to underscores (_) before the theme hook
// is registered. We do this because the hyphens used for delimiters
// in hook suggestions cannot be used in the function names of the
// associated preprocess functions. Any page templates designed to be used
// on paths that contain a hyphen are also registered with these hyphens
// converted to underscores so here we must convert any hyphens in path
// arguments to underscores here before fetching theme hook suggestions
// to ensure the templates are appropriately recognized.
$arg = str_replace(array("/", "\\", "\0", '-'), array('', '', '', '_'), $arg);

5

ฉันใช้ Drupal 7.4 และฉันมีปัญหาเดียวกันและสิ่งเดียวที่ช่วยได้คือโพสต์นี้: วิธีเพิ่ม page.tpl ที่กำหนดเองตามประเภทเนื้อหา

จากโพสต์:

<?php
/**
* Variables preprocess function for the "page" theming hook.
*/
function THEME_NAME_preprocess_page(&$vars) {

  // Do we have a node?
  if (isset($vars['node'])) {

    // Ref suggestions cuz it's stupid long.
    $suggests = &$vars['theme_hook_suggestions'];

    // Get path arguments.
    $args = arg();
    // Remove first argument of "node".
    unset($args[0]);

    // Set type.
    $type = "page__type_{$vars['node']->type}";

    // Bring it all together.
    $suggests = array_merge(
      $suggests,
      array($type),
      theme_get_suggestions($args, $type)
    );

    // if the url is: 'http://domain.com/node/123/edit'
    // and node type is 'blog'..
    //
    // This will be the suggestions:
    //
    // - page__node
    // - page__node__%
    // - page__node__123
    // - page__node__edit
    // - page__type_blog
    // - page__type_blog__%
    // - page__type_blog__123
    // - page__type_blog__edit
    //
    // Which connects to these templates:
    //
    // - page--node.tpl.php
    // - page--node--%.tpl.php
    // - page--node--123.tpl.php
    // - page--node--edit.tpl.php
    // - page--type-blog.tpl.php          << this is what you want.
    // - page--type-blog--%.tpl.php
    // - page--type-blog--123.tpl.php
    // - page--type-blog--edit.tpl.php
    //
    // Latter items take precedence.
  }
}
?>

ขอบคุณมาก ... แสดงความสัมพันธ์ระหว่างคำแนะนำและชื่อเทมเพลตช่วยได้จริงๆ ขอขอบคุณอีกครั้ง :)
SGhosh

2

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

if (isset($variables['node'])) {
   // $variables['theme_hook_suggestions'][] = 'page__'. str_replace('_', '--', $variables['node']->type);
   //cannot get above working for some reason?
     $variables['theme_hook_suggestions'][] = 'page__' . $variables['node']->type;
  }

ดังนั้นคำแนะนำเทมเพลตสำหรับเนื้อหาประเภท front_page จะเป็นดังนี้:

หน้า - front_cover.tpl.php

คำแนะนำเทมเพลตรหัสสำหรับประเภทเนื้อหา 'ปัญหา' ที่น่าสนใจเกิดขึ้นในฐานะหน้า - issue.tpl.php โดยไม่จำเป็นต้องใช้สคริปต์ตัวประมวลผลล่วงหน้า!? นี่เพื่อจุดประสงค์ของฉันดูเหมือนว่าจะแทนที่เทมเพลตมุมมองที่ใช้เส้นทางที่คล้ายกัน

กล่าวคือ

เส้นทางดู = / ปัญหา / # แม่แบบข้อเสนอแนะขึ้นอยู่กับประเภทเนื้อหาเช่น / ปัญหา / # / front_cover


คำแนะนำเทมเพลตสำหรับประเภทเนื้อหา front_page สิ่งนี้จะไม่มีสคริปต์ตัวประมวลผลล่วงหน้า: หน้า - front-cover.tpl.php
sneha.kamble
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.