【问题标题】:How to add a span tag to a certain custom menu link in Drupal 7?如何在 Drupal 7 中将 span 标签添加到某个自定义菜单链接?
【发布时间】:2012-11-20 16:28:59
【问题描述】:

我试图弄清楚如何将跨度标记添加到自定义菜单中的某个菜单链接。我只需要在自定义菜单链接中的一个链接上使用它。猜测预处理函数并尝试 theme_menu_item_link() 没有运气,似乎根本没有被调用。

【问题讨论】:

    标签: drupal drupal-7


    【解决方案1】:

    在下面找到解决方案。

    请注意,如果您使用Superfish 模块,theme_menu_link() 在这种情况下将不起作用,因此请改用theme_superfish_menu_item_link

    Drupal 7

    /*
     * Implements theme_menu_link().
     */
     function THEME_menu_link(array $variables) {
      $element = $variables['element'];
      $sub_menu = '';
    
      if ($element['#below']) {
        $sub_menu = drupal_render($element['#below']);
      }
    
      $element['#localized_options']['html'] = TRUE;
      $linktext = '<span class="tab-inner">' . $element['#title'] . '</span>';
    
      $output = l($linktext, $element['#href'], $element['#localized_options']);
      return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
    }
    

    Drupal 7(带有 Superfish)

    /*
     * Implements theme_superfish_menu_item_link().
     *  Theme a superfish menu item link,
     *  to override menu item to insert span tags
     */
    function THEME_superfish_menu_item_link(array $variables) {
      $menu_item = $variables['menu_item'];
      $link_options = $variables['link_options'] + array('html' => TRUE);
      $linktext = '<span class="tab-inner">' . $menu_item['link']['title'] . '</span>';
      return l($linktext, $menu_item['link']['link_path'], $link_options);
    }
    

    定义上述钩子后,清除缓存以重建主题注册表。

    如果上述方法不起作用,如@weaveoftheride 建议的那样,请确保启用对超链接使用主题功能对菜单项使用主题功能设置。通常这些应该默认启用。

    Drupal 6(仅供参考)

    /*
     * Implements theme_menu_item_link().
     */
    function THEME_menu_item_link($link) {
      if (empty($link['localized_options'])) {
        $link['localized_options'] = array();
      }
      $link['localized_options'] += array('html'=>true);
      return l('<span>'.$link['title'].'</span>', $link['href'], $link['localized_options']);
    }
    

    注意:不要忘记在以上所有代码中将THEME替换为您的主题的机器名称。

    【讨论】:

    • 这对我不起作用。找不到这个钩子。它在我的 template.php 文件中。
    • @weaveoftheride 检查函数名称,例如THEMENAME_menu_link 并清除缓存以重新加载注册表。
    • 我正在使用 Superfish,所以我认为应该使用 theme_superfish_menu_item_link?我的菜单也在一个块中。这有什么区别吗?功能 nph_superfish_menu_item_link($variables) { dpm("BLAH"); $menu_item = $variables['menu_item']; $link_options = $variables['link_options'];返回 l($menu_item['link']['title'], $menu_item['link']['href'], $link_options); }
    • @weaveoftheride 将theme 替换为您的主题机器名称(所以nph),所以nph_superfish_menu_item_link 应该可以工作。否则我不知道为什么它不会。
    • 天啊,我不敢相信你必须启用 - 为超链接使用主题功能,并在设置中为菜单项使用主题功能,即使它说(默认:启用)。我没有意识到这个设置的存在,它说默认启用是令人困惑的,因为我认为这意味着没有被检查——很可能是我的错,盯着它太久了。
    【解决方案2】:

    找到答案了!需要使用theme_menu_link():

    function theme_menu_link(array $variables) {
        $element = $variables['element'];
        $sub_menu = '';
    
        if ($element['#below']) {
            $sub_menu = drupal_render($element['#below']);
        }
    
        $output = l($element['#title'], $element['#href'], $element['#localized_options']);
        return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
    }
    

    http://api.drupal.org/api/drupal/includes%21menu.inc/function/theme_menu_link/7

    在那里我可以找到我正在寻找的项目并进行相应的调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      • 2016-07-10
      • 2021-03-26
      相关资源
      最近更新 更多