Drupal6 pro Drupal development(专业开发指南)TheThemeSys(16)
发布时间:2021-06-06
发布时间:2021-06-06
Drupal6 pro Drupal development(专业开发指南)TheThemeSystem主题系统
用theme('node')。根据所启用的主 题,theme_node()将用来生成HTML,或者使用一个名为node.tpl.php的模板文件来生成HTML。
可以在多个层次上,对这个流程进行覆写。例如,主题可以覆写内置的主题函数,所以,当调用theme('node')时,那么将会调用 greyscale_node(),而不是默认的theme_node()。模板文件也有命名约定,我们将在后对它进行讲解,所以,模板文件node- story.tpl.php将专门负责Story类型的节点。 覆写可主题化的项目
Drupal的主题系统背后的核心哲理和钩子系统的类似。通过遵循命名规范,就可以标识出哪些函数是主题相关的函数,它们负责格式化并返回你站点的内容,或者使用模板文件负责输出HTML内容。
覆写主题函数
正如你看到的,可主题化的项目是通过它们的函数名来标识的,每个函数名前都带有前缀“theme_”, 或者还可以通过模板文件来标识。这一命名规范使得Drupal能够为所有的可主题化函数创建一个函数覆写机制。这样,设计者就可以指示Drupal执行一 个具有更高优先级的自定义函数,从而替代开发者在模块中给出的默认的主题函数,或者替代Drupal的默认模板文件。例如,让我们检查一下,在构建站点的 面包屑时该流程是怎么工作的。
打开includes/theme.inc文件,并检查里面的函数。这里的许多函数都以theme_开头,这就告诉人们它们是可以被覆写的。特别的,我们看看
theme_breadcrumb():
/**
* Return a themed breadcrumb trail.
*
* @param $breadcrumb
* An array containing the breadcrumb links.
* @return a string containing the breadcrumb output.
*/
function theme_breadcrumb($breadcrumb) {
if (!empty($breadcrumb)) {
return '<div class="breadcrumb">'. implode(' » ', $breadcrumb) .'</div>'; }
}
这个函数控制着Drupal中面包屑导航条的HTML输出。当前,它在面包屑的每一项之间添加了一个向右的双箭头分隔符(»)。假定你想将div标签改为span标签,并使用星号(*)来代替双箭头(»)。那么你该怎么办呢?一种方式是在theme.inc中修改这个函数,保存,并调用。这样也能达到目的。(别!别!千万别这样做!)。我们有更好的方式。