Установите пункт главного меню активным с помощью пользовательского кода


Я хочу установить пункт меню главного меню как активный (класс="активный").

Я специально ищу крючок или функцию, а не модуль contrib.

Я видел рекомендации для Контекста , и я заглянул в код модуля, но он использует крючки, которые я не могу найти на API-сайте .

Author: Letharion, 2012-01-21

4 answers

Если вы просто хотите добавить класс "активный" в пункт меню, вы можете сделать это в коде перед печатью меню. Если вы хотите, чтобы пункт меню также действовал как активный элемент, вы можете использовать menu_tree_set_path(), который предположительно был добавлен в Drupal 7.9.

В более ранних версиях и Drupal 6 я использовал это:

function mymodule_init() {
  $item = menu_get_item($_GET['q']);
  $item['href'] = 'node/1';
  menu_set_item(NULL, $item);
}

Однако оба варианта просто добавляют класс (классы) "активный след" (не "активный"), но этого должно быть достаточно в большинстве случаев.

 2
Author: Madis, 2012-02-05 16:25:55

Вы могли бы использовать menu_set_active_trail чтобы установить, какое меню должно отображаться как активное.

Другой способ - возиться с $_GET['q'], но вы действительно хотите избежать этого, если это вообще возможно, так как это может привести к некоторым странным ошибкам.

 1
Author: googletorp, 2012-01-21 10:47:06

Мое решение таково:

function mymodule_init() {
    $link=menu_link_load(346);
    $link["options"]["attributes"]["class"]="active";
    menu_link_save($link);
}

Идентификатор 346 - это mlid понятия не имею, что это значит, но я получил этот идентификатор с этой маленькой свалкой:

echo('<pre>');
dump(menu_tree_all_data('main-menu'));
echo('</pre>');
 1
Author: rekire, 2012-01-21 18:25:34

Вы также можете использовать 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;

        }

    }
}
 1
Author: batMask, 2018-01-03 06:50:45