[support] Menu question

sander-martijn sander at sander-martijn.com
Fri Aug 17 23:07:57 UTC 2007


here's the solution I found for the left nav requirements:

<?php
$trail = _menu_get_active_trail();
$mid = $trail[1];
$output .= theme('menu_item', $mid);
$output.= theme('menu_tree',$mid);
print('<div id="menubox"><ul class="menu">');
print $output;
print('</ul></div>');
?>

I'm QUITE certain there's a more elegant way of accomplishing this, but 
until I find out what it is this at least works.

To test it I had to add in my first 3rd level page and was right about 
nice_menus showing that, so I have to either find a way to stop that or 
find another solution.


sander-martijn wrote:
> They're actually css menus only.  The thing is, i'm quite certain I 
> can build what i need to with drupal i'm just having trouble with the 
> documentation.  I won't rant about it, i don't really have the time 
> and i'm sure you don't either. 
>
> The main things I'm dealing with is
> 1: very specific (but not that unusual) requirements of what menus 
> should do on the site
> 2: a site that got mostly built already in a commercial cms that can't 
> handle even the most basic requirements - I'm in damage control mode 
> now trying to salvage a project by bringing it to drupal.
>
> In the meantime I used the nice_menus module for the top nav which 
> pretty much can do what I need it to do in the short term, but may 
> cause problems once there is a third level which shouldn't show in the 
> top nav.  Now I'm trying to get the left nav to display how that 
> should.  I'm basically doing a lot of print_r in my templates right 
> now so I can get an idea of what's going on. 
>
> given this structure:
> - home
>  - top level links
>    - 2nd level
>       - 3rd level
>
> top nav: show on all pages, display top level links and their 2nd 
> level links (through css dropdowns)
> left nav: show on top level links and below, list top level link and 
> 2nd level links when on top level, list top level link, 2nd level 
> links and current 2nd level link's children indented when on 2nd or 
> 3rd level
>
> So I don't need javascript or JQuery for this - if I can get arrays 
> containing these elements then I can use template override functions, 
> custom php code or whatever else to get what I need.  I'd rather not 
> write a module for this but if that's the only option I'll go that route.
>
> thanks
> .sander
>
> Metzler, David wrote:
>> You might consider abandoning the primary links construct and just 
>> create a custom region for your theme and put the primary links block 
>> in that region. If the "menu-block" gives you what you wan't that 
>> might work. You then disable primary and secondary links in the menu.
>>  
>> That being said.  It sounds like your problems are that your 
>> javascript is doing a a lot of DOM walking specific stuff (otherwise 
>> why would extra divs be a problem?).  Is that accurate?   This is 
>> part of what JQUERY was written for. In JQUERY you can bind to 
>> on-click events using typical CSS selectors.  That rocks for this 
>> kind of work (even if I don't do a ton of it). 
>>  
>> I realize that you have some already tested code.  But if it's highly 
>> specified to the organization of the document it could cause you a 
>> lot of problems in the long run, so  I thought you'd want to know 
>> about JQuery.
>>  
>> Hope some of this helps anyway.
>>  
>>  
>> Dave
>>  
>>  
>>
>> ------------------------------------------------------------------------
>> *From:* support-bounces at drupal.org 
>> [mailto:support-bounces at drupal.org] *On Behalf Of *sander-martijn
>> *Sent:* Thursday, August 16, 2007 5:15 PM
>> *To:* support at drupal.org
>> *Subject:* Re: [support] Menu question
>>
>> 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>
>
> ------------------------------------------------------------------------

-- 
------------------------------------------------------------------------

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/b559aa5f/attachment-0001.htm 


More information about the support mailing list