2

我有一个名为 wellington 的 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); ?>
4

2 回答 2

1

将函数添加到 template.php 时,不要忘记清空浏览器缓存和 drupal 缓存。清除浏览器缓存不是必需的,但有时对其他更改很有用。

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

于 2010-07-14T10:02:04.527 回答
1

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

我建议您使用主题开发者模块来检查使用哪个模板/功能来呈现您的菜单项。

于 2010-07-14T12:35:11.477 回答