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@sander-martijn.com>
interface developer | architect
sander@sander-martijn.com <mailto:sander@sander-martijn.com>
www.sander-martijn.com <http://www.sander-martijn.com>
------------------------------------------------------------------------