开发者

Drupal - menu items linking to the same node do not display all children

i have got a menu structure like this:

-menu item level 1

--menu item level 2

---menu item level 3

all items are linking to the same node. now, if i visit the node only the first two items are displayed. what i found out is: when i change the link of the first level menu item to something else, all level get displayed right.

menu modules i use:

  • Menu block

  • Menu Settings per Content Type

  • Menu Trails

  • Administration menu

  • Auto Menu Title

  • Hierarchical Select

any ideas?

thanks

开发者_运维技巧

lukas


googletorp is right-- Drupal's core menu system isn't designed to handle this. However you can use a workaround.

Let's say that you'd like to create a nested menu in which one of the children links to the same path as its parent. Something like:

  • people/friends
  • people/friends
  • people/family
  • people/neighbors

This works in theory-- the menu items will take you to the correct page. But if you're relying on Drupal to correctly set the active trail and expand the correct sub menus, you'll have to use a bit of a workaround. You're basically going to create dummy nodes that will redirect to the desired page rather than creating two menu links that have the exact same path. The parent (in menu) will redirect to the child's node.

Method 1 (D6 only):

  1. Download and install CCK Redirection
  2. Create a Content Type 'Redirect Node' and add a CCK Redirection field to the content type
  3. Create a page node (node 1) with URL "people/friends" and add a menu link
  4. Create a 'Redirect Node' (node 2) and create a menu link for this new node.
  5. Set CCK Redirection field to the URL node 1 (people/friends).
  6. Set node 2's menu item to be the parent of node 1's

Method 2 (D6&7):

If you want to get really fancy, you can take a more user friendly approach by combining CCK's Node Reference module with the Rules module.

  1. Download and install the Rules module (and Rules UI) and enable CCK's Node Reference module
  2. Create a Content Type 'Redirect Node' and add a Node Reference (D6) (D7) field 'field_redirect_target'. Be sure to configure this so that it is required, and users cannot select nodes of type 'Redirect Node'
  3. Add a new rule via the Rules module when content is going to be viewed if content is of type 'Redirect Node'
  4. Redirect to page: [node:field_redirect_target-path]
  5. Create node 1 of type page
  6. Create node 2 of type 'Redirect Node'
  7. Set Node Reference field to Node 1
  8. Set node 2's menu item to be the parent of node 1's

This method is a bit nicer for users, since it doesn't require them to find the system path for the target node.


Depending on your setting, the menu module will show the active link it it's children. It is, however, not designed to search for more than a single link. This is why you wont get the full nested menu structure. My guess is, that the top one is the link it finds first, and that is where it stops. I can't remember the algorithm for the menu structure, you might have luck rearranging the menu structure, making menu 1 the last child. This is, however, not something the Drupal menu system is designed for, and you will not have an easy time changing this.

What are you trying to accomplish by linking the same node several times is a nested menu structure?


I solved my problem using menu first child. I didn't look at the code it uses, but it simply works. It's really a bummer that this doesn't work out of the box and you have to use such workarounds. But actually this increased usability for my case.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜