Skip to content

Commit 70c9e19

Browse files
committed
fix: espansione sottomenu
1 parent f7a4377 commit 70c9e19

3 files changed

Lines changed: 66 additions & 7 deletions

File tree

assets/src/css/style.css

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2445,6 +2445,20 @@ body:not(.sidebar-collapse) .sidebar .nav-treeview .nav-treeview .nav-link {
24452445
text-align: left;
24462446
}
24472447

2448+
/* Stili per il menu con sottomenu */
2449+
.nav-sidebar .menu-text {
2450+
cursor: pointer;
2451+
display: inline;
2452+
padding: 2px 4px;
2453+
border-radius: 3px;
2454+
transition: background-color 0.2s ease;
2455+
}
2456+
2457+
.nav-sidebar .menu-text:hover {
2458+
background-color: rgba(255, 255, 255, 0.1);
2459+
text-decoration: none;
2460+
}
2461+
24482462
.hide, .hidden{
24492463
display: none;
24502464
}

assets/src/js/base/sidebar.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,36 @@ $(document).ready(function () {
3939
}
4040
}
4141

42+
// Gestione click specifico sul testo del menu per navigare al modulo
43+
$(document).on('click', '.nav-sidebar .menu-text', function(e) {
44+
e.preventDefault();
45+
e.stopPropagation();
46+
47+
const $link = $(this).closest('.nav-link[data-has-submenu="true"]');
48+
const href = $link.attr('href');
49+
50+
if (href && href !== 'javascript:;' && href !== '#') {
51+
window.location.href = href;
52+
}
53+
});
54+
55+
// Gestione click sull'icona freccia per compattare quando il menu è espanso
56+
$(document).on('click', '.nav-sidebar .nav-item.menu-open > .nav-link[data-widget="treeview"] .fa-angle-left', function(e) {
57+
e.preventDefault();
58+
e.stopPropagation();
59+
60+
const $navItem = $(this).closest('.nav-item');
61+
62+
// Compatta il menu solo se è attualmente espanso
63+
if ($navItem.hasClass('menu-open')) {
64+
$navItem.removeClass('menu-open');
65+
$(this).closest('.nav-link').attr('aria-expanded', 'false');
66+
$navItem.find('.nav-treeview').slideUp(300);
67+
}
68+
});
69+
70+
71+
4272
// Mostra/nasconde sidebar del menu principale
4373
$(".sidebar-toggle").on("click", function () {
4474
if ($("body").hasClass("sidebar-collapse")) {

src/Modules.php

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -349,19 +349,34 @@ protected static function sidebarMenu($element, $actual = null, $max_depth = 3,
349349

350350
$result = '';
351351
if ($show) {
352-
$result .= '<li class="nav-item'.($active && !empty($submenus) ? ' menu-open' : '').'" id="'.$element['id'].'" data-id="'.$element['id'].'" '.($link != 'javascript:;' ? 'onclick="location.href=\''.$link.'\';"' : '').'>
353-
<a href="'.$link.'" class="nav-link'.($active ? ' active' : '').'" target="'.$target.'">
354-
<i class="'.$element['icon'].'">&nbsp;</i>
355-
<p>'.$title.'</p>';
356-
if (!empty($submenus) && !empty($temp)) {
352+
$hasSubmenus = !empty($submenus) && !empty($temp);
353+
$onclickAttr = (!$hasSubmenus && $link != 'javascript:;') ? 'onclick="location.href=\''.$link.'\';"' : '';
354+
355+
$result .= '<li class="nav-item'.($active && $hasSubmenus ? ' menu-open' : '').'" id="'.$element['id'].'" data-id="'.$element['id'].'" '.$onclickAttr.'>';
356+
357+
if ($hasSubmenus) {
358+
// Per i menu con sottomenu, distinguiamo tra menu con modulo e menu contenitori
359+
$hasModule = ($link != 'javascript:;');
360+
$menuTextClass = $hasModule ? 'menu-text' : '';
361+
$dataAttribute = $hasModule ? ' data-has-submenu="true"' : '';
362+
357363
$result .= '
358-
<i class="right fa fa-angle-left"></i>
364+
<a href="'.$link.'" class="nav-link'.($active ? ' active' : '').'" data-widget="treeview" role="button" aria-expanded="'.($active ? 'true' : 'false').'"'.$dataAttribute.'>
365+
<i class="'.$element['icon'].'">&nbsp;</i>
366+
<p><span class="'.$menuTextClass.'">'.$title.'</span>
367+
<i class="right fa fa-angle-left"></i>
368+
</p>
359369
</a>
360370
<ul class="nav nav-treeview">
361371
'.$temp.'
362372
</ul>';
363373
} else {
364-
$result .= '</a>';
374+
// Per i menu senza sottomenu, comportamento normale
375+
$result .= '
376+
<a href="'.$link.'" class="nav-link'.($active ? ' active' : '').'" target="'.$target.'">
377+
<i class="'.$element['icon'].'">&nbsp;</i>
378+
<p>'.$title.'</p>
379+
</a>';
365380
}
366381
$result .= '</li>';
367382
}

0 commit comments

Comments
 (0)