に基づいてサブメニューを作成しようとしてい$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']));
注-これはDrupal6に適用されます。
emmychanのソリューションの背後にある考え方は素晴らしいですが、エラーが含まれています。そこで、Drupal7のデータベースAPI用に書き直しました。
$mlid = db_select('menu_links' , 'ml')
->condition('ml.link_path' , $_GET['q'])
->fields('ml' , array('mlid'))
->execute()
->fetchField();
編集:Ambidexが提案するようにスニペットをより用途の広いものにするため$_GET['q']
に、現在のページのMLIDを取得するために使用するようにコードを更新しました。
これは、Drupal7のImeursコードに基づいています。$nidがわからない場合、またはパネルページでこれを使用する場合は、次のコードを使用して現在のアイテムを取得できます。
$item = menu_get_item();
$mlid = db_select('menu_links' , 'ml')
->condition('ml.link_path' , $item['href'])
->fields('ml' , array('mlid'))
->execute()
->fetchField();
メニューブロックモジュールを本当に探していませんか?