Drupal 7 - 将类名附加到菜单块<ul> </ul>

时间:2012-05-14 19:38:58

标签: drupal drupal-7 drupal-theming drupal-navigation

我一直坚持如何在模板文件中操作菜单块在其html中输出的内容。常规&lt; ul class =“menu”&gt;使用li链接很好,我不需要完全消除drupal为所有菜单创建的这个html但我想注入类'内联'和'链接',就像系统主菜单(通常)已经有它的ul元素。我可以直接在主题跳过块中打印菜单,但从长远来看,学习将类名注入到生成的菜单块的输出中会更有帮助。

到目前为止,谷歌只能找到一个模块,可以在单个li上输入ID和类名,但不包括ul包装它们,我一直无法得到任何类似的模板文件片段。我曾经来过工作。

有一种方法可以使用钩子函数来做到这一点吗?

2 个答案:

答案 0 :(得分:3)

为什么不通过javascript添加你想要的课程?!

示例:

jQuery("#MY_MENU_WRAPPER ul.menu").addClass("inline");

如果是这种情况,请在主题的template.php文件中尝试以下代码

function return_menu_markup($menu_name, $attributes)
{
    $items = array();
    $menu_tree = menu_tree_all_data($menu_name);
    $menu_tree_output = menu_tree_output($menu_tree);

    foreach($menu_tree_output as $item_id => $item_data)
    {
        if(is_numeric($item_id) && is_array($item_data))
        {
            $items[] = l('<span>' . $item_data['#title'] . '</span>', $item_data['#href'], array(
                    'attributes'    => $item_data['#attributes'],
                    'html'      => TRUE,
                )
            );
        }
    }
    return theme('item_list', array('items' => $items, 'type' => 'ul'));
}

然后在模板中的任何位置,只需执行以下操作:

$attributes = array();
$attributes['id'] = "MY_MENU_ID";
attributes['class'] = array('MY_CLASS_1', 'MY_CLASS_2', 'MY_CLASS_3');
return_menu_markup("main-menu", $attributes);

希望你找到所需的东西:)

-Muhammad。

答案 1 :(得分:3)

您可以在主题文件夹中使用template.php,使用hook:

function THEMENAME_menu_tree__menu_main_navigation($variables){
    return "<ul class=\"inline\">\n" . $variables['tree'] ."</ul>\n";
}

另请注意,此menu_main_navigation是菜单网址路径,其他值始终相同。做一些缓存删除几次,也许它想立即工作。