我想在Drupal 7网站上的一个菜单(主题名称为“thompson”)的菜单项之间添加管道(“|”)。我认为最好的方法是在我的template.php文件中创建一个名为thompson_menu_link的函数。我这样做了,它成功地修改了菜单,但它正在改变所有菜单。有没有办法在我的网站上只为一个菜单做这个?
目前,我使用管理页面将页脚菜单(网址路径:菜单页脚菜单)添加到页脚块。我应该用不同的方式来称呼它吗?
答案 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 }