Drupal модуль DHTML Menu – всегда развернутая корневая ветка меню, при любом разделе, в котором мы находимся

Есть такой замечательный модуль Drupal - DHTML Menu. Позволяет разворачивать разделы меню без перегрузки страницы.  Но вот корневой пункт у него всегда свернут, если мы находимся в любом другом разделе, кроме нашего меню. Например, если у нас два меню или больше. Захотелось всегда отображать содержимое корневого раздела.

Делала на такой конфигурации:

Есть интернет-магазин на Ubercart. Вложенность (разделы) на основе таксономии. И в блоке выводится каталог продукции. Находясь на главной странице сайта, или на любой другой, не относящейся к каталогу, пункт меню Каталог всегда свернут. Мне бы хотелось, чтобы корневой раздел был всегда развернут.

Решение. Далеко не идеально, но зато быстро.

Будем править модуль  DHTML Menu.

1. Топаем в Директория_Сайта\www\sites\all\modules\dhtml_menu\dhtml_menu.module

ищем функцию function dhtml_menu_theme_menu_item_link($link) .

В ней на строчке 73 перед:

// Stack this item to track the recursion levels.
_dhtml_menu_stack($link);
}

// Pass the altered variables to the normal menu themer.
return $function($link);
}

вставляем:

/*<-- patch*/
/*+*/    if ($link['menu_name'] == "menu-catalogmenu") {
/*+*/	   if ($link['link_path'] == "taxonomy/term/9") {
/*+*/         $link['in_active_trail'] = true;
/*+*/       }
/*+*/    }
/*patch -->*/

, где:

menu-catalogmenu - наше меню, которое мы выводим;

taxonomy/term/9 - путь нашего корневого раздела (того, который мы хотим раскрыть).

2. В функции function dhtml_menu_theme_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL)

ищем такое:

global $theme;
static $cookie, $settings, $function;
if (!isset($cookie)) {
$settings =  variable_get('dhtml_menu_effects', unserialize(DHTML_MENU_DEFAULT));

// Do not use this feature when keeping only one menu open at a time - the active path will always be open.
$cookie = !empty($_COOKIE['dhtml_menu']) && empty($settings['siblings']) ? explode(',', $_COOKIE['dhtml_menu']) : array();
// Cascade up to the original theming function.
$registry = variable_get('dhtml_menu_theme', array());
$function = isset($registry[$theme]) ? $registry[$theme]['menu_item'] : 'theme_menu_item';
}

После него (у меня строка 866) вставляем:

/*++*/ $in_active_trail = $item['in_active_trail'];//patch;

Усе)). Собственно, мы можем так развернуть любой пункт меню, да хоть все сразу).

Рекомендовать в Социальных сетях:
 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *