[support] Menu question
sander-martijn
sander at sander-martijn.com
Fri Aug 17 15:05:46 UTC 2007
Thanks. I actually tried that technique first (it shows at the bottom of
this email), before trying the options below, but what I found was that
the primary_links menu wasn't populated with it's children which is why
i started digging around these deeper parts of the system - what i was
initially looking for was to find a function that I could call that
would give me the full array (like what shows if you use the default
menu module).
print_r output gives:
Array
(
[menu-1-1-2] => Array
(
[title] => Photo Gallery
[href] => node/2
[attributes] => Array
(
)
)
[menu-1-2-2] => Array
(
[title] => Floor Plans
[href] => node/5
[attributes] => Array
(
)
)
)
1
Even though Photo Gallery has a child which is listed if you load the
default menu module that comes with drupal:
<ul class="menu">
<li class="expanded"><a href="/?q=photoGallery">Photo Gallery</a>
<ul class="menu">
<li class="leaf"><a href="/?q=photoGallery/residential">Residential Photos</a></li>
</ul>
</li>
<li class="leaf"><a href="/?q=floorplans">Floor Plans</a></li>
</ul>
So I guess the question is - how do I get a primary link's children (eg
Residential Photos) to appear in an array I can traverse?
Eric Mckenna wrote:
> 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>
>>>
>>> ------------------------------------------------------------------------
>>>
>>
>
>
--
------------------------------------------------------------------------
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>
------------------------------------------------------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/support/attachments/20070817/58d58260/attachment-0001.htm
More information about the support
mailing list