Support multi admin theme

This commit is contained in:
jitendra 2020-08-10 19:25:51 +05:30
parent 41725a671f
commit 9c0ec6f644
3 changed files with 44 additions and 18 deletions

View File

@ -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'
]
]
];

View File

@ -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.
*

View File

@ -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;