在Drupal中调用自定义主题函数的正确方法是什么?
我有一个自定义主题,我们称之为“MyTheme”。在template.php文件中,我有一个名为“MyTheme\u MyFunction”的函数 在my page.tpl.php中,我应该能够做到以下几点:在Drupal中调用自定义主题函数的正确方法是什么?,drupal,Drupal,我有一个自定义主题,我们称之为“MyTheme”。在template.php文件中,我有一个名为“MyTheme\u MyFunction”的函数 在my page.tpl.php中,我应该能够做到以下几点: <?php print theme('MyFunction'); ?> <?php print MyTheme_Function(); ?> 或者,我必须这样做: <?php print theme('MyFunction'); ?> <
<?php print theme('MyFunction'); ?>
<?php print MyTheme_Function(); ?>
或者,我必须这样做:
<?php print theme('MyFunction'); ?>
<?php print MyTheme_Function(); ?>
我知道后一种方法有效,但前一种方法不也有效吗?第一种方法肯定有效,但要做到这一点,您需要在hook_theme()中告诉Drupal您的主题函数(即主题的template.php中的MyTheme()),然后清除您的主题缓存 有关详细信息,请参阅。使用主题() 您应该始终通过
theme()
函数调用主题函数,如第一个示例所示:theme('MyFunction')
。如果不这样做,就破坏了Drupal主题系统,不允许其他模块开发人员有效地覆盖您的输出
编写自己的主题函数时,不要忘记使用hook\u theme
(已解释)在主题注册表中注册主题函数。如果不这样做,调用theme('MyFunction')
将不起作用。在最初注册函数后清除缓存也不会有什么坏处
它为什么重要的例子
例如,在theme的template.php中,您可以定义自己的
theme\u image
函数来覆盖Drupal core处理图像的方式。您可以将函数命名为name\u of\u theme\u image
,并覆盖它返回的内容。如果theme\u image
不总是被称为theme('image')
,您将无法利用此重写行为,因为theme()
充当主题函数的单一入口点和委托器。主题函数也是如此。您可以使用preprocess页面挂钩
函数themename_preprocess_页面(&$variables){
$variables['custom_name']=函数_name();
}
然后在page.tpl.php中,您可以使用
这就是变量传递到tpl文件的方式
类似地,对于node.tpl.php,您可以使用
函数themename_preprocess_节点(&$variables){
}
只有在为上述函数实现hook_theme()函数时,前者才起作用。