Drupal6 pro Drupal development(专业开发指南)TheThemeSystem主题系统
你有没有见过Drupal核心中是怎么调用这些主题函数的?你永远都不会看到直接调用theme_breadcrumb()的情况。替代的,它通常包装在帮助函数theme()中。你期望这样调用这个函数:
theme_breadcrumb($breadcrumb)
但实际不是这样。替代的,你将看到开发者这样调用:
theme('breadcrumb', $breadcrumb);
这个通用的theme()函数负责初始化主题层,并将函数调用分发到合适的位置,这使得我们能够以更优雅的方式来解决我们的问题。图8-5展示了通过调用theme(),指示Drupal按照下面的次序查来找相应的面包屑函数。
假定你使用的主题为Greyscale,,它是基于PHPTemplate的主题,那么Drupal将会查找下面的函数(我们暂且忽略一下breadcrumb.tpl.php):
greyscale_breadcrumb()
phptemplate_breadcrumb()
sites/all/themes/custom/greyscale/breadcrumb.tpl.php
theme_breadcrumb()
我们看到函数phptemplate_breadcrumb()可以覆写内置的面包屑函数,那么我们要把这个函数放到哪里呢?
很简单,那就是你主题的template.php文件,在这里你可以覆写Drupal的默认主题函数,拦截和创建传递给模板文件的自定义变量.
注意 在做这些练习的时候,不要使用Garland作为当前主题,因为Garland已经有了一个template.php文件.替代的,在这里可以使用Greyscale或者Bluemarine.
为了修改Drupal的面包屑,创建文件sites/all
/themes/custom/greyscale/template.ph,并将theme.inc中的
theme_breadcrumb()函数复制 并粘贴到该文件里面。记住要包含<?php标签。还有对函数要进行重命名,将theme_breadcrumb改为
phptemplate_breadcrumb。接着,导航到“管理 站点构建 模块”以重新构建主题注册表,这样Drupal就能够找到你的新函数了。
<?php
/**
* Return a themed breadcrumb trail.
*
* @param $breadcrumb
* An array containing the breadcrumb links.
* @return a string containing the breadcrumb output.