Drupal主题功能没有被覆盖

问题描述:

我使用Ubercart,我试图覆盖uc_cart_checkout_pane.inc中的以下主题功能theme_address_pane()。所以我在写template.php以下功能:Drupal主题功能没有被覆盖

function mytheme_address_pane($form) { 
    return "asdf"; 
} 

但是,它不替换为“ASDF”任何东西。我可能做错了什么?

编辑:devel模块报告调用的函数为theme_address_pane,而不是我覆盖的函数。

+2

您是否清除了缓存?只有在构建主题注册表时才会检测主题函数,这将在清除缓存后发生。 – jhedstrom 2009-12-15 02:02:18

无论何时处理主题系统,您经常必须清除缓存才能看到它。不是整个缓存,只是主题注册表。这里drupal存储关于使用哪个主题功能和模板的信息。因此,无论何时想更改要使用的功能或模板,都必须清除缓存。

直接更改函数或模板时,不需要清除缓存。 Drupal不会缓存函数或模板本身,而只是位置/名称。所以一旦你确定drupal已经注册了它,你就可以愉快地改变你的主题功能。

如果你把你的template.php文件的顶部(PHP的标签内)以下:

drupal_flush_all_caches();

它将每次清除缓存加载页面。这样你就不必手动刷新缓存。但是,请务必在发布主题前将其删除,否则您会在每次加载页面时看到巨大的性能提升!

要改变Drupal 6中的主题功能,您需要实现hook_theme_registry_alter()