[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