【发布时间】:2010-02-02 10:07:04
【问题描述】:
我正在尝试基于$mlid 构建一个子菜单。我找到了一个似乎可以完成这项工作的函数,但我似乎无法弄清楚如何获取刚刚单击的菜单项的 $mlid。
我在 SO (http://drupal.org/node/249257) 上类似帖子的链接中找到了该函数,但我只能找到手动设置 $mlid 的示例。有什么建议吗?
【问题讨论】:
我正在尝试基于$mlid 构建一个子菜单。我找到了一个似乎可以完成这项工作的函数,但我似乎无法弄清楚如何获取刚刚单击的菜单项的 $mlid。
我在 SO (http://drupal.org/node/249257) 上类似帖子的链接中找到了该函数,但我只能找到手动设置 $mlid 的示例。有什么建议吗?
【问题讨论】:
您可以使用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。
【讨论】:
emmychan 的解决方案背后的想法很棒,但包含错误。所以我为 Drupal 7 的数据库 api 重写了它:
$mlid = db_select('menu_links' , 'ml')
->condition('ml.link_path' , $_GET['q'])
->fields('ml' , array('mlid'))
->execute()
->fetchField();
编辑:为了让 sn-p 像 Ambidex 一样更通用,我建议我更新了代码,因此它使用 $_GET['q'] 来尝试获取当前页面的 MLID。
【讨论】:
/user)
【讨论】:
这是基于 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();
【讨论】:
您不是真的在寻找Menu Block 模块吗?
【讨论】: