【问题标题】:Can I modify theme_menu_link for a specific menu?我可以为特定菜单修改 theme_menu_link 吗?
【发布时间】:2011-08-23 17:21:56
【问题描述】:

我想在我的 Drupal 7 站点上的其中一个菜单的菜单项之间添加管道(“|”)(主题名称是“汤普森”)。我认为最好的方法是在我的 template.php 文件中创建一个名为 thompson_menu_link 的函数。我这样做了,它成功地修改了菜单,但它正在改变所有的菜单。有没有一种方法可以只为我网站上的一个菜单执行此操作?

目前,我使用管理页面将页脚菜单(url 路径:menu-footer-menu)添加到页脚块中。我应该用不同的方式称呼它吗?

【问题讨论】:

  • 您添加的有关您采用的解决方案的部分应写为答案。如果您将其写为答案,我会投票赞成。 :-)
  • 对不起,新来的。不知道回答我自己的问题并接受它是否是一种不好的形式。

标签: drupal drupal-7 drupal-theming


【解决方案1】:

显然 Drupal 核心提供了theme menu links by menu name 的能力。对于主菜单,以下主题功能应该可以工作

THEMENAME_menu_link__main_menu()

您也可以使用Menu Block 模块来创建菜单块。除其他外,该模块还创建了额外的主题建议。来自模块的 README:

菜单块使用 Drupal 核心的菜单主题功能。然而,它也 提供主题挂钩建议,可用于覆盖任何 它调用的主题函数。 ...

  • theme_menu_link() 可以通过创建以下之一来覆盖:
    • [主题]_menu_link__[菜单名称]()
    • [主题]_menu_link__menu_block()
    • [主题]_menu_link__menu_block__[菜单名称]()
    • [主题]_menu_link__menu_block__[块编号]()

【讨论】:

    【解决方案2】:

    我有点搞砸了thompson_menu_link() 函数。我不喜欢我的做法,但它完成了工作。基本上,它读取菜单名称,然后使用条件返回带有管道的<li> 元素。这是整个区块:

    function thompson_menu_link(array $variables) {
      $element  = $variables['element'];
      $menuName = $variables['element']["#original_link"]["menu_name"];
      $sub_menu = '';
    
      if ($element['#below']) {
        $sub_menu = drupal_render($element['#below']);
      }
    
      $output = l($element['#title'], $element['#href'], $element['#localized_options']);
    
      if ($menuName == "menu-footer-menu" && !in_array("last",$element['#attributes']['class']) {
        $finalString = '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>|\n";
      }
      else {
        $finalString = '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
      }
    
      return $finalString;
    }
    

    【讨论】:

    • if ($menuName == "menu-footer-menu" && !in_array("last",$element['#attributes']['class']) {.最后需要另一个 )。
    【解决方案3】:

    最好的方法是安装以下模块:

    http://drupal.org/project/menu_attributes

    此模块允许您向某些菜单条目添加特殊类,因此您只需添加一个类 rightpipe 并定义该类,如下所示:

    .rightpipe { border-right: 1px solid black }
    

    .rightpipe { background: url(1pixel_line_separator.png) no-repeat center right }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 2014-12-04
      • 2011-06-23
      • 2013-02-20
      • 2019-01-30
      • 2011-11-13
      • 1970-01-01
      相关资源
      最近更新 更多