From 9c0ec6f6444b95d424ed3e3bb101a21e9334a7f5 Mon Sep 17 00:00:00 2001 From: jitendra Date: Mon, 10 Aug 2020 19:25:51 +0530 Subject: [PATCH] Support multi admin theme --- config/themes.php | 10 ++++++ packages/Webkul/Theme/src/ThemeViewFinder.php | 34 +++++++++++-------- packages/Webkul/Theme/src/Themes.php | 18 ++++++++-- 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/config/themes.php b/config/themes.php index d6610d7e9..35ca67e60 100755 --- a/config/themes.php +++ b/config/themes.php @@ -23,5 +23,15 @@ return [ 'name' => 'Velocity', 'parent' => 'default' ], + ], + + 'admin-default' => 'default', + + 'admin-themes' => [ + 'default' => [ + 'views_path' => 'resources/admin-themes/default/views', + 'assets_path' => 'public/admin-themes/default/assets', + 'name' => 'Default' + ] ] ]; \ No newline at end of file diff --git a/packages/Webkul/Theme/src/ThemeViewFinder.php b/packages/Webkul/Theme/src/ThemeViewFinder.php index fada46559..c835e6e6e 100755 --- a/packages/Webkul/Theme/src/ThemeViewFinder.php +++ b/packages/Webkul/Theme/src/ThemeViewFinder.php @@ -4,6 +4,7 @@ namespace Webkul\Theme; use Webkul\Theme\Facades\Themes; use Illuminate\Support\Arr; +use Illuminate\Support\Str; use Illuminate\View\FileViewFinder; class ThemeViewFinder extends FileViewFinder @@ -19,7 +20,7 @@ class ThemeViewFinder extends FileViewFinder // Extract the $view and the $namespace parts list($namespace, $view) = $this->parseNamespaceSegments($name); - if ($namespace != 'admin') { + if (! Str::contains(request()->route()->uri, 'admin/')) { $paths = $this->addThemeNamespacePaths($namespace); try { @@ -34,7 +35,23 @@ class ThemeViewFinder extends FileViewFinder return $this->findInPaths($view, $paths); } } else { - return $this->findInPaths($view, $this->hints[$namespace]); + $themes = app('themes'); + + $themes->set(config('themes.admin-default')); + + $paths = $this->addThemeNamespacePaths($namespace); + + try { + return $this->findInPaths($view, $paths); + } catch(\Exception $e) { + if ($namespace != 'admin') { + if (strpos($view, 'admin.') !== false) { + $view = str_replace('admin.', 'admin.' . Themes::current()->code . '.', $view); + } + } + + return $this->findInPaths($view, $paths); + } } } @@ -84,19 +101,6 @@ class ThemeViewFinder extends FileViewFinder } } - /** - * Get the string contents of the view. - * - * @param callable|null $callback - * @return array|string - * - * @throws \Throwable - */ - public function render(callable $callback = null) - { - dd(111); - } - /** * Set the array of paths where the views are being searched. * diff --git a/packages/Webkul/Theme/src/Themes.php b/packages/Webkul/Theme/src/Themes.php index 3a1ee1806..70dd273a3 100755 --- a/packages/Webkul/Theme/src/Themes.php +++ b/packages/Webkul/Theme/src/Themes.php @@ -3,6 +3,7 @@ namespace Webkul\Theme; use Illuminate\Support\Facades\Config; +use Illuminate\Support\Str; use Webkul\Theme\Theme; class Themes @@ -42,9 +43,15 @@ class Themes */ public function __construct() { - $this->laravelViewsPath = Config::get('view.paths'); + $routeURI = request()->route()->uri; - $this->defaultThemeCode = Config::get('themes.default', null); + if (Str::contains(request()->route()->uri, 'admin/')) { + $this->defaultThemeCode = Config::get('themes.admin-default', null); + } else { + $this->defaultThemeCode = Config::get('themes.default', null); + } + + $this->laravelViewsPath = Config::get('view.paths'); $this->loadThemes(); } @@ -85,7 +92,11 @@ class Themes { $parentThemes = []; - $themes = config('themes.themes', []); + if (Str::contains(request()->route()->uri, 'admin/')) { + $themes = config('themes.admin-themes', []); + } else { + $themes = config('themes.themes', []); + } foreach ($themes as $code => $data) { $this->themes[] = new Theme( @@ -140,6 +151,7 @@ class Themes Config::set('view.paths', $paths); $themeViewFinder = app('view.finder'); + $themeViewFinder->setPaths($paths); return $theme;