Drupal Override Custom Menu Template

前端 未结 4 1804
挽巷
挽巷 2020-12-08 16:23

I created a custom menu called \"sub-top-nav\" and now I\'d like to override the html output. In particular I would like to add an unique class to each item like.

Th

相关标签:
4条回答
  • 2020-12-08 16:45

    After looking through the API I finally found an easy solution to tag the root menu with the same class (this is useful to style only the top level menus uniquely, while maintaining them dynamically friendly). Simply use the plid instead of mlid. I noticed the plid is always 0 for top level menus.

    function theme_menu_link(array $variables) {
      $element = $variables['element'];
      $sub_menu = '';
    
      $element['#attributes']['class'][] = 'menu-' . $element['#original_link']['plid'];
    
      if ($element['#below']) {
        $sub_menu = drupal_render($element['#below']);
      }
    
      $output = l($element['#title'], $element['#href'], $element['#localized_options']);
            $count = 1;
      return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
    }
    
    0 讨论(0)
  • 2020-12-08 16:46

    You can use the theme_menu_item function in your theme's template.php to do pretty much whatever you want to those menu items, including adding classes, ID's, etc.

    0 讨论(0)
  • 2020-12-08 16:47

    I got it to work now. This piece of code might help someone else as well! It goes into yourtheme/template.php

    function phptemplate_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
    
      $class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf'));
    
      if (!empty($extra_class))
        $class .= ' '. $extra_class;
    
      if ($in_active_trail)
        $class .= ' active-trail';
    
      $class .= ' ' . preg_replace('/[^a-zA-Z0-9]/', '', strtolower(strip_tags($link)));
    
      return '<li class="'. $class .'">'. $link . $menu ."</li>\n";
    }
    
    0 讨论(0)
  • 2020-12-08 16:53

    Drupal 7 uses theme_menu_link instead of theme_menu_item

    <?php
    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";
    }
    ?>
    
    0 讨论(0)
提交回复
热议问题