51 lines
1.5 KiB
PHP
51 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Blog\Providers;
|
|
|
|
use App\Blog\Support\ThemeManager;
|
|
use App\Blog\View\Composers\SidebarComposer;
|
|
use Illuminate\Support\Facades\File;
|
|
use Illuminate\Support\Facades\View;
|
|
use Illuminate\Support\ServiceProvider;
|
|
|
|
class ThemeServiceProvider extends ServiceProvider
|
|
{
|
|
public function register(): void
|
|
{
|
|
$this->app->singleton(ThemeManager::class);
|
|
}
|
|
|
|
public function boot(): void
|
|
{
|
|
// 激活主题的 views 目录前置到全局视图路径,实现主题覆盖 + 默认兜底
|
|
$this->prependActiveThemeViews();
|
|
|
|
// 侧边栏数据共享:所有前台视图自动获得 $categories/$recentPosts/$hotTags/$links 等
|
|
View::composer(
|
|
['index', 'show', 'list', 'archives', 'tags', 'tag', 'search', 'links', 'comments', 'login', 'register', 'profile'],
|
|
SidebarComposer::class
|
|
);
|
|
}
|
|
|
|
private function prependActiveThemeViews(): void
|
|
{
|
|
$manager = app(ThemeManager::class);
|
|
|
|
// 迁移尚未执行(如 migrate:fresh 首轮)时跳过 DB 查询,使用默认主题
|
|
$active = \Illuminate\Support\Facades\Schema::hasTable('settings')
|
|
? $manager->active()
|
|
: config('themes.default');
|
|
|
|
$views = $manager->path($active).'/views';
|
|
|
|
if (! is_dir($views)) {
|
|
return;
|
|
}
|
|
|
|
$paths = config('view.paths');
|
|
array_unshift($paths, $views);
|
|
config(['view.paths' => $paths]);
|
|
app('view')->getFinder()->setPaths($paths);
|
|
}
|
|
}
|