getConfig(); $info = get_addon_info('darktheme'); $request = Request::instance(); $module = strtolower($request->module()); $controller = strtolower($request->controller()); $action = strtolower($request->action()); if ($module != 'admin') { return; } //判断忽略的URL $url = $request->url(); $url = preg_replace("/\/(\w+)\.php\//i", '/', $url); $ignoreUrlArr = array_filter(explode("\n", str_replace(["\r\n"], "\n", $config['ignoreurllist']))); foreach ($ignoreUrlArr as $index => $item) { if (stripos($url, $item) === 0) { return; } } //判断用户是否有手动设定样式 $mode = $config['mode']; $thememode = cookie("thememode"); if ($thememode && in_array($thememode, ['dark', 'light'])) { $mode = $thememode; $config['mode'] = $thememode; } $mode = $mode === 'force' ? 'dark' : $mode; //计算资源路径 $cdnurl = Config::get('view_replace_str.__CDN__'); if ($mode === 'dark' || $mode === 'force') { $content = preg_replace("//i", "", $content); } elseif (!$thememode) { $content = preg_replace("//i", "", $content); } //模式判断 $media = $config['mode'] == 'auto' ? 'media="(prefers-color-scheme: dark)"' : ''; $media = ''; $cssfile = ''; $customcss = $config['customcss'] ?? ''; //替换页面中的自定深色CSS文件 $content = preg_replace_callback("//i", function ($match) use ($media) { $match[0] = str_replace('([\s\S]*?)<\/style>/i", function ($match) use (&$customcss) { $customcss = $customcss . "\n" . $match[1]; return ''; }, $content); //添加自定义CSSHook,便于其它插件适配 $results = Hook::listen("darktheme_customcss", $content); foreach ($results as $index => $result) { if (!$result) { continue; } $result = str_replace('__CDN__', $cdnurl, $result); if (stripos($result, 'body.darktheme') !== false || stripos($result, '{') !== false) { $customcss = $customcss . "\n" . $result; } else { $cssfile = $cssfile . "\n" . ''; } } $cssfile = $cssfile . ''; //自定义CSS if ($customcss) { $cssmediabegin = $config['mode'] == 'auto' ? "@media (prefers-color-scheme: dark) {\n" : ""; $cssmediaend = $config['mode'] == 'auto' ? "\n}" : ""; $cssmediabegin = $cssmediaend = ""; $cssfile .= "\n"; } //在head前写入CSS $content = preg_replace("/<\/head>/i", $cssfile . "\n\$0", $content); } /** * @param $params */ public function configInit(&$params) { $config = $this->getConfig(); $mode = $config['mode']; $thememode = cookie("thememode"); if ($thememode && in_array($thememode, ['dark', 'light'])) { $mode = $thememode; } $mode = $mode === 'force' ? 'dark' : $mode; $params['darktheme'] = [ 'switchbtn' => !!$config['switchbtn'], 'mode' => $mode ]; } }