0

I am building a Bootstrap 3 sub theme where I want to display some information next to menu link in main menu. I tried to implement hook_menu_link_alter in template.php file in following way

function mytheme_menu_link_alter(&$item){
if($item['title'] == 'Messages'){
$item['title']= $item['title'].'<span class="badge">X</span>';
}
}

but it does not work. The same stuff with link_title. Whta should be fixed in code to make it work?

1

you can override the output of theme_menu_link() to produce what you want:

function THEME_menu_link(&$variables)
{
    $element = $variables['element'];
    $sub_menu = '';

    $element['#attributes']['class'][] = 'menu-' . $element['#original_link']['mlid'];

    if ($element['#below'])
    {
        $sub_menu = drupal_render($element['#below']);
    }
    $output = l($element['#title'], $element['#href'], $element['#localized_options']);


    if($variables['element']['#title'] == 'Messages')
    {
        // to just add the text
        $output .= '<span class="badge">X</span>';

        // to include it as a link
        $output .= l('X', $element['#href'], array('attributes' => array('class' => 'badge')));
    }

    return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}
  • Thanks for idea. I've modified to display <span> in a link tag $element['#title'] .= '<span class="badge">X</span>';. But instead < > " symbols were converted to html entities. Is there any way to display them as part of html tag? – burzakovskiy Jun 15 '15 at 15:34
  • Im not sure I understand that last comment - you want to display <span class="badge">X</span> as part of the text, as part of the actual href link, or you want to display the X within the <span> as part of the href? – Geoff Jun 15 '15 at 15:40
  • Link is displayed like <a href="#">Messages&lt;span class=&quot;badge&quot;&gt;X&lt;/span&gt;</a>. Is there any way to fix that? – burzakovskiy Jun 15 '15 at 15:42
  • Drupal sanitizes a link - this is a security feature to protect against certain attacks, so I don't think you can incorporate it into a single link - I modified the answer to include an option for creating a separate <a> with the class 'badge' that sits beside the original and directs to the same location. Should be seemless to the end user – Geoff Jun 15 '15 at 15:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.