theme_menu_item() 不起作用

发布于 2024-09-09 20:25:28 字数 1264 浏览 3 评论 0原文

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

I have a Drupal theme called wellington located in \sites\all\themes\wellington. I wish to override the menu_item function and followed the instructions at http://drupal.org/node/310356.

I want to add a class to the li as described.

I have tried naming the function wellington_menu_item and tried phptemplate_menu_item but no luck. I can put print statements in the function and these are displayed on screen.

Additionally I can print out the return string just before its returned and its correct but when the menu is rendered, no difference, its the normal main one showing, i.e. no override.

The theme itself is working fine and I can see the CSS and HTML.

Am stumped, any ideas?

<?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";
}
?>

It is called in page.tpl.php using

<?php print theme('links', $primary_links); ?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清风无影 2024-09-16 20:25:28

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

我建议您使用 主题开发人员 模块来检查使用哪个模板/函数来呈现菜单项。

As you mention being able to print the result string before returning it, the overrides does work. What I suspect is that the result of your function is not actually used when rendering. Perhaps because it is stored in a template variable which is then overridden with another value in a preprocess function called later.

I suggest your use the Theme developer module to check which template/function is used to render your menu item.

一刻暧昧 2024-09-16 20:25:28

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

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

Don't forget to empty your browser cache and the drupal cache when you added the function to the template.php . The clearing of the browser cache should not be necessairy but sometimes usefull for other changes.

(site configuration - performance - clear cached data)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文