Как получить $ mlid по нажатому пункту меню в Drupal? - PullRequest
1 голос
/ 02 февраля 2010

Я пытаюсь построить подменю на основе $mlid. Я нашел функцию, которая, кажется, выполняет эту работу, но я просто не могу понять, как получить $mlid пункта меню, по которому только что щелкнули.

Я нашел функцию в ссылке на аналогичный пост здесь на SO (http://drupal.org/node/249257),, но я могу найти только примеры, где $ mlid установлен вручную. Любые предложения?

Ответы [ 5 ]

4 голосов
/ 16 мая 2011

Идея решения emmychan великолепна, но содержит ошибки. Поэтому я переписал его для API базы данных Drupal 7:

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

РЕДАКТИРОВАТЬ: чтобы сделать фрагмент более универсальным, как предлагает Ambidex, я обновил код, чтобы он использовал $_GET['q'] для получения MLID текущей страницы.

4 голосов
/ 02 февраля 2010

Вы можете использовать функцию 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.

3 голосов
/ 25 октября 2012

Советую использовать: menu_get_active_trail()

Вы получите текущий $mlid.

Это для Drupal 7.

2 голосов
/ 22 июня 2011

Это основано на коде Imeurs для Drupal 7. Если вы не знаете $ nid или будете использовать его со страницами панелей, вы можете получить текущий элемент, используя следующий код:

$item =  menu_get_item();    
$mlid = db_select('menu_links' , 'ml')
  ->condition('ml.link_path' , $item['href'])
  ->fields('ml' , array('mlid'))
  ->execute()
  ->fetchField();
1 голос
/ 02 февраля 2010

Разве вы не ищете модуль Блок меню ?

...