【问题标题】:How to get the clicked menu item's $mlid in Drupal?如何在 Drupal 中获取单击的菜单项的 $mlid?
【发布时间】:2010-02-02 10:07:04
【问题描述】:

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

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

【问题讨论】:

    标签: drupal menu submenu


    【解决方案1】:

    您可以使用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。

    【讨论】:

    • 该代码缺少 %s 周围的单引号,并且还缺少结束括号以关闭 db_result 函数
    【解决方案2】:

    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
    【解决方案3】:

    我建议你使用:menu_get_active_trail()

    您将获得当前的$mlid

    适用于 Drupal 7。

    【讨论】:

      【解决方案4】:

      这是基于 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();
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-12
          • 2012-04-19
          相关资源
          最近更新 更多