You are here

如何实现Page-nodetype.tpl.php

g089h515r806 的头像
Submitted by g089h515r806 on 星期四, 2008-11-06 16:03

在drupal中,page的默认模板建议是根据url进行判断的,对于首页,则使用page-front.tpl.php。对于大多数时候,这都可以满足需要。但是可不可以根据节点的类型来定义其页面模板文件呢?就是说节点类型为A的节点页面,使用page-A.tpl.php,对于节点类型为B的节点页面使用page-B.tpl.php。很多人问过我这样的问题。

 

可以这样,可以使用Page-nodetype.tpl.php这种形式。但是你需要在预处理函数中,加点东西。在继续本文以前,先介绍一个最简单的方法。

 

那就是在page.tpl.php模板中写if语句,因为page.tpl.php中,存在变量$node,所以在这里你可以判断节点的类型,然后分别在每个类型下面,加上相应的模板内容。

 

这种是最简单的方法,也是最直接的方法,但是不是drupal的方式实现的。实际上,默认的模板建议不够用的时候,你还可以添加。在哪里添加,就是在template文件中,添加一个函数themename_preprocess_page,然后在里面输入相应的逻辑就好了。

 

函数如下:

function themename_preprocess_page(&$vars) {

if  ($node = menu_get_object()) {

    $vars['node'] = $node;

    $suggestions = array();

    $template_filename = 'page';

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

    $suggestions[] = $template_filename;

    $vars['template_files'] = $suggestions;

   }

}

 

注意,这里,你需要把themename替换为你的主题名称。如果你的主题就是基主题的话,那么也可以使用phptemplate。

 

加了这个函数,你就可以使用page-A.tpl.php,page-B.tpl.php,这里的A,B为节点类型。

相关链接: http://zhupou.cn

论坛:

097633q 的头像

可以这么理解吗?就是自己在template.php里定义了个函数,覆盖了原有输出,使story节点的类型的模板为node-story.tpl.php这样的格式。