Update extend.php

这个提交包含在:
小小白哦
2025-08-31 16:13:32 +08:00
提交者 GitHub
父节点 feda2551a5
当前提交 81a2d78936
+23 -14
查看文件
@@ -3,34 +3,43 @@
use Flarum\Extend;
use Flarum\Api\Serializer\UserSerializer;
use Flarum\User\User;
use Illuminate\Contracts\View\Factory;
use Flarum\Frontend\Document;
use Illuminate\Support\Str;
return [
// 把 theme 字段暴露给前端
/* 1. 暴露字段给前端 */
(new Extend\ApiSerializer(UserSerializer::class))
->attribute('theme', fn ($serializer, User $user) => $user->getPreference('theme', 'hubui')),
// 允许前端修改 theme 偏好
/* 2. 允许用户修改 theme 偏好 */
(new Extend\User())
->registerPreference('theme', 'strval', 'hubui'),
// 根据当前主题注入对应的 less/css
/* 3. 把 4 个主题注册成可访问的资源(可选编译) */
(new Extend\Frontend('forum'))
->css(function (Factory $view, User $user) {
->css(__DIR__ . '/resources/less/hubui.less', 'theme-hubui')
->css(__DIR__ . '/resources/less/wanxi.less', 'theme-wanxi')
->css(__DIR__ . '/resources/less/fluent.less', 'theme-fluent')
->css(__DIR__ . '/resources/less/moderno.less', 'theme-moderno'),
/* 4. 根据当前用户 theme 把对应 <link rel="stylesheet"> 插入 <head> */
(new Extend\Frontend('forum'))
->content(function (Document $document, User $user) {
$theme = $user->getPreference('theme', 'hubui');
// 只注入存在的文件;文件名与 $theme 同
$file = __DIR__ . "/resources/less/{$theme}.less";
if (file_exists($file)) {
// 返回相对路径,Flarum 会自动编译
return $view->make('flarum.forum::frontend.content.css', [
'css' => ["theme-switcher/less/{$theme}.less"]
]);
// 只接受白名单,防止任意文件
if (!in_array($theme, ['hubui', 'wanxi', 'fluent', 'moderno'])) {
$theme = 'hubui';
}
$cssUrl = app('flarum.assets.forum')->getAssetUrl("theme-{$theme}.css");
if ($cssUrl) {
$document->head[] = '<link rel="stylesheet" href="' . e($cssUrl) . '">';
}
return null;
}),
// 引入论坛 JS
/* 5. 论坛 JS(设置页组件) */
(new Extend\Frontend('forum'))
->js(__DIR__ . '/js/dist/forum.js'),
];