开发者

How to find which menu a node belongs to in drupal

I currently have nodes setup on my site, and each node bel开发者_如何转开发ongs to a particular menu (not primary or secondary prebuilt menues).

How can i find out which menu a node belongs to?


Maybe this is what you mean:

$trail        = menu_get_active_trail();
$lastInTrail  = end($trail);
$menu_name    = $lastInTrail['menu_name'];

menu_get_active_trail() returns a breadcrumbs like array, the last breadcrumb represents the current node.

Cheers, Laurens Meurs, Rotterdam


I'm a noob, so don't bash me if what I'm going to write is worthless babbling.

I think you can't do that directly, unless there's some smart module out there that would do all the nasty SQL queries necessary to check this.

Node info is stored in the SQL table "node", and is identified merely by NID (node ID, which is the node number that appears after /?q=node/ in the address). Their aliases, if any, are stored in "url_alias" table, where you can find columns "src" and "dst", identifying the original and the aliased path (for instance, src='node/123', dst='my/url/alias'). The menu links can be found in the table "menu_links", where you can find the columns "menu_name" (the machine-radable name of a menu) and "link_path" (either the node/... or the alias).

So, what you'd need to do is the following:

  1. get the current node's NID
  2. query "url_alias" if there's an alias for node/NID and retrieve it, otherwise leave node/NID
  3. query the "menu_links" table for the path you've determined and retrieve "none" or the menu's machine-readable name

You could then also query the table "menu_custom" to check what's the human-readable name of the menu you've determined.

Anyway, that's a complicated query (several queries?) and I'm a MySQL ignorant, so I can't help you with the actual code you'll need to use to check all that :P.


This isn't a direct solution and I see from your reply to a previous answer that you didn't wanted the simplest solution possible, but I thought I'd mention this option. The Menu Node API module maintains a table which Drupal lacks, a node-menu relationship table.

The module does nothing on its own, but there seems to be contributed modules which build on this, so depending on how complex your problem is it might be a starting point.


http://drupal.org/node/584984

Updated: Sorry guys, didn't even realize I had posted this link. I think I intended it as a draft and simply posted it when closing tabs. That said, mingos (above) is right on. My link is to a function menu_get_active_menu_name() that appears to provide you with an array containing the active menu for the current page. As I presume that is what you are using it for, it would be a nice way to abstract yourself away from the database calls that might cause problems down the line. I myself have never tried it, which is probably why I didn't elaborate and post. well... at least didn't post on purpose.

0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜