Edit your page.tpl.php

Edit the section where the primary_links are printed to show the whole primary links menu instead of only showing the first level links of your primary links menu.

<?php if (isset($primary_links)) { ?>
	 <div id="primary_menu">
	 <?php print theme('menu_tree',variable_get('menu_primary_menu',0)); ?>
	 </div>
<?php } ?>

In Drupal 6

$menu_name = variable_get('menu_primary_links_source', 'primary-links');
print menu_tree($menu_name);

Drupal 7

	$menu_name = variable_get('menu_main_links_source', 'main-menu');
	$tree = menu_tree($menu_name);
	print drupal_render($tree); 

Notes

  • You can define, what menu the primary links are from at "admin/settings/menu" (D5) or "admin/build/menu/settings" (D6), or "admin/structure/menu/settings" (D7).
  • Another way to just show the second level of your primary links is to setup that the secondary links show the second level of your primary links (also at "admin/settings/menu")
  • The benefit of the snippet above is, that you can display N-levels of your primary links menu and that it is printed as an unordered list with css classes "active", "expanded" and "leaf" like by default. Just like the menu items in a block menu.

Comments

espirates’s picture

I notice a difference between using primary links as a block vs hard coded in the page. When in page.tpl the secondary links display child page of a primary link, but with the block the child page is tucked underneath the link and uses a drop down menu. Are there any pros and cons to using the link blocks vs coded in the page. I was hoping the block would have the same behavior as the code.

Wolfflow’s picture

My IMO is that using Block for Primary and Secondary Links may give you a lot of more control about css layout and custom PHP code. Of course this presume that you would have to know a bit more about PHP coding. On the other Side if you use multilingual site functionality and also taxonomy you will have a bit of more work to learn and manage Drupal-core coding.

Contact me for drupal projects in English, German, Italian, Drupal Hosting Support.

wangweilin’s picture

Hi can somebody help me.

My page is setup for two languages at the moment and I set the primary and secondary link source to the primary links.
So I get the childs of my primary links in the secondary link part of my theme.

All works fine in english but in german the children are not shown. Can anybody help me what to do about that.

Toongenius’s picture

Don't know if I'm doing something wrong, but this does absolutely nothing for me. I'm still stuck with nothing but the top level nav.

charlie-s’s picture

Same here. Only printing top-level items.

Shinzon’s picture

Got one question about this. This code generate navigation with class "menu"
Something like this:

<ul class="menu">
....

How can i change that "menu" into something diferent?

Toongenius’s picture

Hard coding it is a bad idea.
I set my primary links up as a nice menu (using Nice Menus Module) and then I could style it however I liked with all the child links showing up. Problem solved!

jasom’s picture

-- deleted, I was wrong.

cmbehr’s picture

D6
admin/build/menu-customize/primary-links
make sure your parent items have "expanded" checked

JustSpiffy’s picture

The "expanded" checkbox is set on all my menus. I still cannot see anything but the parent menus. Moving a menu item under another menu item makes it invisible. Moving it back to the top of the hierarchy makes it reappear.

karlitros’s picture

Have a look at this blog post. You can grab the whole primary links structure including children, and clean it up ready for use using that. :)

http://jamesmorrish.co.uk/blog/get-a-clean-array-of-primary-links-in-dru...

adityamenon’s picture

That page should be put on the currently inadequate manual (at least as far as the menu functions are concerned)... and also on the tutorials page, since this is a very common requirement.

pelsdyret’s picture

I've been looking for a solution for hours. I just wanted the second level menu items of my main menu shown elsewhere.
The Menu Block module did the trick!

wOOge’s picture

Further to this — here is the clean code from the link that @karlitros shared, paired with a function that will render HTML from it - where MENU-MACHINE-NAME is the machine name of the menu you want to display:

//Function to get a super clean array of all of the links in the supplied menu
function clean_navigation($links) {
    $result = array();
    foreach($links as $id => $item) {
	    //print_r($item);
        if ($item['link']['hidden'] == 1) { continue; }
        $new_item = array('title' => $item['link']['title'], 'link_path' => $item['link']['link_path'], 'href' => $item['link']['href']);

        if ($item['below']) {
            $new_item['below'] = clean_navigation($item['below']);
        }
        $result[] = $new_item;
    }
    return $result;
}
//Build the array
$links_array = clean_navigation(menu_tree_all_data('MENU-MACHINE-NAME'));

//Function to output the array as links
function print_nav($links_array) {
    print '<ul class="menu">';
    foreach($links_array as $id => $item) {
        print '<li class="' . (!empty($item['below']) ? "expanded" : "leaf") . '">';
        print '<a href="/' . $item['href'] . '">' . $item['title'] . '</a>';
        if ($item['below']) {
            print print_nav($item['below']);
        }
        print "</li>";
    }
    print "</ul>";
}
 print_nav($links_array);

--
wOOge | adrianjean.ca

jpvivere’s picture

After a fresh 7.10 install, I was having trouble with my sub-menu items not showing up after clicking on the parent menu items. After searching the forums for a while for a solution, to no avail, I found out that my node was somehow corrupted or misappropriated. After deleting the "basic page" and recreating it again as a new node, the menu sub-items for that replaced node/menu-link began working normally (it previously linked to node/1 and then became node/5).

Also, moving the menu items around (drag-n-drop) in Home » Administration » Structure » Menus seemed to reveal the problem (i.e., the sub-menu items appeared when moved to a separate parent menu item).

I didn't dig through the code enough to discover a problem with the build, but I though I may share this with others who may be trying to find a solution to this problem--it may be a problem with the node and not the menu structure/configuration.

jasom’s picture

-- deleted, I was wrong.