drupal模板定制总结

适用于DP7,别的版本不清楚。

1、不同内容类型,不同的内容风格。
复制node.tpl.php并改名为node–nodetype.tpl.php,文件名中的nodetype表示内容类型,如:新建一个叫作test的内容类型。
就可以创建node–test.tpl.php来专门针对这种类型的内容类型定制模板。注意:node后面跟的是两个横线。
这样定制,其实也不够灵活。模板内包含一句:
print render($content);
来显示内容,但是$content变量里面包括了很多样式和HTML结构。这些东西,node–test.tpl.php根本没办法处理,只能原样显示出来。如果需要更细粒度的定制。就需要用到$node变量了。
这个变量可以在node–test.tpl.php中直接使用,它包含了这个节点所有的信息。所有字段的值都可以从中看到。如果你想查看它具体内容,在ode–test.tpl.php里var_dump($node)就OK了。
更详细参考:http://drupal.org/node/11816,一段简单的读取node对像数据的代码:

1
2
3
4
5
6
7
8
9
10
11
//body和field_summery是创建内容类型时定义的字段名,$teaser表示是否在列表页
if (!$teaser):
    print '<div style="border:#0f0 1px solid;">';
    print $node->body['und'][0]['safe_value'];
    print '</div>';
endif;
if ($teaser):
    print '<div style="border:#0f0 1px solid;">';
    print $node->field_summery['und'][0]['safe_value'];
    print '</div>';
endif;

2、不同内容类型,不同的页面布局
根据内容类型,选择不同的page.tpl.php,网上有教程,没试过,不写了。

3、不同的内容,不同的页面布局
参考一篇很好的文章:http://ninghao.net/blog/364
文件名:page–node–1.tpl.php,表示为node id为1的内容定义布局

4、不同的区块,不同的内容风格
block–block-1.tpl.php

另:
page–block-1.tpl.php没试过,不确定能不能根据block定制而已。
取NODE里的图片地址:

1
<?php print(image_style_url("large",$node->field_image['und'][0]['uri'])); ?>

上面的方式取到的图片,默认地址在:sites\default\files\styles\下,而且,支持的第一个参数为large或者thumbnail。但这种取地址方式,存在问题:取到的图片是经过DRUPAL处理后的地址,如果我们要取原始上传时的图片的地址,则需要用到另一个函数file_create_url:

1
<?php print(file_create_url($node->field_image['und'][0]['uri']));?>

关于定制html.tpl.php
如果一个主题下需要多个html.tpl.php,一种方式,可以根据NODE ID来设定模板:
html–node–16.tpl.php
但这样不是很方便,如果有很多个NODE就很烦了,另一种方式,根据content type:
template.php:

1
2
3
4
5
6
7
function yourthemename_preprocess_html(&$vars) {
  if ($node = menu_get_object()) {
    if($node->type == "lab") {
      $vars['theme_hook_suggestions'][] = 'html__lab';
    }
  }
}

创建html–lab.tpl.php,供上面调用。
申明:代码里是下划线__,文字名是中滑线 –。没试过这样是不是正确。后来诸君自已测试吧。
详情见文章:http://drupal.org/node/1041768

经常会使用arg函数来判断url参数。

drupal模板定制总结》上有5条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注