我目前在我的网站上设置节点,每个节点属于特定菜单(不是主要或辅助预建的菜单)。
如何找出节点属于哪个菜单?
答案 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>
所以,您需要做的是以下内容:
然后,您还可以查询表“menu_custom”以查看您确定的菜单的可读名称。
无论如何,这是一个复杂的查询(几个查询?)而且我是一个无知的MySQL,所以我无法帮助您使用实际代码来检查所有这些:P。
答案 2 :(得分:0)
这不是一个直接的解决方案,我从你回答之前的回答中看到你不想要最简单的解决方案,但我想我会提到这个选项。 Menu Node API module维护一个Drupal缺少的表,一个节点菜单关系表。
模块本身没有任何作用,但似乎有基于此的贡献模块,因此根据问题的复杂程度,它可能是一个起点。
答案 3 :(得分:-1)
更新:对不起伙计们,甚至没有意识到我已发布此链接。我认为我打算将它作为草稿,并在关闭标签时简单发布。也就是说,mingos(上图)是正确的。 我的链接是一个函数menu_get_active_menu_name(),它似乎为您提供了一个包含当前页面活动菜单的数组。正如我所说的那样,你正在使用它,这将是一个很好的方法来抽象自己远离可能导致问题的数据库调用。 我自己从未尝试过,这可能就是我没有详细说明和发布的原因。好吧......至少没有故意发布。