Я пытаюсь отобразить раскрывающееся меню на 2-м уровне в шаблоне автонавигации Concrete5, но, похоже, это не работает.
Я использую следующий код:
<?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. Любая идея, как заставить раскрывающийся список работать на других уровнях.
Я использую версию 8.3.2. Удаление строки не приводит к поломке и устранению проблемы. Это сгенерированный HTML ссылка на сайт (упрощенный)






Я нашел способ отобразить многоуровневое выпадающее меню. Я добавил следующий код 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>
2. Строка: jquery уже должен быть добавлен, поэтому ваш
requireAsset()не нужен. Или вы используете старую версию c5?