模板管理
现在,可以将模板文件放到主题下面的子目录中,这样管理起来就更方便了。PHPTemplate引擎将查找主题目录下的所有文件,并将它们的位置登记器来。对于文件夹的嵌套深度则没有限制。
新的模板文件(.tpl.php)
在drupal5.x中,phptemplate.engine实现了下面的模板(在drupal题引擎文件夹下):
在Drupal6.x中,模板的应用更加广泛,现在默认模板文件更多了,而将来这个数量还会增加。Drupal5.x的PHPTemplate中的模板也被移走了。对于这些模板的用法,以及可用变量,你可以参看模板文件中的注释,里面有详细的说明。
为了覆写这些模板,你所要做的就是将它们拷贝到你的主题文件夹下,并清空主题注册表。
参看主题化手册中的新模板的完整列表。
一些很少使用的默认内核函数,由于模板能够起到同样的功能,所以这些函数被取消了。例如,theme_page就不存在了。这影响到了所有转化为模板的可主题化的输出。由于这种改变,是用另一种方式实现同样的功能,所有原有的实现(默认函数)就没有必要继续保留下来了。这一改变对用户没有任何影响。比如,现在你仍然可以使用theme('page'),虽然theme_page被取消了。这里所改变的仅仅是默认的实现。
新的模板命名建议
模板建议,对于page.tpl.php,是基于路径的;node.tpl.php是基于节点类型的;block.tpl.php是基于区域和模块的。对于前面提到的模板,同样也提供了相应的建议。
参看主题化手册中的新模板建议的完整列表。
定义区块区域
hook_regions已不再被支持了。现在可通过.info文件来定义区域。更多细节可参看手册页面。
regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content] = Content
regions[header] = Header
regions[footer] = Footer
区块区域变量名的修改
边栏和页脚区块区域的变量名改变了。
在Drupal5.x中,page.tpl.php内部的"left", "right" 和"footer"区域所使用的变量为$sidebar_left, $sidebar_right 和 $footer_message。这种用法源于Drupal4.6及更早版本。
为了更加清晰直接,现在这三个区域的变量名分别为$left, $right 和$footer,这和其它区域保持了一致。$footer_message仍然可以使用,但它仅仅用于站点信息管理界面的的脚本信息。
自定义主题设置
主题作者制作的主题,现在更方便被站点管理员定制了。
在Drupal的管理界面,每个主题在admin/build/themes/settings/themeName下面都有自己的配置页面。这个页面中包含了一个表单,里面有标准的“Logo image settings” 和“Shortcut icon settings”等等。为了向这个表单添加其它的设置,在主题目录下面简单的创建一个theme-settings.php文件,并向其中添加一个themeName_settings() 或者themeEngineName_settings()函数。这个函数应该使用表单API来创建表单组件。
更多信息可参看主题开发指南手册的定制主题设置一文。
新的$signature变量
在Drupal6总,签名是动态的,这意味着当查看一个评论时才展示它们,而签名不再是评论本身的一部分了。因此,在comment.tpl.php中需要加一个$signature变量。
在Drupal5.x中:
<div class="content">
<?php print $content; ?>
</div>
在Drupal6.x中:
<div class="content">
<?php print $content ?>
<?php if ($signature): ?>
<div class="user-signature clear-block">
<?php print $signature ?>
</div>
<?php endif; ?>
</div>
注意:为了避免为旧的帖子展示两次签名,你可以这样:
<div class="content">
<?php print $content ?>
<?php if ($signature && $comment->cid > 1234): // Change "1234" to the last comment ID used before upgrading to Drupal 6 ?>
<div class="user-signature clear-block">
<?php print $signature ?>
</div>
<?php endif; ?>
</div>