theme_menu_item()不起作用

时间:2010-07-14 09:27:28

标签: drupal drupal-6 drupal-navigation

我有一个名为惠灵顿的Drupal主题,位于\ sites \ all \ themes \ wellington中。我希望覆盖menu_item函数并按照http://drupal.org/node/310356上的说明进行操作。

我想按照描述为li添加一个类。

我已尝试命名函数wellington_menu_item并尝试了phptemplate_menu_item但没有运气。我可以在函数中放置打印语句,这些都显示在屏幕上。

另外我可以在它返回之前打印出返回字符串并且它正确但是当呈现菜单时,没有区别,它是显示的正常主要字符串,即没有覆盖。

主题本身运行正常,我可以看到CSS和HTML。

难倒,有什么想法吗?

<?php
/**
* Theme override for theme_menu_item()
*/
function phptemplate_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
  $class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf'));
  if (!empty($extra_class)) {
    $class .= ' '. $extra_class;
  }
  if ($in_active_trail) {
    $class .= ' active-trail';
  }

  // Add unique identifier
  static $item_id = 0;
  $item_id += 1;
  $id .= ' ' . 'menu-item-custom-id-' . $item_id;
  // Add semi-unique class
  $class .= ' ' . preg_replace("/[^a-zA-Z0-9]/", "", strip_tags($link));

  return '<li class="'. $class .'" id="' . $id . '">'. $link . $menu ."</li>\n";
}
?>

使用

在page.tpl.php中调用它
<?php print theme('links', $primary_links); ?>

2 个答案:

答案 0 :(得分:1)

将功能添加到template.php时,不要忘记清空浏览器缓存和drupal缓存。清除浏览器缓存不一定是必要的,但有时可用于其他更改。

(网站配置 - 性能 - 清除缓存数据)

答案 1 :(得分:1)

正如您所提到的,在返回结果字符串之前能够打印结果字符串,覆盖确实有效。我怀疑在渲染时实际上并没有使用函数的结果。也许是因为它存储在一个模板变量中,然后在稍后调用的预处理函数中被另一个值覆盖。

我建议您使用Theme developer模块检查用于呈现菜单项的模板/功能。