This commit is contained in:
KONE SOREL 2025-12-22 12:35:46 +00:00
parent 1befd492ce
commit 455cc66b79
2 changed files with 95 additions and 29 deletions

View File

@ -187,6 +187,11 @@ class NavigationManager {
// Configuration des comportements // Configuration des comportements
this.setupActiveMenu(); this.setupActiveMenu();
setTimeout(() => {
this.validateAndFixMenuConsistency();
}, 300);
this.setupMenuBehavior(); this.setupMenuBehavior();
this.setupKeyboardNavigation(); this.setupKeyboardNavigation();
@ -490,6 +495,54 @@ class ContextPanelManager {
this.isInitialized = false; this.isInitialized = false;
} }
/**
* Vérifie et corrige la cohérence menu/page
*/
validateAndFixMenuConsistency() {
const configParentId = window.appConfig?.activeParentId;
const activeLink = window.appConfig?.activeLink;
if (!configParentId || !activeLink) return;
const configMenuId = `submenu${configParentId}`;
const configMenu = document.getElementById(configMenuId);
// Vérification 1: Le menu configuré existe-t-il?
if (!configMenu) {
console.warn(`[Navigation] Menu configuré ${configMenuId} non trouvé, auto-détection...`);
this.autoDetectActiveMenu();
return;
}
// Vérification 2: Le menu contient-il un lien vers la page active?
const hasActiveLink = configMenu.querySelector(`a[href*="${activeLink}"]`);
if (!hasActiveLink) {
console.warn(`[Navigation] Menu ${configMenuId} ne contient pas ${activeLink}, recherche alternative...`);
// Chercher dans tous les menus
document.querySelectorAll('.nav-submenu').forEach(menu => {
if (menu.querySelector(`a[href*="${activeLink}"]`)) {
const correctMenuId = menu.id;
console.log(`[Navigation] ${activeLink} trouvé dans ${correctMenuId}`);
// Mettre à jour la config
this.activeMenuId = correctMenuId;
if (window.appConfig) {
const menuNum = correctMenuId.replace('submenu', '');
window.appConfig.activeParentId = menuNum;
}
// Appliquer
setTimeout(() => {
this.openMenu(correctMenuId);
this.currentOpenMenu = correctMenuId;
}, 100);
}
});
}
}
/** /**
* Initialiser le panel contextuel * Initialiser le panel contextuel
* @public - Méthode appelée par UXManager * @public - Méthode appelée par UXManager

View File

@ -10,44 +10,57 @@ $_SESSION['firstLevelMenu'] = $activeLink;
$companyDisplayName = htmlspecialchars($_SESSION['nomSociete'], ENT_QUOTES); $companyDisplayName = htmlspecialchars($_SESSION['nomSociete'], ENT_QUOTES);
$imgData = $_SESSION['photoAssureCrypte'] ?? ''; $imgData = $_SESSION['photoAssureCrypte'] ?? '';
// Détection automatique des menus actifs - VERSION CORRIGÉE // ============================================
$activeParentId = null; // FONCTION DE DÉTECTION - À METTRE EN HAUT DU FICHIER
$activeChildId = null; // ============================================
foreach ($menus as $key0 => $menuParent) { /**
$menuChildrenLevelOne = $gabary->get_menus_by_parent_code($menuParent['vue']); * Détecte le menu actif de manière fiable
* @param string $activeLink Lien de la page active (ex: "Accueil")
* @param array $menus Liste des menus parents
* @param object $gabary Instance Gabary pour récupérer les enfants
* @return array ['parent' => string, 'child' => string|null]
*/
function detectActiveMenu($activeLink, $menus, $gabary) {
// LOG SIMPLIFIÉE ET FIABLE :
// 1. Vérifier si c'est un lien DIRECT (comme "Accueil") // 1. ACCUEIL = TOUJOURS menu 0 (priorité absolue)
if (empty($menuChildrenLevelOne)) { if ($activeLink == 'Accueil') {
// Menu sans enfants = lien direct return ['parent' => '0', 'child' => null];
$parentLink = explode('/', $menuParent['lienMenu'])[0] ?? '';
if (!empty($parentLink) && $parentLink == $activeLink) {
$activeParentId = $key0;
break;
}
} }
// 2. Vérifier les SOUS-MENUS (enfants)
else { // 2. Recherche dans les autres menus
foreach ($menuChildrenLevelOne as $key1 => $menuChild) { foreach ($menus as $key0 => $menuParent) {
$menuChildren = $gabary->get_menus_by_parent_code($menuParent['vue']);
// Vérifier chaque enfant
foreach ($menuChildren as $key1 => $menuChild) {
$childLink = explode('/', $menuChild['lienMenu'])[0] ?? ''; $childLink = explode('/', $menuChild['lienMenu'])[0] ?? '';
if ($childLink == $activeLink) { if ($childLink == $activeLink) {
$activeParentId = $key0; return ['parent' => (string)$key0, 'child' => (string)$key1];
$activeChildId = $key1;
break 2;
} }
} }
} }
// 3. Fallback : premier menu
return ['parent' => '0', 'child' => null];
} }
// CORRECTION IMPORTANTE : Si c'est "Accueil" et pas trouvé, c'est menu 0 // ============================================
if ($activeParentId === null && $activeLink == 'Accueil') { // UTILISATION - REMPLACE VOTRE CODE ACTUEL
$activeParentId = 0; // ============================================
}
// Toujours avoir une valeur $menuData = detectActiveMenu($activeLink, $menus, $gabary);
if ($activeParentId === null) { $activeParentId = $menuData['parent'];
$activeParentId = 0; $activeChildId = $menuData['child'];
}
// Pour le débogage
echo "<script>";
echo "console.log('DÉTECTION MENU:');";
echo "console.log(' Page: \"{$activeLink}\"');";
echo "console.log(' Parent: {$activeParentId}');";
echo "console.log(' Enfant: " . ($activeChildId ?? 'null') . "');";
echo "</script>";
?> ?>
<!-- DIAGNOSTIC - À ajouter juste avant la sidebar --> <!-- DIAGNOSTIC - À ajouter juste avant la sidebar -->