$body_classes变量
在page.tpl.php中,可通过下面的方式得到布局的状态:
在Drupal5.x中,<?php print $layout; ?>将根据当前所用的边栏输出左栏(left),右栏(right),或者全部(both)。
在Drupal6.x中,还可以使用$body_classes。<?php print $body_classes; ?>将会输出类似下面的东西:
front logged-in node-type-page no-sidebars
它提供了如上面所示的CSS类。更多信息可参看:
http://drupal.org/node/171906
$language现在是一个对象了
PHPTemplate主题中的$language变量现在已不再是一个简单的保存当前浏览页面语言代码的字符串了,现在它是一个对象,包含了当前语言的多个属性。现在你可以为你的主题实现从右到左的兼容,这样你的主题就可以应用到从右到左的语言中了(比如希伯来语,其中http://www.drupal.org.il/就是一个很好的例子)
$language具有属性$language->language,用于当前语言的代码,而$language->direction则是一个整数(0(LANGUAGE_LTR)表示从左向右,1(LANGUAGE_RTL)表示从右向左)。如果你所关心的仅仅是升级你的主题,只需要将$language改为$language->language就可以了。
主题可以覆写内核或者模块定义的CSS文件了
通过使用drupal_add_css(),来添加一个同名的样式表,主题就可以替换模块定义的CSS文件了。这允许主题在需要的时候,覆写整个CSS文件,而不是特定的CSS选择器。
例如,如果将下面的代码放到Garland的template.php文件中,那么themes/garland/system-menus.css将会取代modules/system/system-menus.css:
<?php
drupal_add_css(path_to_theme() .'/system-menus.css', 'theme');
?>
支持RTL CSS覆写文件
为了更好的支持从右到左的语言,对于每个使用drupal_add_css()添加到页面模板的CSS文件来说,都可以拥有一个与之对应的从右到左的CSS文件。例如,style.css,在同一个目录下面,还可以包含一个style-rtl.css文件。style-rtl.css包含的就是对style.css中样式的覆写,这里只包含从右到左样式的覆写。Drupal内核为内置的模块和主题都包含了这样的RTL CSS文件。按照习惯,在原始CSS文件中要被覆写的CSS规则后面需要加上一个/* LTR */注释,这样当维护者需要修改CSS文件时,他就会注意到RTL CSS也需要修改。只有当前语言为RTL时,才会加载这些CSS文件。
摘自modules/system/defaults.css文件的一段:
th {
text-align: left; /* LTR */
padding-right: 1em; /* LTR */
border-bottom: 3px solid #ccc;
}
摘自modules/system/defaults-rtl.css文件的一段:
th {
text-align: right;
padding-right: inherit;
padding-left: 1em;
}
“Submitted by user on date/time”可被主题化
节点和评论的"submitted"元素成为了一个可以主题化的元素。这意味着你可以覆写要包含的信息,以及它的外观。
你可以添加自定义的id/class,你可以包含或多或少的信息,甚至根据节点或者评论类型的不同使用不同的外观。
实例,可参看garland主题的template.php文件。
jQuery升级到1.2.3
Drupal包含的jQuery JavaScript库已被升级到1.2.3版。
默认的JavaScript文件
与style.css类似,可以将script.js自动添加到主题的页面模板中。这个文件应放在主题的根目录下面。通过.info文件,可以修改这个文件名,以及添加更多的这类文件。
JavaScript主题化
现在在JavaScript代码中引入了一个主题化机制。和script.js的自动加载一起,这使得主题开发者在Drupal网页的脚本事件领域拥有了更大的灵活性。通常,JavaScript代码生成的HTML都是直接插入到页面中的。然而,这些HTML代码通常是硬编码到脚本中的,它不允许对插入的代码进行修改。
模块在Drupal.theme.prototype命名空间下提供了默认的主题函数。而主题应该直接将覆写函数放在Drupal.theme命名空间下。脚本将调用Drupal.theme('function_name', ...),由这个函数来决定决定究竟是采用主题提供的函数还是默认的函数。
JavaScript的主题函数,在返回类型上,是完全自由的。它可以是简单的字符串,也可以是复杂的数据类型,比如一个大对象,里面包含几个小的jQuery对象,而小对象里面又包含着DOM元素。自定义主题函数的返回类型,应该和默认主题函数保持一致。