[support] Menu question

Eric Mckenna eric.mckenna at gmail.com
Fri Aug 17 14:51:35 UTC 2007


Forgot to to add that you will have to get intimate with the 
$primary_links array, but its not difficult. 
Throw in a print_r($links) and you have all you need.

Eric Mckenna wrote:
> 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