Показать раскрывающийся подуровень (autonav Concrete5)

Я пытаюсь отобразить раскрывающееся меню на 2-м уровне в шаблоне автонавигации Concrete5, но, похоже, это не работает.

  • Nav-элемент
  • Выпадающее меню(работает)
    • Nav-элемент
    • Выпадающее меню(не работает, закрывает первое раскрывающееся меню)
  • Nav-элемент

Я использую следующий код:

    <?php defined('C5_EXECUTE') or die("Access Denied."); ?>
    <?php View::getInstance()->requireAsset('javascript', 'jquery');
    $navItems = $controller->getNavItems();
    foreach ($navItems as $ni) {
        $classes = array();

        if ($ni->isCurrent) {
            $classes[] = 'nav-selected'; }
        if ($ni->inPath) {
            $classes[] = 'nav-path-selected';}
        if ($ni->hasSubmenu) {
            $classes[] = 'dropdown-menu';}
    }

    echo '<ul class = "nav navbar-nav navbar-right">';
    foreach ($navItems as $ni) {
        echo '<li class = "' . $ni->classes . '">';
        if ($ni->isEnabled) {
            $ni->hasSubmenu;
        }
        if ($ni->hasSubmenu && $ni->level >= 2  ) {
            echo '<a href = "#" class = "dropdown-toggle dropdown-lvl2" data-toggle = "dropdown" role = "button" aria-haspopup = "true" aria-expanded = "true">' . $ni->name . '<span class = "caret"></span></a>';
            } elseif ($ni->hasSubmenu){
                echo '<a href = "#" class = "dropdown-toggle" data-toggle = "dropdown" role = "button" aria-haspopup = "true" aria-expanded = "true">' . $ni->name . '<span class = "caret"></span></a>'; //opens a dropdown sub-menu        
        } else {
            echo '<a href = "' . $ni->url . '" target = "' . $ni->target . '" class = "' . $ni->classes . '">' . $ni->name . '</a>';
        }
        if ($ni->hasSubmenu && $ni->level >= 2  ) {
            echo '<ul class = "dropdown-menu dropdown-menu-lvl2">'; 
            } elseif ($ni->hasSubmenu){
                echo '<ul class = "dropdown-menu">'; 
        } else {
            echo '</li>'; //closes a nav item
            echo str_repeat('</ul></li>', $ni->subDepth); 
        }
    }
    echo '</ul>'; //closes the top-level menu

Итак, я думаю, что проблема в том, что Bootstrap data-toggle открывает и закрывает dropdown-menu. Любая идея, как заставить раскрывающийся список работать на других уровнях.

2. Строка: jquery уже должен быть добавлен, поэтому ваш requireAsset() не нужен. Или вы используете старую версию c5?

1stthomas 25.06.2018 20:34

Я использую версию 8.3.2. Удаление строки не приводит к поломке и устранению проблемы. Это сгенерированный HTML ссылка на сайт (упрощенный)

Mesign 26.06.2018 11:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
155
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел способ отобразить многоуровневое выпадающее меню. Я добавил следующий код JavaScript:

https://jsfiddle.net/fxv214z0/

<script>
  (function($){
        $(document).ready(function(){
            $('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {
                event.preventDefault(); 
                event.stopPropagation(); 
                $(this).parent().siblings().removeClass('open');
                $(this).parent().toggleClass('open');
            });
        });
    })(jQuery);
</script>

Другие вопросы по теме