メインメニューのメニュー項目をアクティブに設定したい(class = "active")。
具体的には、contribモジュールではなく、フックまたは関数を探しています。
Context の推奨事項を確認し、モジュールコードを調べましたが、- API-Site では見つからないフックを使用しています。
私の解決策はこれです:
function mymodule_init() {
$link=menu_link_load(346);
$link["options"]["attributes"]["class"]="active";
menu_link_save($link);
}
ID 346はmlid
です。これが何を意味するかはわかりませんが、この小さなダンプでこのIDを取得しました。
echo('<pre>');
dump(menu_tree_all_data('main-menu'));
echo('</pre>');
「アクティブ」クラスをメニュー項目に追加するだけの場合は、メニューを印刷する前にコードで追加できます。メニュー項目をアクティブな項目のように機能させたい場合は、Drupal 7.9で追加されたと考えられる menu_tree_set_path() を使用できます。
以前のバージョンとDrupal 6では、これを使用しました:
function mymodule_init() {
$item = menu_get_item($_GET['q']);
$item['href'] = 'node/1';
menu_set_item(NULL, $item);
}
ただし、どちらのオプションも「active-trail」(「active」ではない)クラスを追加するだけですが、ほとんどの場合それで十分です。
menu_set_active_trail
どのメニューをアクティブとしてレンダリングするかを設定します。
もう1つの方法は、$_GET['q']
、しかし、それはいくつかの奇妙なバグにつながる可能性があるので、可能であれば、本当にそれを避けたいです。
hook_translated_menu_link_alter()
を使用することもできます
/**
* Implements hook_translated_menu_link_alter()
*/
function Module_translated_menu_link_alter(&$item, $map) {
if ($item['menu_name'] == 'menu-name') {
//check first two arg from url
$path = arg(0)."/".arg(1);
//add class active-trail if path match
if (strpos($item['link_path'], $path) !== false) {
$item['in_active_trail'] = true;
}
}
}