You are here

如何实现Page-nodetype.tpl.php(续)

g089h515r806 的头像
Submitted by g089h515r806 on 星期三, 2008-11-19 12:25

前面我写了篇文章,讲述了如何实现Page-nodetype.tpl.php模板,原文见: http://zhupou.cn/node/354. 这样实现以后,满足了 我的需要.

相安无事好几天了,一直这么用.今天,制作网站的首页,决定为首页单独制作一个页面模板page-front.tpl.php,然后里面稍微做了一下修改.但是没有看到效果.是不是自己写错了.检查了一遍,没有写错,把它拷贝一份并重命名为page-node-nid.tpl.php,其中nid为首页节点的id。还是不行,这个时候,我就想到了缓存。导航到admin/settings/performance,清空缓存数据,发现还是看不到变化。

我又拿新建的节点类型news为例,添加了page-news.tpl.php文件并作了修改,很快就看到了效果。当然,我还尝试修改了page.tpl.php,也能看到修改后的变化,但是page-front.tpl.php就是不起作用。

想到了一件事,那就是以前我为页面模板实现了实现Page-nodetype.tpl.php。是不是这里出了问题,我想应该就在这里。检查了一遍,是不是把原有的模板建议覆盖了?我在文件中搜索preprocess_page,找到了includes/theme.inc中对应的方法,将里面对应的$variables['template_files']代码一股脑的拷贝到了template.php文件中,结果代码如下:

if  ($node = menu_get_object()) {

    $vars['node'] = $node;

    $suggestions = array();

    $template_filename = 'page';

    $template_filename = $template_filename . '-' . $vars['node']->type;

     // Build a list of suggested template files in order of specificity. One

  // suggestion is made for every element of the current path, though

  // numeric elements are not carried to subsequent suggestions. For example,

  // http://www.example.com/node/1/edit would result in the following

  // suggestions:

  //

  // page-node-edit.tpl.php

  // page-node-1.tpl.php

  // page-node.tpl.php

  // page.tpl.php

  $i = 0;

  $suggestion = 'page';

  $suggestions = array();

  while ($arg = arg($i++)) {

    $suggestions[] = $suggestion .'-'. $arg;

    if (!is_numeric($arg)) {

      $suggestion .= '-'. $arg;

    }

  }

  if (drupal_is_front_page()) {

    $suggestions[] = 'page-front';

  }

    $suggestions[] = $template_filename;

    $vars['template_files'] = $suggestions;

   }

刷新页面,page-front.tpl.php模板文件终于起作用了,节点类型对应的模板文件Page-nodetype.tpl.php仍然可用。

记住,这里重新定义$vars['template_files']的时候,把原有的模板建议也要加上,不然会把以前的覆盖掉的。

论坛:

加入这个函数以后,我想为编辑页面(就是原来的page-node-edit.php)和删除页面(原来的page-node-delete.tpl.php),做一个模板,但是现在我做了这两个页面以后不管用了..
原因估计是story文章(比如node/1是story),调用了page-story.tpl.php,所以node/1/edit也调用了page-story.tpl.php,所以定义page-node-edit.php不起作用了
 
这个怎么解决呢??
 

g089h515r806 的头像

你可以定义一个优先级,page-node-edit.php得优先级高一些,page-story.tpl.php得低一些。
不过这里面可能还有问题。有时候,你可以看看换一种方式,能不能解决你的问题。有时候,不需要自己定义这样的模板文件的,现有的就已经够用了。