Вы здесь

Не отображается меню третьего уровня в Bootstrap 3

0

Добрый день.

Сталкивался ли кто-нибудь с проблемой неотображения меню третьего уровня в Bootstrap 3 ?

То есть, отображается элемент меню, отображается дочерний элемент подменю, а вот дочерний от дочернего - отображаться не хочет.

Версия Drupal: 
7.x
Категория: 
Theming
Связанные проекты: 
Bootstrap
Вопрос задан 06.12.2015 - 20:44

Ответы

2

Мне помогло вот это https://gist.github.com/dotist/11317279 по совету Платона Федоровича.
Пункты меню должны быть раскрытыми.

Ответ дан 06.12.2015 - 21:37
Аватар пользователя pr0g
pr0g
36

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

Комментарий оставлен 06.12.2015 - 22:17

Я забыл что менял условие.

elseif ((!empty($element['#original_link']['depth'])) && ($element['#original_link']['depth'] == 1)) {

на

elseif ((!empty($element['#original_link']['depth'])) && ($element['#original_link']['depth'] >= 1)) {
Комментарий оставлен 06.12.2015 - 22:48

В целом, работает (см. рис). Осталось немного поработать с выводом. Спасибо большое.

Комментарий оставлен 06.12.2015 - 22:53

Скажите, а на уровне стилей bootstrap можно отрегулировать, чтобы меню 3-го уровня появлялось не над меню 2-го уровня, а справа от него ? И чтобы, соответственно, стрелочка на меню 2-го уровня указывала "вправо".

Комментарий оставлен 06.12.2015 - 23:33

Я использовал данный способ для вертикального меню, так что он подошел мне идеально. Думаю одним CSS не справиться этим, надо корректировать код функции, чтобы разделить 2 и 3 уровень и добавить свои классы для каждого уровня, конечно если у вас будет всего 3 уровня меню. После этого уже будет проще работать CSS с каждым уровнем меню.

Комментарий оставлен 07.12.2015 - 06:03

Попробуйте SuperFish - третий уровень выводит хорошо, CSSом подправите что нужно по своему вкусу.

Комментарий оставлен 07.12.2015 - 11:38

В общем, с помощью небольшого кода JQuery удалось решить данную проблему.

Комментарий оставлен 07.12.2015 - 11:56

В общем, немного модифицировал одну строку Вашего кода, чтобы добавлялся класс, хранящий уровень меню

$sub_menu = '<ul class="dropdown-menu menu-level-' . ($element['#original_link']['depth']+1) . '">' . drupal_render($element['#below']) . '</ul>';

И вот небольшой код на JQuery, подключается к теме.
Пока работает только с меню 3-го уровня, но думаю сделать его универсальным для меню с уровнем > 3

(function ($) {
    Drupal.behaviors.YOUR_BEHAVIOR = {
        attach : function(context, settings) {
            $('.menu-level-3').each(function(i){

                var menu2 = $(this).parent().parent();
                var current = $(this);
                var menupos = menu2.offset();

                var newpos;
                if ((menupos.left + menu2.width()) + 30 > $(window).width()) {
                    newpos = -menu2.width()+5;
                } else {
                    newpos = menu2.width()-5;
                }

                current.css({left: newpos, top: current.offset().top-8 });
            });
        }
    };
})(jQuery);
Комментарий оставлен 07.12.2015 - 12:42