2

我一直被困在如何在模板文件中操作菜单块在其 html 中输出的内容。带有 li 链接的常规 < ul class="menu" > 很好,我不需要完全删除 drupal 为所有菜单创建的这个 html,但我想像系统主菜单一样注入类 'inline' 和 'links' (通常)已经在它的 ul 元素下。我可以直接在主题跳过块中直接打印菜单,但从长远来看,学习将类名注入到生成的菜单块的输出中会更有帮助。

到目前为止,我没有四处搜索,只能找到一个可以在单个 li 上输入 ID 和类名的模块,但不能在 ul 上输入它们,而且我无法获得我遇到的任何类似的模板文件片段去工作。

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

4

2 回答 2

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);

希望你能找到需要的东西:)

-穆罕默德。

于 2012-05-15T07:49:26.233 回答
3

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

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

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

于 2012-05-15T20:23:13.143 回答