在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
是否简单来说就是为了不同分类的文章显示不同的风格,包括布局
是否简单来说就是为了不同分类的文章显示不同的风格,包括布局和配色等等呢
可以这么理解吗?
可以这么理解吗?就是自己在template.php里定义了个函数,覆盖了原有输出,使story节点的类型的模板为node-story.tpl.php这样的格式。