如何在drupal中找到节点所属的菜单

时间:2010-02-06 00:27:55

标签: drupal menu drupal-6

我目前在我的网站上设置节点,每个节点属于特定菜单(不是主要或辅助预建的菜单)。

如何找出节点属于哪个菜单?

4 个答案:

答案 0 :(得分:10)

也许这就是你的意思:

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

menu_get_active_trail()返回像数组一样的面包屑,最后一个面包屑代表当前节点。

干杯, Laurens Meurs,鹿特丹

答案 1 :(得分:3)

我是一个菜鸟,所以如果我要写的东西是毫无价值的胡言乱语,请不要抨击我。

我认为你不能直接这样做,除非有一些智能模块可以做所有必要的讨厌SQL查询。

节点信息存储在SQL表“节点”中,并且仅由NID(节点ID,即在地址中/?q = node /之后出现的节点号)标识。它们的别名(如果有的话)存储在“url_alias”表中,您可以在其中找到“src”和“dst”列,标识原始路径和别名路径(例如,src ='node / 123',dst ='my / URL /别名)。菜单链接可以在“menu_links”表中找到,您可以在其中找到列“menu_name”(菜单的机器名称)和“link_path”(节点/ ...或别名)。 / p>

所以,您需要做的是以下内容:

  1. 获取当前节点的NID
  2. 查询“url_alias”,如果有node / NID的别名并检索它,否则请保留node / NID
  3. 在“menu_links”表中查询您已确定的路径并检索“无”或菜单的机器可读名称
  4. 然后,您还可以查询表“menu_custom”以查看您确定的菜单的可读名称。

    无论如何,这是一个复杂的查询(几个查询?)而且我是一个无知的MySQL,所以我无法帮助您使用实际代码来检查所有这些:P。

答案 2 :(得分:0)

这不是一个直接的解决方案,我从你回答之前的回答中看到你不想要最简单的解决方案,但我想我会提到这个选项。 Menu Node API module维护一个Drupal缺少的表,一个节点菜单关系表。

模块本身没有任何作用,但似乎有基于此的贡献模块,因此根据问题的复杂程度,它可能是一个起点。

答案 3 :(得分:-1)

http://drupal.org/node/584984

更新:对不起伙计们,甚至没有意识到我已发布此链接。我认为我打算将它作为草稿,并在关闭标签时简单发布。也就是说,mingos(上图)是正确的。   我的链接是一个函数menu_get_active_menu_name(),它似乎为您提供了一个包含当前页面活动菜单的数组。正如我所说的那样,你正在使用它,这将是一个很好的方法来抽象自己远离可能导致问题的数据库调用。   我自己从未尝试过,这可能就是我没有详细说明和发布的原因。好吧......至少没有故意发布。