如何在Drupal中获得点击的菜单项$ mlid?

时间:2010-02-02 10:07:04

标签: drupal menu submenu

我正在尝试基于$mlid构建子菜单。我找到了一个似乎可以完成这项工作的功能,但我似乎无法弄清楚如何获得刚刚点击的菜单项的$mlid

我在SO(http://drupal.org/node/249257)上的类似帖子的链接中找到了该功能,但我只能找到手动设置$ mlid的示例。有什么建议吗?

5 个答案:

答案 0 :(得分:4)

您可以使用menu_get_item()函数获取有关当前页面的信息作为菜单项,然后查询数据库以获取mlid。

$item = menu_get_item(); //Gets menu_router information for current page
$mlid = db_result(db_query("SELECT mlid FROM {menu_links} WHERE link_path='%s'", $item['path']));

注意 - 这适用于Drupal 6.

答案 1 :(得分:4)

emmychan解决方案背后的想法很棒,但包含错误。所以我重写了Drupal 7的数据库api:

$mlid = db_select('menu_links' , 'ml')
  ->condition('ml.link_path' , $_GET['q'])
  ->fields('ml' , array('mlid'))
  ->execute()
  ->fetchField();

编辑:为了使代码片段更加通用,像Ambidex建议我更新代码,以便使用$_GET['q']来尝试获取当前页面的MLID。

答案 2 :(得分:3)

我建议您使用:menu_get_active_trail()

您将获得当前的$mlid

这是Drupal 7。

答案 3 :(得分:2)

这是基于Drupal 7的Imeurs代码。如果您不知道$ nid,或者将其用于面板页面,您可以使用以下代码获取当前项目:

$item =  menu_get_item();    
$mlid = db_select('menu_links' , 'ml')
  ->condition('ml.link_path' , $item['href'])
  ->fields('ml' , array('mlid'))
  ->execute()
  ->fetchField();

答案 4 :(得分:1)

你真的不是在寻找Menu Block模块吗?