[support] Menu question

Eric Mckenna eric.mckenna at gmail.com
Fri Aug 17 14:44:12 UTC 2007


You can use theme_menu_tree and theme_menu_item, but you will theme 
every menu that passes through the menu system that way.
What I like to do is do my own theme for the menu items
on your page.tpl.php
<?php print theme('my_menu_themeing', $primary_links); ?>

inside your template.tpl.php
function THEME_NAME_my_menu_themeing($links) {
    $output;
   .. custom html with my menu ...
   return $output;
}

see it that works for you.
Eric.

sander-martijn wrote:
> Making some progress here.  I've realized that to some extent what I 
> want to do is override theme_menu_tree and theme_menu_item.  That 
> gives me some of the control I need BUT the default menu system still 
> has extra junk I don't want (such as a Primary links header) AND I 
> need two types of menu trees that display different things - one 
> horizontal in the top (primary links) and one vertical down the left 
> (current section and its children). 
>
> so far i think menus are a pain in the ass in drupal.  a tradeoff for 
> the power but I think the multiple meanings that the word "menu" has 
> in drupal just adds to the confusion of it all.  What I need is really 
> not that complicated, but it's becoming incredibly complicated fast.
>
> sander-martijn wrote:
>> I want to customize my menus, but since I want it to work with the 
>> html/css/javascript code I've already written and tested I want to get 
>> the system to output the menu in html as I want it.  Actually what I 
>> need is quite simple.  I don't really want to try to customize someone 
>> else's module and I'd rather not build one.  After some digging around I 
>> figured out that I could override the theme_menu_links method in my 
>> template.php file.  Now that's exactly what I need... I got really 
>> excited but I must have some things missing/misunderstood.
>>
>>
>> what I have in the menu system under primary links:
>> primary links
>>   - menu item 1
>>      - menu 1 subitem 1
>>      - menu 1 subitem 2
>>   - menu item 2
>>      - menu 2 subitem 1
>>
>> etc - fairly standard
>>
>> What I need to output is the following:
>>
>> <ul id="nav1" class="nav">
>>   <li><a href="#">menu item 1</a>
>>     <ul>
>>       <li><a href="#">menu 1 subitem 1</a></li>
>>       <li><a href="#">menu 1 subitem 2</a></li>
>>     </ul>
>>   </li>
>> </ul>
>> <ul id="nav2" class="nav">
>>   <li>menu item 2
>>     <ul>
>>       <li><a href="#">menu 2 subitem 1</a></li>
>>     </ul>
>>   </li>
>> </ul>
>>
>> etc. - also pretty straight forward.
>>
>> SO - I put in page.tpl.php the following:
>> <?php print theme('menu_links', $primary_links); ?>
>>
>> and put in template.php the following:
>> function tpg_menu_links($links){
>>   if (!count($links)) {
>>     return '';
>>   }
>>   $level_tmp = explode('-', key($links));
>>   $level = $level_tmp[0];
>>   $output = "<ul id=\"nav\" class=\"nav\">\n";
>>   foreach ($links as $index => $link) {
>>     $output .= "<li>". l($link['title'], $link['href'], 
>> $link['attributes'], $link['query'], $link['fragment']) ."</li>\n";
>>   }
>>   $output .= '</ul>';
>>
>>   return $output;
>> }
>> ?>
>>
>> Which is basically a modified version of theme_menu_links in menu.inc
>>
>> It works as a start, but there are a couple of issues. 
>> 1. even though my class attribute in $output is hard coded, it's still 
>> being replaced by class="active" when you're on the page.  Not a 
>> disaster, i can always modify my css to do the same thing for 
>> class="active" as class="nav".
>> 2. this is the bigger issue.  It's not outputting the subitems.  I'd be 
>> happy to add in the proper call in the foreach loop to either call 
>> another function that i also override or to load them directly in here 
>> if anyone can point me in the direction of what i need to call in order 
>> to load them.
>>
>>
>>   
>
> -- 
> ------------------------------------------------------------------------
>
> sander-martijn <mailto:sander at sander-martijn.com>
> interface developer | architect
> sander at sander-martijn.com <mailto:sander at sander-martijn.com>
> www.sander-martijn.com <http://www.sander-martijn.com>
>
> ------------------------------------------------------------------------



More information about the support mailing list