From 984a73159fc5990e91eadd478d9a4c2b8cfa5bd9 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 8 Feb 2026 13:39:34 +0000 Subject: [PATCH] Theme modules: Updated view includes to prevent caching conflicts --- app/App/Providers/ThemeServiceProvider.php | 17 ++++++++++------- app/Theming/ThemeViews.php | 20 ++++++++++++-------- resources/views/pages/show.blade.php | 2 +- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/app/App/Providers/ThemeServiceProvider.php b/app/App/Providers/ThemeServiceProvider.php index cca1ca236..671e5e1df 100644 --- a/app/App/Providers/ThemeServiceProvider.php +++ b/app/App/Providers/ThemeServiceProvider.php @@ -27,6 +27,16 @@ class ThemeServiceProvider extends ServiceProvider // Boot up the theme system $themeService = $this->app->make(ThemeService::class); $viewFactory = $this->app->make('view'); + $themeViews = new ThemeViews($viewFactory->getFinder()); + + // Use a custom include so that we can insert theme views before/after includes. + // This is done, even if no theme is active, so that view caching does not create problems + // when switching between themes or when switching a theme on/off. + $viewFactory->share('__themeViews', $themeViews); + Blade::directive('include', function ($expression) { + return "handleViewInclude({$expression}, array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1])); ?>"; + }); + if (!$themeService->getTheme()) { return; } @@ -35,14 +45,7 @@ class ThemeServiceProvider extends ServiceProvider $themeService->readThemeActions(); $themeService->dispatch(ThemeEvents::APP_BOOT, $this->app); - $themeViews = new ThemeViews($viewFactory->getFinder()); $themeViews->registerViewPathsForTheme($themeService->getModules()); $themeService->dispatch(ThemeEvents::THEME_REGISTER_VIEWS, $themeViews); - if ($themeViews->hasRegisteredViews()) { - $viewFactory->share('__themeViews', $themeViews); - Blade::directive('include', function ($expression) { - return "handleViewInclude({$expression}, array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1])); ?>"; - }); - } } } diff --git a/app/Theming/ThemeViews.php b/app/Theming/ThemeViews.php index 88769bae1..630ff9d8d 100644 --- a/app/Theming/ThemeViews.php +++ b/app/Theming/ThemeViews.php @@ -42,16 +42,20 @@ class ThemeViews /** * Provide the response for a blade template view include. */ - public function handleViewInclude(string $viewPath, array $data = []): string + public function handleViewInclude(string $viewPath, array $data = [], array $mergeData = []): string { if (!$this->hasRegisteredViews()) { - return view()->make($viewPath, $data)->render(); + return view()->make($viewPath, $data, $mergeData)->render(); + } + + if (str_contains('book-tree', $viewPath)) { + dd($viewPath, $data); } $viewsContent = [ - ...$this->renderViewSets($this->beforeViews[$viewPath] ?? [], $data), - view()->make($viewPath, $data)->render(), - ...$this->renderViewSets($this->afterViews[$viewPath] ?? [], $data), + ...$this->renderViewSets($this->beforeViews[$viewPath] ?? [], $data, $mergeData), + view()->make($viewPath, $data, $mergeData)->render(), + ...$this->renderViewSets($this->afterViews[$viewPath] ?? [], $data, $mergeData), ]; return implode("\n", $viewsContent); @@ -97,15 +101,15 @@ class ThemeViews * @param array $viewSet * @return string[] */ - protected function renderViewSets(array $viewSet, array $data): array + protected function renderViewSets(array $viewSet, array $data, array $mergeData): array { $paths = array_keys($viewSet); usort($paths, function (string $a, string $b) use ($viewSet) { return $viewSet[$a] <=> $viewSet[$b]; }); - return array_map(function (string $viewPath) use ($data) { - return view()->file($viewPath, $data)->render(); + return array_map(function (string $viewPath) use ($data, $mergeData) { + return view()->file($viewPath, $data, $mergeData)->render(); }, $paths); } } diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php index fcec90157..3338646a5 100644 --- a/resources/views/pages/show.blade.php +++ b/resources/views/pages/show.blade.php @@ -22,7 +22,7 @@ class="page-content clearfix"> @include('pages.parts.page-display') - @include('pages.parts.pointer', ['page' => $page]) + @include('pages.parts.pointer', ['page' => $page, 'commentTree' => $commentTree]) @include('entities.sibling-navigation', ['next' => $next, 'previous' => $previous])