From ab9e8c8d18188eceaaf14e9c663ddeb66ca0f738 Mon Sep 17 00:00:00 2001 From: Divarion-D Date: Mon, 20 Apr 2026 20:33:41 +0300 Subject: [PATCH] fix(layout): prevent double footer rendering breaking Bootstrap dropdowns renderUnifiedLayoutFooter() was called twice - once from view files and once from BaseAdminController::render(). Since admin/footer.php uses require (not require_once), this loaded vendor.min.js twice, recreating jQuery and destroying Bootstrap's document-level dropdown handlers. - Add static $rendered guard to renderUnifiedLayoutFooter() for idempotency - Remove redundant footer call from BaseAdminController::render() - Remove split-mode (.scripts.php) mechanism from BaseAdminController - Add rRegisteredUsers, rLine to footer globals passthrough --- src/public/Controllers/Admin/BaseAdminController.php | 10 ---------- src/public/Views/layouts/footer.php | 1 + 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/public/Controllers/Admin/BaseAdminController.php b/src/public/Controllers/Admin/BaseAdminController.php index 1cfe85d6..8d4cfd4d 100644 --- a/src/public/Controllers/Admin/BaseAdminController.php +++ b/src/public/Controllers/Admin/BaseAdminController.php @@ -7,7 +7,6 @@ * 1. renderUnifiedLayoutHeader('admin') * 2. require Views/admin/{view}.php — HTML-контент * 3. renderUnifiedLayoutFooter('admin') - * 4. require Views/admin/{view}.scripts.php — page-specific JS * * Контроллер-наследник: * - Вызывает requirePermission() для проверки доступа @@ -153,19 +152,10 @@ class BaseAdminController { // 2. View content $__viewFile = $__viewsDir . $view . '.php'; - $__scriptsFile = $__viewsDir . $view . '.scripts.php'; - $__hasScriptsFile = file_exists($__scriptsFile); if (file_exists($__viewFile)) { require $__viewFile; } - - // Split mode: separate .scripts.php exists → footer + scripts handled here. - // Otherwise: view handles its own footer/closing HTML. - if ($__hasScriptsFile) { - renderUnifiedLayoutFooter($this->scope); - require $__scriptsFile; - } } /** diff --git a/src/public/Views/layouts/footer.php b/src/public/Views/layouts/footer.php index b5967afd..6e1db155 100644 --- a/src/public/Views/layouts/footer.php +++ b/src/public/Views/layouts/footer.php @@ -32,6 +32,7 @@ if (!function_exists('renderUnifiedLayoutFooter')) { 'rStreamIDs', 'rFilterBy', 'rSortArray', 'rFilterArray', 'rSearchBy', 'rURLs', 'rSubtitles', 'rLegacy', 'rSeries', 'rYearStart', 'rYearEnd', 'rRatingStart', 'rRatingEnd', + 'rRegisteredUsers', 'rLine', ] as $_g) { if (array_key_exists($_g, $GLOBALS)) { $$_g = $GLOBALS[$_g];