【问题标题】:How do I modify output markup for system secondary menu in Drupal 7?如何修改 Drupal 7 中系统二级菜单的输出标记?
【发布时间】:2013-11-16 14:59:36
【问题描述】:

我想修改登录时出现的 Drupal 7 中二级菜单的结构。二级导航显示“我的帐户”和“注销”链接。默认情况下,这呈现为:

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

我的主题中生成这个菜单的代码是:

<?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'),
    ),
)); ?>

我怎样才能得到以下标记而不是上面列出的输出?

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

我希望删除 h2 以及 ul,并添加两个额外的 li 标签,并使用管道作为分隔符,并为每个标签添加一个唯一的类。

非常感谢您的帮助。

【问题讨论】:

  • 我可以通过注释掉或删除'heading' =&gt; array(...来摆脱h2

标签: php html drupal drupal-7 drupal-theming


【解决方案1】:

您可以通过为链接定义适当的主题来为二级菜单实现此自定义 HTML。因为links__system_secondary_menu[base hook]__[context] 形式下的主题挂钩模式,所以您可以使用YOURTHEME_links__system_secondary_menu 在您的主题中轻松实现此二级菜单的主题定义。

在您的主题的template.php 中,您可以将这段代码完全符合您的要求:

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

【讨论】:

  • 不幸的是,YOURTHEME_links__system_secondary_menu(&amp;$variables) 在我的情况下不起作用,我无法解释原因。如果我然后只使用YOURTHEME_links(&amp;$variables) 它会杀死我的上下文链接,我不知道为什么。有人有什么想法吗?
猜你喜欢
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
相关资源
最近更新 更多