You are here

将drupal 5.x主题升级到drupal6.x

g089h515r806 的头像
Submitted by g089h515r806 on 星期一, 2008-09-15 01:50

对于Drupal6,有一个新的主题开发指南可用。

对于模块开发者,可参看该页:模块开发指南里面的使用主题层

Drupal 6.x主题变动概述

  1. 1,drupal主题现在也有了.info文件
  2. 2,drupal主题注册表
  3. 3,通过模板文件主题化
  4. 4,drupal模板管理
  5. 5,新的模板文件(.tpl.php)
  6. 6,新的模板命名建议
  7. 7,定义区块区域
  8. 8,区块区域变量名的改变
  9. 9,自定义主题设置
  10. 10,新的$signature变量
  11. 11,$body_classes变量
  12. 12,$language现在是一个对象了
  13. 13,drupal主题可以覆写内核或者模块定义的CSS文件
  14. 14,对RTL CSS的支持
  15.  15,“Submitted by user on date/time”这个也可以主题化了
  16. 16,jQuery升级到了1.2.3
  17. 17,默认的JavaScript文件
  18. 18,JavaScript主题化

 

 

drupal主题现在也有了.info文件

在Drupal5.x中,模块中包含了.info文件,用来存储该模块的原数据(比如,名称,描述,版本,依赖性,等等)。从Drupal6.x开始,主题也包含了.info file。更多信息可参看为主题编写.info文件一文

 

例如themeName.info(只列出部分信息):

name = Theme Name
description = One sentence description of theme.
core = 6.x
engine = phptemplate

 

drupal主题注册表

现在所有的函数都需要注册。在Drupal 5中,是不需要注册的。在Drupal 6.x中,新引入了hook_theme()函数,用来注册所有的可主题化的输出。PHPTemplate引擎负责注册,所以大多数时候,你都不需要手工注册。

  • 有个例外。那些没有默认主题实现的表单,将不会被注册。
  • 关于表单主题化的更多细节,可参看主题化手册中的例子
  • 非常重要的一点!每当你向你主题中添加一个新的主题函数或者模板时,必须清空注册表缓存!

 

 

通过模板文件主题化

在Drupal 5.x中,可以使用themeEngine_hook() 或者themeName_hook()来覆写默认的主题函数。你可以直接在template.php文件使用标识文本(markup),并将结果数据返回。

 

你还有另一种选择,就是使用_phptemplate_callback(),这样就允许主题函数使用单独的模板文件了(.tpl.php)。启用回调函数以后还允许钩子使用下面的方式操纵变量。

下面的代码在6.x中已不再被支持了:

<?php
function _phptemplate_variables($hook, $variables) {
  switch ($hook) {
    case 'page':
      // process variables for page hook.
    break;
    case 'node':
     // process variables for node hook.
    break;
  }
  return $variables;
}
?>

在Drupal 6.x中,已不再支持_phptemplate_callback()了。它已经被整合到theme()函数中了。一旦函数注册为了一个模板,那么就会使用该模板文件。_phptemplate_variables()也不再被支持了。为了在Drupal 6.x中添加额外的变量,可参看预处理文档

如果以普通函数来注册的话,这种方式就和drupal5.x中使用"themeEngine_hook()" 或者"themeName_hook()"来覆写一样了。

 

PHPTemplate自动的将钩子注册为一个普通函数或者一个模板。为了将函数注册为一个模板,你需要根据钩子名,创建一个".tpl.php"文件。例如,假如钩子为menu_tree,那么你drupal主题中的模板文件名就应该为menu-tree.tpl.php.注意,下划线改为了连字符。清空注册表,现在就可以了。

 相关链接: http://drupal.org/node/132442 , Think in Drupal

Drupal版本: