在Drupal中调用自定义主题函数的正确方法是什么?

时间:2011-03-29 03:02:59

标签: drupal

我有一个自定义主题,我们称之为“MyTheme”。在template.php文件中,我有一个名为“MyTheme_MyFunction。”的函数。

在我的page.tpl.php中,我应该能够这样做:

<?php print theme('MyFunction'); ?>

或者,我是否必须这样做:

<?php print MyTheme_Function(); ?>

我知道后者有效,但前者不应该工作吗?

3 个答案:

答案 0 :(得分:4)

使用theme()

您应该始终通过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) {

}