0
votes

I have tried this piece of code which is used in a lot of examples by drupal developers, in my template.php , but when I print out the $variables array , it doesnot contain any key named 'tree'. I just need to add ul li tags to my menu block but

function atsubtheme_menu_tree(&$variables) {
return '<ul class="nav">' . $variables['tree'] . '</ul>';
}

This is how I have rendered the menu on page.tpl using the following code, which has a list of links under main menu in drupal menus

  <nav id="menu">
     <h2>Menu</h2>
     <?php print render($page['menu_bar']); ?>
  </nav> 

I just need therendered menu in ul li tags.

2

2 Answers

1
votes

Yeah, i'm also fedup with the menu drupal renderer, that's why i prefer to write my own render (in page.tpl.php) :

<ul class="nav">
<?php
    $mymenu = menu_tree('main-menu'); 
    foreach($mymenu as $item){ 
        if(!empty($item['#title'])){
            $attributes = array('class'=>array('all', 'my', 'classes'), 'id'=>'an-eventual-id');
            print '<li>'.l($item['#title'],$item['#href'],array('attributes'=>$attributes)).'</li>';
        }
    }
?>
</ul>
0
votes

An easier way which i came across

function YOURTHEMENAME_menu_tree($variables) {
return '<ul class="mycustmenu">' . $variables['tree'] . '</ul>';
//wrapping the menu in ul tags  
} 

function YOURTHEMENAME_menu_link($variables) {

$element = $variables['element'];
$sub_menu = '';

if ($element['#below']) {
$sub_menu = drupal_render($element['#below']);
//if your menu has a sub menu
}

$output = l($element['#title'], $element['#href'],$element['#localized_options']);             
return '<li>' . $output . $sub_menu . "</li>\n";
//wrapping each list item in li tags
}