【发布时间】:2010-02-06 00:27:54
【问题描述】:
我目前在我的站点上设置了节点,每个节点都属于一个特定的菜单(不是主要或次要的预建菜单)。
如何找出节点属于哪个菜单?
【问题讨论】:
我目前在我的站点上设置了节点,每个节点都属于一个特定的菜单(不是主要或次要的预建菜单)。
如何找出节点属于哪个菜单?
【问题讨论】:
也许这就是你的意思:
$trail = menu_get_active_trail();
$lastInTrail = end($trail);
$menu_name = $lastInTrail['menu_name'];
menu_get_active_trail() 返回一个类似面包屑的数组,最后一个面包屑代表当前节点。
干杯, 劳伦斯·默尔斯,鹿特丹
【讨论】:
我是菜鸟,所以如果我要写的是毫无价值的胡言乱语,请不要抨击我。
我认为您不能直接执行此操作,除非有一些智能模块可以执行检查此操作所需的所有讨厌的 SQL 查询。
节点信息存储在 SQL 表“node”中,仅通过 NID(节点 ID,即地址中 /?q=node/ 后面出现的节点号)来标识。它们的别名(如果有)存储在“url_alias”表中,您可以在其中找到列“src”和“dst”,标识原始路径和别名路径(例如,src='node/123', dst='my /url/别名')。菜单链接可以在“menu_links”表中找到,您可以在其中找到“menu_name”(菜单的机器名称)和“link_path”(节点/...或别名)列。
所以,你需要做的是:
然后您还可以查询表“menu_custom”以检查您确定的菜单的可读名称是什么。
无论如何,这是一个复杂的查询(几个查询?)而且我对 MySQL 一无所知,所以我无法为您提供用于检查所有内容的实际代码:P。
【讨论】:
这不是一个直接的解决方案,我从您对先前答案的回复中看到,您并不想要最简单的解决方案,但我想我会提到这个选项。 Menu Node API module 维护着一个 Drupal 缺少的表,一个节点-菜单关系表。
该模块本身不做任何事情,但似乎有一些贡献的模块建立在此之上,因此取决于您的问题有多复杂,它可能是一个起点。
【讨论】:
更新:对不起,伙计们,我什至没有意识到我已经发布了这个链接。我想我打算将其作为草稿并在关闭标签时简单地发布。也就是说,mingos(上图)是正确的。 我的链接是一个函数 menu_get_active_menu_name(),它似乎为您提供了一个包含当前页面的活动菜单的数组。我认为这就是您使用它的目的,这将是一种将自己从可能导致问题的数据库调用中抽象出来的好方法。 我自己从未尝试过,这可能是我没有详细说明和发布的原因。嗯……至少不是故意发帖的。
【讨论】: