diff --git a/app/Controllers/Admin/Menu.php b/app/Controllers/Admin/Menu.php index 73cf7c0..d5be849 100644 --- a/app/Controllers/Admin/Menu.php +++ b/app/Controllers/Admin/Menu.php @@ -33,7 +33,10 @@ class Menu extends BaseController $requestedMtIdx = (int) ($this->request->getGet('mt_idx') ?? 0); $mtIdx = $this->resolveMtIdx($requestedMtIdx, $types); $debugMode = $this->request->getGet('debug') === '1'; + $fallbackApplied = false; $list = $mtIdx > 0 ? $this->menuModel->getAllByType($mtIdx, $lgIdx) : []; + $currentType = $mtIdx > 0 ? $this->typeModel->find($mtIdx) : null; + $currentTypeCode = (string) ($currentType->mt_code ?? ''); // 현재 지자체에 메뉴가 없으면, mt_idx별로 기본 지자체(lg_idx=1)의 메뉴를 한 번 복사한다. if ($mtIdx > 0 && empty($list)) { @@ -41,20 +44,33 @@ class Menu extends BaseController $list = $this->menuModel->getAllByType($mtIdx, $lgIdx); } + // 운영 DB 불일치 대응: site 타입인데 mt_idx 매핑이 어긋난 경우(예: menu_type=2, menu는 4 사용) + if (empty($list) && $currentTypeCode === 'site' && $mtIdx !== 4) { + $fallbackMtIdx = 4; + $fallbackList = $this->menuModel->getAllByType($fallbackMtIdx, $lgIdx); + if (empty($fallbackList)) { + $this->menuModel->copyDefaultsFromLg($fallbackMtIdx, 1, $lgIdx); + $fallbackList = $this->menuModel->getAllByType($fallbackMtIdx, $lgIdx); + } + if (! empty($fallbackList)) { + $mtIdx = $fallbackMtIdx; + $list = $fallbackList; + $fallbackApplied = true; + } + } + // 트리 순서대로 상위 메뉴 바로 아래에 하위 메뉴가 오도록 평탄화 if (! empty($list)) { $tree = build_menu_tree($list); $list = flatten_menu_tree($tree); } - $currentType = $mtIdx > 0 ? $this->typeModel->find($mtIdx) : null; - return view('admin/layout', [ 'title' => '메뉴 관리', 'content' => view('admin/menu/index', [ 'types' => $types, 'mtIdx' => $mtIdx, - 'mtCode' => $currentType->mt_code ?? '', + 'mtCode' => $currentTypeCode, 'list' => $list, 'levelNames' => config('Roles')->levelNames, 'debug_mode' => $debugMode, @@ -62,8 +78,9 @@ class Menu extends BaseController 'lg_idx' => $lgIdx, 'requested_mt_idx' => $requestedMtIdx, 'resolved_mt_idx' => $mtIdx, - 'resolved_mt_code' => (string) ($currentType->mt_code ?? ''), + 'resolved_mt_code' => $currentTypeCode, 'list_count' => count($list), + 'fallback_applied' => $fallbackApplied ? 'Y' : 'N', ], ]), ]); diff --git a/app/Views/admin/menu/index.php b/app/Views/admin/menu/index.php index 253d222..f3fc34e 100644 --- a/app/Views/admin/menu/index.php +++ b/app/Views/admin/menu/index.php @@ -53,7 +53,8 @@ $adminMenuListResolveHref = static function (string $rawLink) use ($adminMenusNa requested_mt_idx=, resolved_mt_idx=, resolved_mt_code=, - list_count= + list_count=, + fallback_applied=