我有一个自定义主题,我们称之为“MyTheme”。在template.php文件中,我有一个名为“MyTheme_MyFunction。”的函数。
在我的page.tpl.php中,我应该能够这样做:
<?php print theme('MyFunction'); ?>
或者,我是否必须这样做:
<?php print MyTheme_Function(); ?>
我知道后者有效,但前者不应该工作吗?
答案 0 :(得分:4)
您应该始终通过theme()
功能调用主题功能,如第一个示例所示:theme('MyFunction')
。如果你不这样做,你就会破坏Drupal主题系统,不允许其他模块开发人员有效地覆盖你的输出。
在编写自己的主题函数时,不要忘记使用hook_theme
(解释here)向主题注册表注册主题函数。如果您不这样做,则调用theme('MyFunction')
将无效。在最初注册该函数后,不要伤害清除缓存。
例如,在主题的template.php中,您可以定义自己的theme_image
函数来覆盖Drupal核心处理图像的方式。你可以命名你的函数name_of_theme_image
并开始重写它返回的内容。如果theme_image
并不总是被称为theme('image')
,那么您将无法利用此覆盖行为,因为theme()
充当主题函数的单一入口点和委托者。您的主题功能也是如此。
答案 1 :(得分:1)
第一个肯定有效,但是要这样做,你需要告诉Drupal你的主题函数在hook_theme()中(即主题的template.php中的MyTheme_theme()),然后清除你的主题缓存。
有关详细信息,请参阅http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_theme/6。
答案 2 :(得分:0)
您可以使用preopreocess页面钩子
function themename_preprocess_page(&$variables) {
$variables['custom_name'] = function_name();
}
然后在page.tpl.php中你可以使用 这是变量传递给tpl文件的方式。
对于node.tpl.php,您也可以使用
function themename_preprocess_node(&$variables) {
}