我可以修改特定菜单的theme_menu_link吗?

时间:2011-08-23 17:21:56

标签: drupal drupal-7 drupal-theming

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

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

3 个答案:

答案 0 :(得分:4)

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

THEMENAME_menu_link__main_menu()

或者,您可以使用Menu Block模块创建菜单块。除此之外,该模块还创建了其他主题建议。从模块的自述文件:

  

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

     
      
  • theme_menu_link()可以通过创建以下之一来覆盖:      
        
    • [主题] _menu_link __ [菜单名称]()
    •   
    • [主题] _menu_link__menu_block()
    •   
    • [主题] _menu_link__menu_block __ [菜单名称]()
    •   
    • [theme] _menu_link__menu_block __ [block id number]()
    •   
  •   

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

http://drupal.org/project/menu_attributes

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

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

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