dsio68964998 2013-11-16 14:59
浏览 41
已采纳

如何在Drupal 7中修改系统二级菜单的输出标记?

I want to modify the structure of the secondary menu in Drupal 7 that appears when you are logged in. The secondary navigation shows 'My Account' and 'Log Out' links. By default, this renders as:

<h2 class="element-invisible">Secondary Menu</h2>
<ul id="secondary-menu-links" class="links inline clearfix">
    <li class="menu-2 first">
        <a href="/user">My account</a>
    </li>
    <li class="menu-15 last">
        <a href="/user/logout">Log out</a>
    </li>
</ul>

The code in my theme that is generating this menu is:

<?php print theme('links__system_secondary_menu', array(
    'links'         => $secondary_menu,
    'attributes'    => array(
        'id'        => 'secondary-menu-links',
        'class'     => array('links', 'inline', 'clearfix'),
    ),
    'heading'       => array(
        'text'      => t('Secondary Menu'),
        'level'     => 'h2',
        'class'     => array('element-invisible'),
    ),
)); ?>

How can I get the following markup outputted instead of what was listed above?

<li class="secmenusep"><span>|</span></li>
<li class="menu-2 secnav_account">
    <a href="/user">My account</a>
</li>
<li class="secmenusep"><span>|</span></li>
<li class="menu-15 secnav_logout">
    <a href="/user/logout">Log out</a>
</li>

I want the h2 removed, as well as the ul, and add two additional li tags with pipes for separators, and add a unique class to each.

Your help is very much appreciated.

  • 写回答

1条回答 默认 最新

  • dousao2186 2013-11-16 17:25
    关注

    You can achieve this custom HTML for your secondary menu by defining your proper theme for links. Because links__system_secondary_menu is a theme hook pattern under the form of [base hook]__[context], you can easily implement a theme definition for this secondary menu within your theme by using YOURTHEME_links__system_secondary_menu.

    Inside the template.php of your theme, you can put this code which does exactly what you are asking for:

    function YOURTHEME_links__system_secondary_menu(&$variables)
    {
        $output = '';
        $extra_classes = array(
            'user' => 'secnav_account',
            'user/logout' => 'secnav_logout',
        );
    
        foreach ($variables['links'] as $item => $link) {
            $classes = array($item);
    
            if (isset($extra_classes[$link['href']])) {
                $classes[] = $extra_classes[$link['href']];
            }
    
            $output .= '<li class="secmenusep"><span>|</span></li>';
            $output .= sprintf(
                '<li class="%s">%s</li>', implode(' ', $classes), l($link['title'], $link['href']));
        }
    
        return $output;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题