diff --git a/README.md b/README.md
deleted file mode 100644
index 6867fe0..0000000
--- a/README.md
+++ /dev/null
@@ -1,97 +0,0 @@
-# SEONexus 站群系统 🌐🚀
-
-
-
-**SEONexus** 是一个灵活且强大的站群系统,旨在通过不同的域名展示独特的网站和内容,方便用户进行 SEO 推广和管理。✨
-
-## 特性 🌟
-
-- **多域名管理**: 轻松管理多个域名,展示不同的网站内容。🖥️
-- **内容管理系统**: 友好的用户界面,方便编辑和更新网站内容。✏️
-- **SEO 优化工具**: 内置 SEO 工具,帮助优化网站以提高搜索引擎排名。📈
-- **流量分析**: 实时监控网站表现,集成流量分析功能。📊
-- **安全性**: 遵循最新的安全标准,确保用户数据和内容安全。🔒
-
-## 技术栈 🛠️
-
-- **PHP**: 8.4 🐘
-- **Nginx**: 🥡
-- **MySQL**: 8 🍃
-- **Redis**: 🔥
-- **Swoole**: ⚡
-- **ThinkPHP**: 8.1 🎉
-
-## 安装 ⚙️
-
-### 先决条件 ✅
-
-- [PHP 8.4](https://www.php.net/)
-- [MySQL 8](https://www.mysql.com/)
-- [Redis](https://redis.io/)
-- [Nginx](https://www.nginx.com/)
-- [Swoole](https://www.swoole.co.uk/)
-- [Composer](https://getcomposer.org/) (用于管理 PHP 依赖)
-
-### 克隆项目 📥
-
-$ git clone https://github.com/yourusername/SEONexus.git
-$ cd SEONexus
-
-### 安装依赖 📦
-
-$ composer install
-
-### 配置环境变量 ⚙️
-
-在项目根目录下创建一个 `.env` 文件,并添加必要的环境变量,例如:
-
-```
-DB_HOST=127.0.0.1
-DB_DATABASE=seonexus
-DB_USERNAME=your_username
-DB_PASSWORD=your_password
-REDIS_HOST=127.0.0.1
-```
-
-### 启动应用 🚀
-
-1. **使用 PHP 启动**:
-
- $ php think run
-
-2. **使用 Docker 启动** (可选):
-
- $ docker-compose up
-
-### 访问应用 🌍
-
-打开浏览器,访问 `http://localhost:80`。
-
-## 使用指南 📚
-
-- **添加新域名**: 在管理面板中,选择“添加域名”,输入所需信息。🆕
-- **编辑网站内容**: 点击需要编辑的网站,使用内置编辑器修改内容。📝
-- **查看分析数据**: 访问“分析”选项卡,监控流量和用户行为。🔍
-
-## 贡献 🤝
-
-我们欢迎任何形式的贡献!如果你想为 SEONexus 做出贡献,请遵循以下步骤:
-
-1. Fork 这个仓库 🍴
-2. 创建你的特性分支 ($ git checkout -b feature/YourFeature)
-3. 提交你的修改 ($ git commit -m 'Add some feature')
-4. 推送到分支 ($ git push origin feature/YourFeature)
-5. 提交一个 Pull Request 📥
-
-## 许可证 📜
-
-本项目采用 **MIT 许可证**。详细信息请参阅 [LICENSE](LICENSE) 文件。
-
-## 联系方式 📬
-
-如有任何问题或建议,请通过以下方式联系我:
-
-- **电子邮件**: your_email@example.com
-- **GitHub**: [yourusername](https://github.com/yourusername)
-
-感谢你对 SEONexus 项目的关注与支持!我们期待你的参与与反馈。一起推动 SEO 的未来!🌈
\ No newline at end of file
diff --git a/code/.example.env b/code/.example.env
deleted file mode 100644
index 708559a..0000000
--- a/code/.example.env
+++ /dev/null
@@ -1,64 +0,0 @@
-# 应用
-APP_DEBUG = true
-SHOW_ERROR_MSG = true
-DEFAULT_LANG = zh-cn
-
-# 数据库
-DB_TYPE = mysql
-DB_HOST = 127.0.0.1
-DB_NAME = novel
-DB_USER = root
-DB_PASS = qq123123
-DB_PORT = 3306
-DB_CHARSET = utf8mb4
-DB_SQL_DEBUG = true
-DB_FIELD_CACHE = false
-
-# 缓存
-CACHE_DRIVER = redis
-CACHE_TIME = 7200
-
-# REDIS
-REDIS_HOST = 127.0.0.1
-REDIS_PORT = 6379
-REDIS_PASSWORD =
-REDIS_PREFIX =
-REDIS_DATABASE = 0
-
-#MongoDB
-MONGO_HOST = 127.0.0.1
-MONGO_PORT = 27017
-MONGO_USER = admin
-MONGO_PASSWORD = qq123123
-MONGO_DB = novel
-
-# TASK
-TASK_PROCESS_NUM_01 = 4
-TASK_PROCESS_NUM_02 = 2
-
-# QUEUEU
-QUEUE_NAME_1 = QueueKey01
-QUEUE_EXEC_NUM_1 = 10
-QUEUE_NAME_2 = QueueKey02
-QUEUE_EXEC_NUM_2 = 10
-
-# LocalStorage
-STORAGE_LOCAL_DIR = /mnt/gluster
-
-# VIEW
-VIEW_DISPLAY_CACHE = false
-VIEW_TPL_CACHE = false
-VIEW_DATA_CACHE = false
-
-# PROXY
-PROXY_STATUS = true
-# PROXY_CODE = XIONGMAO
-# PROXY_HOST = dtbf.xiongmaodaili.com:8089
-# PROXY_KEY = DT20250413204710pFcgjMR9
-# PROXY_SECRET = 583b141edcf65ce94f83591c5cb592ed
-
-PROXY_CODE = KUAI
-#PROXY_HOST = w739.kdltps.com
-PROXY_HOST = w740.kdltps.com:15818
-PROXY_KEY = t14468368981914
-PROXY_SECRET = 03xvfdc0
diff --git a/code/.gitignore b/code/.gitignore
deleted file mode 100644
index 3a8d1e7..0000000
--- a/code/.gitignore
+++ /dev/null
@@ -1,12 +0,0 @@
-*.log
-.env
-composer.phar
-.DS_Store
-Thumbs.db
-/.idea
-/.vscode
-/vendor
-/.settings
-/.buildpath
-/.project
-composer.lock
\ No newline at end of file
diff --git a/code/.travis.yml b/code/.travis.yml
deleted file mode 100644
index 36f7b6f..0000000
--- a/code/.travis.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-sudo: false
-
-language: php
-
-branches:
- only:
- - stable
-
-cache:
- directories:
- - $HOME/.composer/cache
-
-before_install:
- - composer self-update
-
-install:
- - composer install --no-dev --no-interaction --ignore-platform-reqs
- - zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Core.zip .
- - composer require --update-no-dev --no-interaction "topthink/think-image:^1.0"
- - composer require --update-no-dev --no-interaction "topthink/think-migration:^1.0"
- - composer require --update-no-dev --no-interaction "topthink/think-captcha:^1.0"
- - composer require --update-no-dev --no-interaction "topthink/think-mongo:^1.0"
- - composer require --update-no-dev --no-interaction "topthink/think-worker:^1.0"
- - composer require --update-no-dev --no-interaction "topthink/think-helper:^1.0"
- - composer require --update-no-dev --no-interaction "topthink/think-queue:^1.0"
- - composer require --update-no-dev --no-interaction "topthink/think-angular:^1.0"
- - composer require --dev --update-no-dev --no-interaction "topthink/think-testing:^1.0"
- - zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Full.zip .
-
-script:
- - php think unit
-
-deploy:
- provider: releases
- api_key:
- secure: TSF6bnl2JYN72UQOORAJYL+CqIryP2gHVKt6grfveQ7d9rleAEoxlq6PWxbvTI4jZ5nrPpUcBUpWIJHNgVcs+bzLFtyh5THaLqm39uCgBbrW7M8rI26L8sBh/6nsdtGgdeQrO/cLu31QoTzbwuz1WfAVoCdCkOSZeXyT/CclH99qV6RYyQYqaD2wpRjrhA5O4fSsEkiPVuk0GaOogFlrQHx+C+lHnf6pa1KxEoN1A0UxxVfGX6K4y5g4WQDO5zT4bLeubkWOXK0G51XSvACDOZVIyLdjApaOFTwamPcD3S1tfvuxRWWvsCD5ljFvb2kSmx5BIBNwN80MzuBmrGIC27XLGOxyMerwKxB6DskNUO9PflKHDPI61DRq0FTy1fv70SFMSiAtUv9aJRT41NQh9iJJ0vC8dl+xcxrWIjU1GG6+l/ZcRqVx9V1VuGQsLKndGhja7SQ+X1slHl76fRq223sMOql7MFCd0vvvxVQ2V39CcFKao/LB1aPH3VhODDEyxwx6aXoTznvC/QPepgWsHOWQzKj9ftsgDbsNiyFlXL4cu8DWUty6rQy8zT2b4O8b1xjcwSUCsy+auEjBamzQkMJFNlZAIUrukL/NbUhQU37TAbwsFyz7X0E/u/VMle/nBCNAzgkMwAUjiHM6FqrKKBRWFbPrSIixjfjkCnrMEPw=
- file:
- - ThinkPHP_Core.zip
- - ThinkPHP_Full.zip
- skip_cleanup: true
- on:
- tags: true
diff --git a/code/app/.htaccess b/code/app/.htaccess
deleted file mode 100644
index 3418e55..0000000
--- a/code/app/.htaccess
+++ /dev/null
@@ -1 +0,0 @@
-deny from all
\ No newline at end of file
diff --git a/code/app/AppService.php b/code/app/AppService.php
deleted file mode 100644
index 96556e8..0000000
--- a/code/app/AppService.php
+++ /dev/null
@@ -1,22 +0,0 @@
-bind(AdminUserModel::class, function (Request $Request) {
- return AdminUserModel::getUserByToken($Request->header("admin-token"));
- });
- }
-
- /**
- * 执行服务
- *
- * @return mixed
- */
- public function boot()
- {
- //
- }
-}
diff --git a/code/app/admin/BaseController.php b/code/app/admin/BaseController.php
deleted file mode 100644
index 47ab2c6..0000000
--- a/code/app/admin/BaseController.php
+++ /dev/null
@@ -1,107 +0,0 @@
-app = $app;
- $this->request = $this->app->request;
-
- // 控制器初始化
- $this->initialize();
- }
-
- // 初始化
- protected function initialize()
- {
- }
-
- /**
- * 验证数据
- * @access protected
- * @param array $data 数据
- * @param string|array $validate 验证器名或者验证规则数组
- * @param array $message 提示信息
- * @param bool $batch 是否批量验证
- * @return array|string|true
- * @throws ValidateException
- */
- protected function validate(array $data, $validate, array $message = [], bool $batch = false)
- {
- if (is_array($validate)) {
- $v = new Validate();
- $v->rule($validate);
- } else {
- if (strpos($validate, '.')) {
- // 支持场景
- [$validate, $scene] = explode('.', $validate);
- }
- $class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
- $v = new $class();
- if (!empty($scene)) {
- $v->scene($scene);
- }
- }
-
- $v->message($message);
-
- // 是否批量验证
- if ($batch || $this->batchValidate) {
- $v->batch(true);
- }
-
- return $v->failException(true)->check($data);
- }
-
-
- public function success($arrData = [], $strMsg = "", $strCode = "1000")
- {
- return AdminResponse::create($strCode, $strMsg, $arrData);
- }
-
- public function error($strCode = "9999", $strMsg = "", $arrData = [])
- {
- return AdminResponse::create($strCode, $strMsg, $arrData);
- }
-}
diff --git a/code/app/admin/common.php b/code/app/admin/common.php
deleted file mode 100644
index 1243615..0000000
--- a/code/app/admin/common.php
+++ /dev/null
@@ -1,2 +0,0 @@
- '成功',
-
- '1001' => '用户不存在!',
- '1002' => '密码错误!',
- '1003' => '用户名不能为空!',
- '1004' => '密码不能为空!',
-
- #权限节点组
- '1011' => '权限节点路径不能为空!',
- '1012' => '权限节点名不能为空!',
- '1013' => '权限节点是否显示不能为空!',
- '1014' => '权限节点ID不能为空!',
- '1015' => '权限节点集合不能为空!',
- '1016' => '该部门下存在成员无法删除!',
- '1017' => '角色名不能为空!',
- '1018' => '角色ID不能为空!',
-
-
-
- #其他组
- '9900' => '参数错误!',
- '9901' => '获取PHP程序位置失败!',
- '9991' => '你没有这个权限!',
- '9992' => '远程密钥错误!',
- '9993' => '未查询到相关数据!',
- '9994' => '信息输入有误!',
- '9995' => '请先登录!',
- '9996' => '无效令牌!',
- '9997' => '地址错误!',
- '9998' => '请求对象未定义!',
- '9999' => '系统异常!',
-];
diff --git a/code/app/admin/config/router.php b/code/app/admin/config/router.php
deleted file mode 100644
index 385479e..0000000
--- a/code/app/admin/config/router.php
+++ /dev/null
@@ -1,66 +0,0 @@
-name("Guest@Login");
- Route::post("/logout", "Guest/Logout")->name("Guest@Logout");
-});
-
-
-# 系统配置
-Route::group("/system", function () {
- Route::get("/user/info", [AdminUser::class, "info"])->name("AdminUser@info");
- Route::get("/user/list", [AdminUser::class, "getAdminUserList"])->name("AdminUser@getAdminUserList");
- Route::post("/user/save", [AdminUser::class, "saveAdminUser"])->name("AdminUser@saveAdminUser");
- Route::post("/user/del", [AdminUser::class, "delAdminUser"])->name("AdminUser@delAdminUser");
-
- Route::get("/config/list", [SystemConfig::class, "getSystemConfigList"])->name("SystemConfig@getSystemConfigList");
- Route::post("/config/save", [SystemConfig::class, "saveSystemConfig"])->name("SystemConfig@saveSystemConfig");
-
- Route::get("/cjpz/list", [SystemConfig::class, "getCaiJiPeiZhiList"])->name("SystemConfig@getCaiJiPeiZhiList");
- Route::post("/cjpz/save", [SystemConfig::class, "saveCaiJiPeiZhi"])->name("SystemConfig@saveCaiJiPeiZhi");
-
- Route::get("/plan/list", [SystemConfig::class, "getPlanTaskList"])->name("SystemConfig@getPlanTaskList");
- Route::post("/plan/save", [SystemConfig::class, "savePlanTask"])->name("SystemConfig@savePlanTask");
- Route::post("/cache/flush", [SystemConfig::class, "flushCache"])->name("SystemConfig@flushCache");
-})->middleware(AdminAuth::class);
-
-# 小说
-Route::group("/novel", function () {
- Route::get("/list", [Novel::class, "getNovelList"])->name("Domain@getNovelList");
- Route::post("/level/set", [Novel::class, "updateNovelLevel"])->name("Novel@updateNovelLevel");
- Route::get("/category/list", [Novel::class, "getCategory"])->name("Domain@getCategory");
-})->middleware(AdminAuth::class);
-
-# 站点
-Route::group("/site", function () {
-
- # 域名管理
- Route::get("/domain/list", [Site::class, "getDomainList"])->name("Site@getDomainList");
- Route::post("/domain/upload", [Site::class, "uploadDomain"])->name("Site@uploadDomain");
- Route::post("/domain/save", [Site::class, "saveDomain"])->name("Site@saveDomain");
-
- # TKD 参数模板
- Route::get("/tkdarg/list", [Site::class, "getTKDArgList"])->name("Site@getTKDArgList");
-
- # 视图模板
- Route::get("/template/list", [Site::class, "getTemplateList"])->name("Site@getTKDArgList");
-
- # 替换模板管理
- Route::get("/subject/fomart/group/list", [Site::class, "getSubjectFomartGroupList"])->name("Site@getSubjectFomartGroupList");
- Route::post("/subject/fomart/group/save", [Site::class, "saveSubjectFomartGroup"])->name("Site@saveSubjectFomartGroup");
- Route::post("/subject/fomart/group/del", [Site::class, "delSubjectFomartGroup"])->name("Site@delSubjectFomartGroup");
-
- Route::get("/subject/fomart/list", [Site::class, "getSubjectFomartList"])->name("Site@getSubjectFomartList");
- Route::post("/subject/fomart/save", [Site::class, "saveSubjectFomart"])->name("Site@saveSubjectFomart");
- Route::post("/subject/fomart/del", [Site::class, "delSubjectFomart"])->name("Site@delSubjectFomart");
-})->middleware(AdminAuth::class);
diff --git a/code/app/admin/controller/AdminUser.php b/code/app/admin/controller/AdminUser.php
deleted file mode 100644
index b5d8fe1..0000000
--- a/code/app/admin/controller/AdminUser.php
+++ /dev/null
@@ -1,153 +0,0 @@
- $AdminUserModel,
- ];
-
- return $this->success($arrResult);
- }
-
- /**
- * 列表
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function getAdminUserList(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "page" => $Request->get('page', 1),
- "limit" => $Request->get('limit', 10),
- "key" => $Request->get('key'),
- ];
-
- $arrRule = [
- 'page' => 'require|number',
- 'limit' => 'require|number',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $AdminUserModel = AdminUserModel::alias('au');
-
- if (!empty($arrData['key'])) {
- $strKey = $arrData['key'];
- $AdminUserModel->where(function ($AdminUserModel) use ($strKey) {
- $AdminUserModel->whereOr([
- ['au.au_name', 'like', "%" . $strKey . "%"],
- ['au.au_id', 'like', "%" . $strKey . "%"],
- ]);
- });
- }
-
- $Paginate = $AdminUserModel->paginate([
- 'list_rows' => $arrData['limit'],
- 'page' => $arrData['page'],
- ]);
-
- $arrResult = [
- 'items' => $Paginate->items(),
- 'total' => $Paginate->total(),
- 'current_page' => $Paginate->currentPage(),
- 'total_pages' => $Paginate->lastPage(),
- ];
-
- return $this->success($arrResult);
- }
-
- /**
- * 设置管理员
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function saveAdminUser(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "au_id" => $Request->post('au_id'),
- "au_status" => $Request->post('au_status'),
- "au_name" => $Request->post('au_name'),
- "au_pwd" => $Request->post('au_pwd'),
- ];
-
- $arrRule = [
- // 'au_id' => 'require',
- 'au_status' => 'require',
- 'au_name' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- if ($arrData['au_id'] == NULL) {
- $AdminUserModel = new AdminUserModel;
- } else {
- $AdminUserModel = AdminUserModel::where('au_id', $arrData['au_id'])->find();
-
- if (empty($AdminUserModel)) {
- return $this->error('9993');
- }
- }
-
- if (isset($arrData['au_pwd']) && !empty($arrData['au_pwd'])) {
- $arrData['au_pwd'] = md5($arrData['au_pwd']);
- } else {
- unset($arrData['au_pwd']);
- }
-
- $AdminUserModel->fill($arrData);
-
- $AdminUserModel->save();
- return $this->success();
- }
-
- /**
- * 删除管理员
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function delAdminUser(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "au_id" => $Request->post('au_id'),
- ];
-
- $arrRule = [
- 'au_id' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $arrData['au_id'] = explode(',', $arrData['au_id']);
-
- AdminUserModel::whereIn('au_id', $arrData['au_id'])->delete();
-
-
- return $this->success();
- }
-}
diff --git a/code/app/admin/controller/GuangGao.php b/code/app/admin/controller/GuangGao.php
deleted file mode 100644
index a2922ed..0000000
--- a/code/app/admin/controller/GuangGao.php
+++ /dev/null
@@ -1,359 +0,0 @@
- $Request->get('page', 1),
- "limit" => $Request->get('limit', 10),
- "key" => $Request->get('key'),
- ];
-
- $arrRule = [
- 'page' => 'require|number',
- 'limit' => 'require|number',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $GuangGaoFenZuModel = GuangGaoFenZuModel::alias('ggfz');
-
- if (!empty($arrData['key'])) {
- $strKey = $arrData['key'];
- $GuangGaoFenZuModel->where(function ($GuangGaoFenZuModel) use ($strKey) {
- $GuangGaoFenZuModel->whereOr([
- ['ggfz.ggfz_name', 'like', "%" . $strKey . "%"],
- ['ggfz.ggfz_id', 'like', "%" . $strKey . "%"],
- ]);
- });
- }
-
- $Paginate = $GuangGaoFenZuModel->paginate([
- 'list_rows' => $arrData['limit'],
- 'page' => $arrData['page'],
- ]);
-
- $arrResult = [
- 'items' => $Paginate->items(),
- 'total' => $Paginate->total(),
- 'current_page' => $Paginate->currentPage(),
- 'total_pages' => $Paginate->lastPage(),
- ];
-
- return $this->success($arrResult);
- }
-
- /**
- * 设置广告分组
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function saveGuangGaoFenZu(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "ggfz_id" => $Request->post('ggfz_id'),
- "ggfz_code" => $Request->post('ggfz_code'),
- "ggfz_name" => $Request->post('ggfz_name'),
- ];
-
- $arrRule = [
- // 'ggfz_id' => 'require',
- 'ggfz_code' => 'require',
- 'ggfz_name' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- if ($arrData['ggfz_id'] == NULL) {
- $GuangGaoFenZuModel = new GuangGaoFenZuModel;
- } else {
- $GuangGaoFenZuModel = GuangGaoFenZuModel::where('ggfz_id', $arrData['ggfz_id'])->find();
-
- if (empty($GuangGaoFenZuModel)) {
- return $this->error('9993');
- }
- }
-
- $GuangGaoFenZuModel->fill($arrData);
-
- $GuangGaoFenZuModel->save();
- GuangGaoModel::flushCache();
- return $this->success();
- }
-
- /**
- * 删除广告分组
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function delGuangGaoFenZu(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "ggfz_id" => $Request->post('ggfz_id'),
- ];
-
- $arrRule = [
- 'ggfz_id' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $arrData['ggfz_id'] = explode(',', $arrData['ggfz_id']);
-
- GuangGaoFenZuModel::whereIn('ggfz_id', $arrData['ggfz_id'])->delete();
-
- GuangGaoModel::whereIn('ggfz_id', $arrData['ggfz_id'])->delete();
- GuangGaoModel::flushCache();
- return $this->success();
- }
-
-
- /**
- * 列表
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function getGuangGaoList(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "page" => $Request->get('page', 1),
- "limit" => $Request->get('limit', 10),
- "key" => $Request->get('key'),
- "ggfz_id" => $Request->get('ggfz_id'),
- ];
-
- $arrRule = [
- 'page' => 'require|number',
- 'limit' => 'require|number',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $GuangGaoModel = GuangGaoModel::alias('gg')
- ->leftJoin('guang_gao_fen_zu ggfz', 'ggfz.ggfz_id = gg.ggfz_id')
- ->field(['gg.*', 'ggfz.ggfz_name'])
- ->order('ggfz.ggfz_id','desc')
- ->order('gg.gg_sort','desc');
-
- if ($arrData['ggfz_id'] !== NULL) {
- $GuangGaoModel = $GuangGaoModel->where('gg.ggfz_id', $arrData['ggfz_id']);
- }
-
-
- if (!empty($arrData['key'])) {
- $strKey = $arrData['key'];
- $GuangGaoModel->where(function ($GuangGaoModel) use ($strKey) {
- $GuangGaoModel = $GuangGaoModel->whereOr([
- ['gg.gg_wen_zi', 'like', "%" . $strKey . "%"],
- ['gg.gg_id', 'like', "%" . $strKey . "%"],
- ['ggfz.ggfz_name', 'like', "%" . $strKey . "%"],
- ]);
- });
- }
-
- $Paginate = $GuangGaoModel->paginate([
- 'list_rows' => $arrData['limit'],
- 'page' => $arrData['page'],
- ]);
-
- $arrResult = [
- 'items' => $Paginate->items(),
- 'total' => $Paginate->total(),
- 'current_page' => $Paginate->currentPage(),
- 'total_pages' => $Paginate->lastPage(),
- ];
-
- return $this->success($arrResult);
- }
-
-
- /**
- * 设置广告
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function saveGuangGao(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "gg_id" => $Request->post('gg_id'),
- "ggfz_id" => $Request->post('ggfz_id'),
- "gg_lei_xing" => $Request->post('gg_lei_xing'),
- "gg_tu_pian" => $Request->post('gg_tu_pian'),
- "gg_wen_zi" => $Request->post('gg_wen_zi'),
- "gg_tiao_zhuan_di_zhi" => $Request->post('gg_tiao_zhuan_di_zhi'),
- "gg_sort" => $Request->post('gg_sort'),
- "gg_status" => $Request->post('gg_status'),
- ];
-
- $arrRule = [
- // 'gg_id' => 'require',
- 'ggfz_id' => 'require',
- 'gg_lei_xing' => 'require',
- 'gg_status' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- if ($arrData['gg_id'] == NULL) {
- $GuangGaoModel = new GuangGaoModel;
- } else {
- $GuangGaoModel = GuangGaoModel::where('gg_id', $arrData['gg_id'])->find();
-
- if (empty($GuangGaoModel)) {
- return $this->error('9993');
- }
- }
-
- $GuangGaoModel->fill($arrData);
-
- $GuangGaoModel->save();
- GuangGaoModel::flushCache();
- return $this->success();
- }
-
- /**
- * 删除广告
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function delGuangGao(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "gg_id" => $Request->post('gg_id'),
- ];
-
- $arrRule = [
- 'gg_id' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $arrData['gg_id'] = explode(',', $arrData['gg_id']);
-
- GuangGaoModel::whereIn('gg_id', $arrData['gg_id'])->delete();
-
- GuangGaoModel::flushCache();
- return $this->success();
- }
-
-
-
- /**
- * 广告配置列表
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function getGuangGaoPeiZhiList(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "page" => $Request->get('page', 1),
- "limit" => $Request->get('limit', 10),
- "key" => $Request->get('key'),
- ];
-
- $arrRule = [
- 'page' => 'require|number',
- 'limit' => 'require|number',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $GuangGaoPeiZhiModel = GuangGaoPeiZhiModel::alias('ggpz');
-
- if (!empty($arrData['key'])) {
- $strKey = $arrData['key'];
- $GuangGaoPeiZhiModel->where(function ($GuangGaoPeiZhiModel) use ($strKey) {
- $GuangGaoPeiZhiModel->whereOr([
- ['ggpz.ggpz_code', 'like', "%" . $strKey . "%"],
- ['ggpz.ggpz_id', 'like', "%" . $strKey . "%"],
- ]);
- });
- }
-
- $Paginate = $GuangGaoPeiZhiModel->paginate([
- 'list_rows' => $arrData['limit'],
- 'page' => $arrData['page'],
- ]);
-
- $arrResult = [
- 'items' => $Paginate->items(),
- 'total' => $Paginate->total(),
- 'current_page' => $Paginate->currentPage(),
- 'total_pages' => $Paginate->lastPage(),
- ];
-
- return $this->success($arrResult);
- }
-
- /**
- * 设置广告配置
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function saveGuangGaoPeiZhi(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "ggpz_id" => $Request->post('ggpz_id'),
- "ggpz_val" => $Request->post('ggpz_val'),
- ];
-
- $arrRule = [
- 'ggpz_id' => 'require',
- 'ggpz_val' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $GuangGaoPeiZhiModel = GuangGaoPeiZhiModel::where('ggpz_id', $arrData['ggpz_id'])->find();
-
- if (empty($GuangGaoPeiZhiModel)) {
- return $this->error('9993');
- }
-
- $GuangGaoPeiZhiModel->fill($arrData);
-
- $GuangGaoPeiZhiModel->save();
-
- GuangGaoPeiZhiModel::flushCache();
-
- return $this->success();
- }
-}
diff --git a/code/app/admin/controller/Guest.php b/code/app/admin/controller/Guest.php
deleted file mode 100644
index d59023e..0000000
--- a/code/app/admin/controller/Guest.php
+++ /dev/null
@@ -1,70 +0,0 @@
- $Request->post('au_name'),
- "au_pwd" => $Request->post('au_pwd'),
- ];
-
- $arrRule = [
- 'au_name' => 'require|max:25',
- 'au_pwd' => 'require|min:6',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $arrData['au_pwd'] = md5(trim($arrData['au_pwd']));
-
- $AdminUserModel = AdminUserModel::where('au_name', $arrData['au_name'])
- ->where('au_pwd', $arrData['au_pwd'])
- ->where('au_status', 0)
- ->find();
-
- if (empty($AdminUserModel)) {
- return $this->error("1002");
- }
-
- $arrResult = [
- 'admin-token' => $AdminUserModel->createToken(),
- ];
-
- return $this->success($arrResult);
- }
-
- /**
- * 退出
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function Logout(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $strToken = $Request->header("admin-token");
-
- if ($strToken) {
- Cache::delete($strToken);
- }
- }
-}
diff --git a/code/app/admin/controller/Index.php b/code/app/admin/controller/Index.php
deleted file mode 100644
index 677cfdd..0000000
--- a/code/app/admin/controller/Index.php
+++ /dev/null
@@ -1,12 +0,0 @@
- $Request->post('keywords'),
- "n_level" => (int)$Request->post('n_level'),
- ];
-
- $arrRule = [
- 'keywords' => 'require',
- 'n_level' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $arrKeywords = explode(',', $arrData['keywords']);
- $NovelModel = NovelModel::getInstance();
- $NovelModel->updateByKeywords($arrKeywords, $arrData['n_level']);
- return $this->success();
- }
-
- /**
- * 小说分页
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function getNovelList(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $intPage = $Request->param('page', 1, 'intval');
- $intLimit = $Request->param('limit', 10, 'intval');
-
- try {
-
- $NovelModel = NovelModel::getInstance();
-
- $Col = $NovelModel->getCol();
-
- // 查询条件(可选)
- $arrFilter = [];
- // 示例:如果需要筛选,例如 status=1
- // $arrFilter['status'] = 1;
-
- $arrOptions = [
- 'sort' => ['_id' => -1],
- 'skip' => ($intPage - 1) * $intLimit,
- 'limit' => $intLimit,
- ];
-
- $Cursor = $Col->find($arrFilter, $arrOptions);
- $arrData = iterator_to_array($Cursor);
-
- $intTotal = $Col->countDocuments($arrFilter);
-
- $arrResult = [
- 'data' => $arrData,
- 'total' => $intTotal,
- 'page' => $intPage,
- 'limit' => $intLimit,
- 'pages' => ceil($intTotal / $intLimit)
- ];
- return $this->success($arrResult);
- } catch (\Exception $e) {
- return $this->error("9999", $e->getMessage());
- }
- }
-
- /**
- * get category data
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return void
- */
- public function getCategory(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrResult = [
- 'all' => CategoryModel::getCategory(),
- 'man' => CategoryModel::getManCategory(),
- 'women' => CategoryModel::getWomenCategory(),
- ];
- return $this->success($arrResult);
- }
-}
diff --git a/code/app/admin/controller/Site.php b/code/app/admin/controller/Site.php
deleted file mode 100644
index 922eab8..0000000
--- a/code/app/admin/controller/Site.php
+++ /dev/null
@@ -1,481 +0,0 @@
-success(ConverterMovel::$arrDescription);
- }
-
-
- /**
- * upload site domain info file
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function uploadDomain(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $File = $Request->file('excel_file');
- if (!$File) {
- return $this->error("9999", '请上传 Excel 文件');
- }
-
- try {
- $arrAllowedExt = ['xls', 'xlsx'];
- $strExt = $File->getOriginalExtension();
- if (!in_array($strExt, $arrAllowedExt)) {
- return $this->error("9999", '仅支持 xls 或 xlsx 文件');
- }
-
- $FilePath = $File->getPathname();
-
- $Spreadsheet = IOFactory::load($FilePath);
- $Sheet = $Spreadsheet->getActiveSheet();
- $arrData = $Sheet->toArray();
-
- array_shift($arrData);
-
- foreach ($arrData as $arrRows) {
- $arrDomain = [
- 'd_domain' => $arrRows[0],
- 't_id' => $arrRows[1],
- 'd_name' => $arrRows[2],
- 'd_keywords' => $arrRows[3],
- 'd_index_title' => $arrRows[4],
- 'd_index_keywords' => $arrRows[5],
- 'd_index_description' => $arrRows[6],
- 'd_description' => $arrRows[7],
- 'd_statis' => $arrRows[8],
- 'd_logo_type' => (int)$arrRows[9],
- 'd_text_logo' => $arrRows[10],
- 'd_img_logo' => $arrRows[11],
- 'd_content_encode' => $arrRows[12],
- ];
-
- $TCfgTemplate = TemplatesModel::where('t_id', $arrDomain['t_id'])->find()->t_cfg_template;
-
- $arrDomain['t_cfg'] = json_encode($TCfgTemplate, JSON_UNESCAPED_UNICODE);
-
- /** @var DomainModel **/
- $DomainModel = DomainModel::where('d_domain', $arrDomain['d_domain'])->findOrEmpty();
-
- $DomainModel->fill($arrDomain);
- $DomainModel->save();
-
- DomainModel::flushAllDomianOnCache();
- }
-
-
- return $this->success();
- } catch (\Exception $e) {
- return $this->error("9999", '导入失败: ' . $e->getMessage());
- }
- }
-
- /**
- * 列表
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function getDomainList(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "page" => $Request->get('page', 1),
- "limit" => $Request->get('limit', 10),
- "key" => $Request->get('key'),
- ];
-
- $arrRule = [
- 'page' => 'require|number',
- 'limit' => 'require|number',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $DomainModel = DomainModel::alias('d');
-
- if (!empty($arrData['key'])) {
- $strKey = $arrData['key'];
- $DomainModel->where(function ($DomainModel) use ($strKey) {
- $DomainModel->whereOr([
- ['d.d_domain', 'like', "%" . $strKey . "%"],
- ['d.d_id', 'like', "%" . $strKey . "%"],
- ]);
- });
- }
-
- $Paginate = $DomainModel->paginate([
- 'list_rows' => $arrData['limit'],
- 'page' => $arrData['page'],
- ]);
-
- $arrResult = [
- 'items' => $Paginate->items(),
- 'total' => $Paginate->total(),
- 'current_page' => $Paginate->currentPage(),
- 'total_pages' => $Paginate->lastPage(),
- ];
-
- return $this->success($arrResult);
- }
-
-
- /**
- * 添加|修改 域名
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function saveDomain(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "d_id" => $Request->post('d_id'),
- "d_domain" => $Request->post('d_domain'),
- "t_id" => $Request->post('t_id'),
- "d_name" => $Request->post('d_name'),
- "d_keywords" => $Request->post('d_keywords'),
- "d_description" => $Request->post('d_description'),
- "d_index_title" => $Request->post('d_index_title'),
- "d_index_keywords" => $Request->post('d_index_keywords'),
- "d_index_description" => $Request->post('d_index_description'),
- "d_statis" => $Request->post('d_statis'),
- "d_logo_type" => $Request->post('d_logo_type'),
- "d_text_logo" => $Request->post('d_text_logo'),
- "d_img_log" => $Request->post('d_img_log'),
- "d_content_encode" => $Request->post('d_content_encode'),
- "t_cfg" => $Request->post('t_cfg'),
- ];
-
- $arrRule = [
- // 'd_id' => 'require|number',
- 'd_domain' => 'require',
- 'd_logo_type' => 'require|number',
- 'd_content_encode' => 'require|number',
- 't_cfg' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- if ($arrData['d_id']) {
- /** @var DomainModel **/
- $DomainModel = DomainModel::where('d_id', $arrData['d_id'])->findOrEmpty();
- } else {
- $DomainModel = new DomainModel;
- }
-
- $DomainModel->fill($arrData);
-
- $DomainModel->save();
- DomainModel::flushAllDomianOnCache();
-
- return $this->success();
- }
-
- /**
- * 列表
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function getTemplateList(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "page" => $Request->get('page', 1),
- "limit" => $Request->get('limit', 10),
- "key" => $Request->get('key'),
- ];
-
- $arrRule = [
- 'page' => 'require|number',
- 'limit' => 'require|number',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $TemplatesModel = TemplatesModel::alias('t');
-
- if (!empty($arrData['key'])) {
- $strKey = $arrData['key'];
- $TemplatesModel->where(function ($TemplatesModel) use ($strKey) {
- $TemplatesModel->whereOr([
- ['t.t_code', 'like', "%" . $strKey . "%"],
- ]);
- });
- }
-
- $Paginate = $TemplatesModel->paginate([
- 'list_rows' => $arrData['limit'],
- 'page' => $arrData['page'],
- ]);
-
- $arrResult = [
- 'items' => $Paginate->items(),
- 'total' => $Paginate->total(),
- 'current_page' => $Paginate->currentPage(),
- 'total_pages' => $Paginate->lastPage(),
- ];
-
- return $this->success($arrResult);
- }
-
- /**
- * 替换模板分组列表
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function getSubjectFomartGroupList(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "page" => $Request->get('page', 1),
- "limit" => $Request->get('limit', 10),
- "key" => $Request->get('key'),
- ];
-
- $arrRule = [
- 'page' => 'require|number',
- 'limit' => 'require|number',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $SubjectFomartGroupModel = SubjectFomartGroupModel::alias('sfg');
-
- if (!empty($arrData['key'])) {
- $strKey = $arrData['key'];
- $SubjectFomartGroupModel->where(function ($SubjectFomartGroupModel) use ($strKey) {
- $SubjectFomartGroupModel->whereOr([
- ['sfg.sfg_name', 'like', "%" . $strKey . "%"],
- ['sfg.sfg_description', 'like', "%" . $strKey . "%"],
- ]);
- });
- }
-
- $Paginate = $SubjectFomartGroupModel->paginate([
- 'list_rows' => $arrData['limit'],
- 'page' => $arrData['page'],
- ]);
-
- $arrResult = [
- 'items' => $Paginate->items(),
- 'total' => $Paginate->total(),
- 'current_page' => $Paginate->currentPage(),
- 'total_pages' => $Paginate->lastPage(),
- ];
-
- return $this->success($arrResult);
- }
-
- /**
- * 添加|修改 替换模板分组
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function saveSubjectFomartGroup(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "sfg_id" => $Request->post('sfg_id'),
- "sfg_name" => $Request->post('sfg_name'),
- "sfg_description" => $Request->post('sfg_description'),
-
- ];
-
- $arrRule = [
- // 'sfg_id' => 'require|number',
- 'sfg_name' => 'require',
- 'sfg_description' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- if ($arrData['sfg_id']) {
- $SubjectFomartGroupModel = SubjectFomartGroupModel::where('sfg_id', $arrData['sfg_id'])->findOrEmpty();
- } else {
- $SubjectFomartGroupModel = new SubjectFomartGroupModel;
- }
-
- $SubjectFomartGroupModel->fill($arrData);
-
- $SubjectFomartGroupModel->save();
- return $this->success();
- }
-
- /**
- * 添加|修改 替换模板分组
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function delSubjectFomartGroup(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "sfg_id" => $Request->post('sfg_id'),
-
- ];
-
- $arrRule = [
- 'sfg_id' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $arrSfgId = explode(',', $arrData['sfg_id']);
-
- SubjectFomartGroupModel::whereIn('sfg_id', $arrSfgId)->delete();
-
- SubjectFomartModel::whereIn('sfg_id', $arrSfgId)->delete();
-
- return $this->success();
- }
-
-
-
-
- /**
- * 替换模板分组列表
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function getSubjectFomartList(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "page" => $Request->get('page', 1),
- "limit" => $Request->get('limit', 10),
- "key" => $Request->get('key'),
- "sfg_id" => $Request->get('sfg_id'),
- ];
-
- $arrRule = [
- 'page' => 'require|number',
- 'limit' => 'require|number',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $SubjectFomartModel = SubjectFomartModel::alias('sf');
-
- if (!empty($arrData['key'])) {
- $strKey = $arrData['key'];
- $SubjectFomartModel->where(function ($SubjectFomartModel) use ($strKey) {
- $SubjectFomartModel->whereOr([
- ['sf.sf_val', 'like', "%" . $strKey . "%"],
- ]);
- });
- }
- if (!empty($arrData['sfg_id'])) {
- $SubjectFomartModel->where('sf.sfg_id', $arrData['sfg_id']);
- }
-
- $Paginate = $SubjectFomartModel->paginate([
- 'list_rows' => $arrData['limit'],
- 'page' => $arrData['page'],
- ]);
-
- $arrResult = [
- 'items' => $Paginate->items(),
- 'total' => $Paginate->total(),
- 'current_page' => $Paginate->currentPage(),
- 'total_pages' => $Paginate->lastPage(),
- ];
-
- return $this->success($arrResult);
- }
-
- /**
- * 添加|修改 替换模板分组
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function saveSubjectFomart(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "sf_id" => $Request->post('sf_id'),
- "sfg_id" => $Request->post('sfg_id'),
- "sf_val" => $Request->post('sf_val'),
-
- ];
-
- $arrRule = [
- // 'sf_id' => 'require|number',
- 'sfg_id' => 'require|number',
- 'sf_val' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- if ($arrData['sf_id']) {
- $SubjectFomartModel = SubjectFomartModel::where('sf_id', $arrData['sf_id'])->findOrEmpty();
- } else {
- $SubjectFomartModel = new SubjectFomartModel;
- }
-
- $SubjectFomartModel->fill($arrData);
-
- $SubjectFomartModel->save();
- return $this->success();
- }
-
- /**
- * 添加|修改 替换模板分组
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function delSubjectFomart(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "sf_id" => $Request->post('sf_id'),
-
- ];
-
- $arrRule = [
- 'sf_id' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $arrSfId = explode(',', $arrData['sf_id']);
- SubjectFomartModel::whereIn('sf_id', $arrSfId)->delete();
-
- return $this->success();
- }
-}
diff --git a/code/app/admin/controller/SystemConfig.php b/code/app/admin/controller/SystemConfig.php
deleted file mode 100644
index 01e9234..0000000
--- a/code/app/admin/controller/SystemConfig.php
+++ /dev/null
@@ -1,391 +0,0 @@
- $Request->get('page', 1),
- "limit" => $Request->get('limit', 10),
- "key" => $Request->get('key'),
- ];
-
- $arrRule = [
- 'page' => 'require|number',
- 'limit' => 'require|number',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $CaiJiPeiZhiModel = CaiJiPeiZhiModel::alias('cjpz');
-
- if (!empty($arrData['key'])) {
- $strKey = $arrData['key'];
- $CaiJiPeiZhiModel->where(function ($CaiJiPeiZhiModel) use ($strKey) {
- $CaiJiPeiZhiModel->whereOr([
- ['cjpz.cjpz_code', 'like', "%" . $strKey . "%"],
- ['cjpz.cjpz_id', 'like', "%" . $strKey . "%"],
- ]);
- });
- }
-
- $Paginate = $CaiJiPeiZhiModel->paginate([
- 'list_rows' => $arrData['limit'],
- 'page' => $arrData['page'],
- ]);
-
- $arrResult = [
- 'items' => $Paginate->items(),
- 'total' => $Paginate->total(),
- 'current_page' => $Paginate->currentPage(),
- 'total_pages' => $Paginate->lastPage(),
- ];
-
- return $this->success($arrResult);
- }
-
- /**
- * 设置采集配置
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function saveCaiJiPeiZhi(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "cjpz_id" => $Request->post('cjpz_id'),
- "cjpz_val" => $Request->post('cjpz_val'),
- ];
-
- $arrRule = [
- 'cjpz_id' => 'require',
- 'cjpz_val' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $CaiJiPeiZhiModel = CaiJiPeiZhiModel::where('cjpz_id', $arrData['cjpz_id'])->find();
-
- if (empty($CaiJiPeiZhiModel)) {
- return $this->error('9993');
- }
-
- $CaiJiPeiZhiModel->fill($arrData);
-
- $CaiJiPeiZhiModel->save();
-
- CaiJiPeiZhiModel::flushCache();
-
- return $this->success();
- }
-
-
-
- /**
- * 系统配置列表
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function getSystemConfigList(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "page" => $Request->get('page', 1),
- "limit" => $Request->get('limit', 10),
- "key" => $Request->get('key'),
- ];
-
- $arrRule = [
- 'page' => 'require|number',
- 'limit' => 'require|number',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $SystemConfigModel = SystemConfigModel::alias('sc');
-
- if (!empty($arrData['key'])) {
- $strKey = $arrData['key'];
- $SystemConfigModel->where(function ($SystemConfigModel) use ($strKey) {
- $SystemConfigModel->whereOr([
- ['sc.sc_code', 'like', "%" . $strKey . "%"],
- ['sc.sc_id', 'like', "%" . $strKey . "%"],
- ]);
- });
- }
-
- $Paginate = $SystemConfigModel->paginate([
- 'list_rows' => $arrData['limit'],
- 'page' => $arrData['page'],
- ]);
-
- $arrResult = [
- 'items' => $Paginate->items(),
- 'total' => $Paginate->total(),
- 'current_page' => $Paginate->currentPage(),
- 'total_pages' => $Paginate->lastPage(),
- ];
-
- return $this->success($arrResult);
- }
-
- /**
- * 设置系统配置
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function saveSystemConfig(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "sc_id" => $Request->post('sc_id'),
- "sc_val" => $Request->post('sc_val'),
- ];
-
- $arrRule = [
- 'sc_id' => 'require',
- 'sc_val' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $SystemConfigModel = SystemConfigModel::where('sc_id', $arrData['sc_id'])->find();
-
- if (empty($SystemConfigModel)) {
- return $this->error('9993');
- }
-
- $SystemConfigModel->fill($arrData);
-
- $SystemConfigModel->save();
-
- SystemConfigModel::flushCache();
-
- return $this->success();
- }
-
-
- /**
- * 资源端点列表
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function getZiYuanDuanDianList(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "page" => $Request->get('page', 1),
- "limit" => $Request->get('limit', 10),
- "key" => $Request->get('key'),
- ];
-
- $arrRule = [
- 'page' => 'require|number',
- 'limit' => 'require|number',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $ZiYuanDuanDianModel = ZiYuanDuanDianModel::alias('zydd');
-
- if (!empty($arrData['key'])) {
- $strKey = $arrData['key'];
- $ZiYuanDuanDianModel->where(function ($ZiYuanDuanDianModel) use ($strKey) {
- $ZiYuanDuanDianModel->whereOr([
- ['zydd.zydd_ming_zi', 'like', "%" . $strKey . "%"],
- ['zydd.zydd_id', 'like', "%" . $strKey . "%"],
- ]);
- });
- }
-
- $Paginate = $ZiYuanDuanDianModel->paginate([
- 'list_rows' => $arrData['limit'],
- 'page' => $arrData['page'],
- ]);
-
- $arrResult = [
- 'items' => $Paginate->items(),
- 'total' => $Paginate->total(),
- 'current_page' => $Paginate->currentPage(),
- 'total_pages' => $Paginate->lastPage(),
- ];
-
- return $this->success($arrResult);
- }
-
- /**
- * 设置资源端点
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function saveZiYuanDuanDian(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "zydd_id" => $Request->post('zydd_id'),
- "zydd_domain" => $Request->post('zydd_domain'),
- ];
-
- $arrRule = [
- 'zydd_id' => 'require',
- 'zydd_domain' => 'require',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $ZiYuanDuanDianModel = ZiYuanDuanDianModel::where('zydd_id', $arrData['zydd_id'])->find();
-
- if (empty($ZiYuanDuanDianModel)) {
- return $this->error('9993');
- }
-
- $ZiYuanDuanDianModel->fill($arrData);
-
- $ZiYuanDuanDianModel->save();
-
- ZiYuanDuanDianModel::flushCache();
-
- return $this->success();
- }
-
-
- /**
- * 计划任务列表
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function getPlanTaskList(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "page" => $Request->get('page', 1),
- "limit" => $Request->get('limit', 10),
- "key" => $Request->get('key'),
- ];
-
- $arrRule = [
- 'page' => 'require|number',
- 'limit' => 'require|number',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $PlanTaskModel = PlanTaskModel::alias('pt');
-
- if (!empty($arrData['key'])) {
- $strKey = $arrData['key'];
- $PlanTaskModel->where(function ($PlanTaskModel) use ($strKey) {
- $PlanTaskModel->whereOr([
- ['pt.pt_name', 'like', "%" . $strKey . "%"],
- ['pt.pt_id', 'like', "%" . $strKey . "%"],
- ]);
- });
- }
-
- $Paginate = $PlanTaskModel->paginate([
- 'list_rows' => $arrData['limit'],
- 'page' => $arrData['page'],
- ]);
-
- $arrResult = [
- 'items' => $Paginate->items(),
- 'total' => $Paginate->total(),
- 'current_page' => $Paginate->currentPage(),
- 'total_pages' => $Paginate->lastPage(),
- ];
-
- return $this->success($arrResult);
- }
-
- /**
- * 设置计划任务
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function savePlanTask(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- $arrData = [
- "pt_id" => $Request->post('pt_id'),
- "pt_enable" => $Request->post('pt_enable'),
- "pt_limit" => $Request->post('pt_limit'),
- ];
-
- $arrRule = [
- 'pt_id' => 'require|number',
- 'pt_enable' => 'require|number',
- 'pt_limit' => 'require|number',
- ];
-
- $this->validate($arrData, $arrRule);
-
- $PlanTaskModel = PlanTaskModel::where('pt_id', $arrData['pt_id'])->find();
-
- if (empty($PlanTaskModel)) {
- return $this->error('9993');
- }
-
- $PlanTaskModel->fill($arrData);
-
- $PlanTaskModel->save();
-
- return $this->success();
- }
-
-
- /**
- * 清理系统缓存
- *
- * @param Request $Request
- * @param AdminUserModel|null $AdminUserModel
- * @return Response
- */
- public function flushCache(Request $Request, ?AdminUserModel $AdminUserModel)
- {
- DomainModel::flushAllDomianOnCache();
-
- SubjectFomartModel::flushAllSubjectFomartOnCache();
-
- SystemConfigModel::flushCache();
-
- TemplatesModel::flushAllTemplateOnCache();
-
- return $this->success();
- }
-}
diff --git a/code/app/admin/event.php b/code/app/admin/event.php
deleted file mode 100644
index 4eff890..0000000
--- a/code/app/admin/event.php
+++ /dev/null
@@ -1,5 +0,0 @@
-checkRole() == false) {
- return AdminResponse::create("9991");
- }
-
- return $Next($Request);
- } catch (\Throwable $T) {
- return AdminResponse::createByErr($T);
- }
- }
-}
diff --git a/code/app/admin/middleware/AdminCors.php b/code/app/admin/middleware/AdminCors.php
deleted file mode 100644
index 4ee0ecf..0000000
--- a/code/app/admin/middleware/AdminCors.php
+++ /dev/null
@@ -1,22 +0,0 @@
- 'true',
- 'Access-Control-Max-Age' => 3600,
- 'Access-Control-Allow-Methods' => '*',
- 'Access-Control-Allow-Headers' => '*',
- ];
-}
diff --git a/code/app/admin/middleware/AdminException.php b/code/app/admin/middleware/AdminException.php
deleted file mode 100644
index ecde2c5..0000000
--- a/code/app/admin/middleware/AdminException.php
+++ /dev/null
@@ -1,17 +0,0 @@
- $strCode,
- 'msg' => $strMsg,
- 'data' => $arrData,
- ];
-
- return json($arrData, 200, [], [JSON_UNESCAPED_UNICODE]);
- }
-
- static $arrExceptionMap = [
- ValidateException::class => "9900",
- ];
-
- static public function createByErr(\Throwable $T)
- {
- $strCode = $T->getCode();
-
- if ($T instanceof ValidateException) {
- $strCode = "9900";
- }
-
- foreach (self::$arrExceptionMap as $ExceptionClass => $strExceptonCode) {
- if ($T instanceof $ExceptionClass) {
- $strCode = $strExceptonCode;
- break;
- }
- }
-
- return self::create($strCode, $T->getMessage());
- }
-}
diff --git a/code/app/admin/provider.php b/code/app/admin/provider.php
deleted file mode 100644
index 916884b..0000000
--- a/code/app/admin/provider.php
+++ /dev/null
@@ -1,12 +0,0 @@
- Request::class,
- 'think\exception\Handle' => AdminException::class,
-];
diff --git a/code/app/api/BaseController.php b/code/app/api/BaseController.php
deleted file mode 100644
index 2e106a8..0000000
--- a/code/app/api/BaseController.php
+++ /dev/null
@@ -1,98 +0,0 @@
-app = $app;
- $this->request = $this->app->request;
-
- // 控制器初始化
- $this->initialize();
-
- // View::assign('')
- }
-
- // 初始化
- protected function initialize() {}
-
- /**
- * 验证数据
- * @access protected
- * @param array $data 数据
- * @param string|array $validate 验证器名或者验证规则数组
- * @param array $message 提示信息
- * @param bool $batch 是否批量验证
- * @return array|string|true
- * @throws ValidateException
- */
- protected function validate(array $data, string|array $validate, array $message = [], bool $batch = false)
- {
- if (is_array($validate)) {
- $v = new Validate();
- $v->rule($validate);
- } else {
- if (strpos($validate, '.')) {
- // 支持场景
- [$validate, $scene] = explode('.', $validate);
- }
- $class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
- $v = new $class();
- if (!empty($scene)) {
- $v->scene($scene);
- }
- }
-
- $v->message($message);
-
- // 是否批量验证
- if ($batch || $this->batchValidate) {
- $v->batch(true);
- }
-
- return $v->failException(true)->check($data);
- }
-}
diff --git a/code/app/api/common.php b/code/app/api/common.php
deleted file mode 100644
index 1243615..0000000
--- a/code/app/api/common.php
+++ /dev/null
@@ -1,2 +0,0 @@
-middleware(\think\middleware\Throttle::class, [
- // 'visit_rate' => '1/m',
- // 'key' => '__CONTROLLER__/__ACTION__/__IP__',
- // ])
- ->name('Statis@publish');
-
-
-Route::get("/search", [Novel::class, 'search'])
- // ->middleware(\think\middleware\Throttle::class, [
- // 'visit_rate' => '1/m',
- // 'key' => '__CONTROLLER__/__ACTION__/__IP__',
- // ])
- ->name('Novel@search');;
-
-
-
-
-Route::get("/test", [Statis::class, 'test'])
- // ->middleware(\think\middleware\Throttle::class, [
- // 'visit_rate' => '1/m',
- // 'key' => '__CONTROLLER__/__ACTION__/__IP__',
- // ])
- ->name('Statis@test');
diff --git a/code/app/api/config/throttle.php b/code/app/api/config/throttle.php
deleted file mode 100644
index ce79257..0000000
--- a/code/app/api/config/throttle.php
+++ /dev/null
@@ -1,12 +0,0 @@
- 'api:throttle_',
- 'visit_method' => ["GET", "POST", "PUT", "DELETE", "HEAD"],
- 'visit_fail_response' => function (Throttle $throttle, $request, $wait_seconds) {
- return Response::create('抱歉,请求过于频繁, 请 ' . $wait_seconds . ' 秒后重新操作 。')->code(429);
- },
-];
diff --git a/code/app/api/controller/Statis.php b/code/app/api/controller/Statis.php
deleted file mode 100644
index 3c9ca08..0000000
--- a/code/app/api/controller/Statis.php
+++ /dev/null
@@ -1,44 +0,0 @@
-post('n_id/d');
-
- if ($intNId <= 0) {
- return Response::create('非法请求!')->code(400);
- }
-
- $NovelClicksModel = NovelClicksModel::getInstance();
-
- try {
- $NovelClicksModel->addStatis($intNId);
- } catch (\Exception $e) {
- // throw $e;
- }
-
- return Response::create()->code(204);
- }
-}
diff --git a/code/app/api/event.php b/code/app/api/event.php
deleted file mode 100644
index 4eff890..0000000
--- a/code/app/api/event.php
+++ /dev/null
@@ -1,5 +0,0 @@
- 标签
- return preg_replace($rpText, '', $newText);
- }
-
- function extractFilename($url)
- {
- // 检查 URL 是否以 .html 结尾
- if (substr($url, -5) !== '.html') {
- throw new InvalidArgumentException('URL must end with .html');
- }
-
- // 解析 URL 获取路径部分
- $path = parse_url($url, PHP_URL_PATH);
-
- // 获取文件名部分
- $filename = basename($path, '.html');
-
- return $filename;
- }
-
- function extractIdFromUrl($url)
- {
- if (preg_match('/-id-(\d+)\.html/', $url, $matches)) {
- return $matches[1];
- }
- return null;
- }
-
- function extractNumbersFromUrl($url)
- {
- // 使用正则表达式匹配路径中的数字部分
- if (preg_match('#/(\d+)/(\d+)/#', $url, $matches)) {
- return [
- 'first' => $matches[1], // 提取到的第一个数字
- 'second' => $matches[2], // 提取到的第二个数字
- ];
- }
- return null; // 如果未匹配,返回 null
- }
-
- function extractNumberFromUrl($url)
- {
- // 使用正则表达式匹配 /class/{数字}_ 的格式
- if (preg_match('/\/class\/(\d+)_/', $url, $matches)) {
- return $matches[1]; // 返回匹配的数字部分
- }
- return null; // 如果未匹配,返回 null
- }
-
-
- function encImgBy17C($strInputImgPath, $strOutImgPath, $strKey = 0x88)
- {
- // 读取图像内容
- $strImgData = file_get_contents($strInputImgPath);
- if ($strImgData === false) {
- throw new Exception("无法读取图片文件: $strInputImgPath");
- }
-
- // 将图像内容转换为字节数组
- $bytes = array_values(unpack('C*', $strImgData));
- $len = count($bytes);
-
- // 对每个字节进行异或操作加密
- for ($i = 0; $i < $len; $i++) {
- $bytes[$i] ^= $strKey;
- }
-
- // 将字节数组转换回二进制数据
- $strEncryptedData = pack('C*', ...$bytes);
-
- // 将加密后的数据写入文件
- if (file_put_contents($strOutImgPath, $strEncryptedData) === false) {
- throw new Exception("无法写入加密文件: $strOutImgPath");
- }
- }
-
- /**
- * 中文转码实体字符
- *
- * @param string $text
- * @return string
- */
- function customEntities($text)
- {
- $result = '';
- $length = mb_strlen($text, 'UTF-8');
-
- for ($i = 0; $i < $length; $i++) {
- $char = mb_substr($text, $i, 1, 'UTF-8');
- $code = ord($char);
-
- if ($code < 128) {
- // 对于 ASCII 字符,直接使用 ord
- $result .= '' . $code . ';';
- } else {
- // 对于非 ASCII 字符,使用 mb_ord 获取 Unicode 码
- $code = mb_ord($char, 'UTF-8');
- $result .= '' . $code . ';';
- }
- }
-
- return $result;
- }
-
- function isValidDateTime($dateTimeStr, $format = 'Y-m-d H:i:s')
- {
- $date = DateTime::createFromFormat($format, $dateTimeStr);
- return $date && $date->format($format) === $dateTimeStr;
- }
-
- // 创建保存文件
- function saveContentToFile($filePath, $content)
- {
- // 确保目标路径的目录存在
- $directory = dirname($filePath);
- if (!is_dir($directory)) {
- // 尝试创建目录
- if (!mkdir($directory, 0777, true)) {
- return [
- 'status' => false,
- 'message' => "Failed to create directory: $directory"
- ];
- }
- }
-
- // 写入内容到文件
- if (file_put_contents($filePath, $content) !== false) {
- return [
- 'status' => true,
- 'message' => "Content successfully written to $filePath"
- ];
- } else {
- return [
- 'status' => false,
- 'message' => "Failed to write content to $filePath"
- ];
- }
- }
-
- function saveCompressAndDeleteTxt($filePath, $content)
- {
- // 确保目标路径的目录存在
- $directory = dirname($filePath);
- if (!is_dir($directory)) {
- if (!mkdir($directory, 0777, true)) {
- return [
- 'status' => false,
- 'message' => "Failed to create directory: $directory"
- ];
- }
- }
-
- // 写入内容到文件
- $fp = fopen($filePath, "c+"); // 使用 c+ 模式,支持加锁
- if (!$fp) {
- return [
- 'status' => false,
- 'message' => "Failed to open file for writing: $filePath"
- ];
- }
-
- // 加锁防止其他进程同时操作
- if (!flock($fp, LOCK_EX)) { // 加排他锁
- fclose($fp);
- return [
- 'status' => false,
- 'message' => "Failed to acquire lock for file: $filePath"
- ];
- }
-
- // 写入内容
- if (fwrite($fp, $content) === false) {
- flock($fp, LOCK_UN); // 释放锁
- fclose($fp);
- return [
- 'status' => false,
- 'message' => "Failed to write content to $filePath"
- ];
- }
-
- // 解锁并关闭文件
- flock($fp, LOCK_UN);
- fclose($fp);
-
- // 压缩文件为 ZIP
- $zipPath = $filePath . ".zip"; // 压缩后的 ZIP 文件路径
- $zip = new ZipArchive();
-
- $zipOpenResult = $zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE);
- if ($zipOpenResult !== true) {
- return [
- 'status' => false,
- 'message' => "Failed to open zip archive: $zipPath"
- ];
- }
-
- // 添加文件到 ZIP 中
- if (!$zip->addFile($filePath, basename($filePath))) {
- $zip->close();
- return [
- 'status' => false,
- 'message' => "Failed to add file to zip archive: $filePath"
- ];
- }
-
- if (!$zip->close()) {
- return [
- 'status' => false,
- 'message' => "Failed to close zip archive: $zipPath"
- ];
- }
-
- // 删除原始文件
- $fp = fopen($filePath, "c+"); // 重新打开文件以加锁
- if ($fp && flock($fp, LOCK_EX)) {
- if (!file_exists($filePath)) {
- unlink($filePath); // 删除文件
- }
-
- flock($fp, LOCK_UN);
- fclose($fp);
- }
-
- return [
- 'status' => true,
- 'message' => "File success save to $zipPath and del",
- 'zip_path' => $zipPath
- ];
- }
-
- /**
- * 提取 ZIP 文件中的所有 .txt 文件内容
- *
- * @param string $zipPath ZIP 文件的完整路径
- * @return array 返回一个数组,键是文件名,值是对应的文件内容
- * @throws Exception 如果文件不存在或解压失败则抛出异常
- */
- function extractTxtFromZip($zipPath)
- {
- if (!file_exists($zipPath)) {
- throw new Exception("ZIP 文件路径无效: " . $zipPath);
- }
-
- $zip = new ZipArchive();
-
- if ($zip->open($zipPath) === true) {
- $txtContents = "";
-
- // 遍历所有文件
- for ($i = 0; $i < $zip->numFiles; $i++) {
- $fileName = $zip->getNameIndex($i);
-
- // 检查文件是否是 .txt 结尾
- if (pathinfo($fileName, PATHINFO_EXTENSION) === 'txt') {
- // 读取文件内容
- $content = $zip->getFromName($fileName);
- $txtContents = $content;
- }
- }
-
- $zip->close();
- return $txtContents;
- } else {
- throw new Exception("无法打开 ZIP 文件。");
- }
- }
-
-
- function readExtractAndDeleteTxt($zipPath, $extractTo = null)
- {
- // 检查 ZIP 文件是否存在
- if (!file_exists($zipPath)) {
- return [
- 'status' => false,
- 'message' => "ZIP file does not exist: $zipPath"
- ];
- }
-
- // 打开 ZIP 文件
- $zip = new ZipArchive();
- if ($zip->open($zipPath) !== true) {
- return [
- 'status' => false,
- 'message' => "Failed to open ZIP file: $zipPath"
- ];
- }
-
- // 获取 ZIP 文件内容列表
- $fileList = [];
- for ($i = 0; $i < $zip->numFiles; $i++) {
- $fileList[] = $zip->getNameIndex($i);
- }
-
- // 如果需要提取文件
- if ($extractTo) {
- // 确保目标目录存在
- if (!is_dir($extractTo)) {
- if (!mkdir($extractTo, 0777, true)) {
- return [
- 'status' => false,
- 'message' => "Failed to create extraction directory: $extractTo"
- ];
- }
- }
-
- // 提取文件到指定目录
- if (!$zip->extractTo($extractTo)) {
- $zip->close();
- return [
- 'status' => false,
- 'message' => "Failed to extract ZIP file to $extractTo"
- ];
- }
- }
-
- // 关闭 ZIP 文件
- $zip->close();
-
- // 删除提取的 .txt 文件
- $deletedFiles = [];
- foreach ($fileList as $file) {
- if (pathinfo($file, PATHINFO_EXTENSION) === 'txt') { // 检查是否是 .txt 文件
- $filePath = rtrim($extractTo, '/') . '/' . $file;
- if (file_exists($filePath) && unlink($filePath)) {
- $deletedFiles[] = $file;
- }
- }
- }
-
- // 返回提取和删除状态
- return [
- 'status' => true,
- 'message' => "ZIP file successfully extracted to $extractTo and .txt files deleted.",
- 'files_extracted' => $fileList,
- 'files_deleted' => $deletedFiles
- ];
- }
-
- function getRandomUserAgent()
- {
- $userAgents = [
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36',
- // 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
- // 'Mozilla/5.0 (Linux; Android 9; ASUS_X00TD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/359.0.0.288 Mobile Safari/537.36',
- // 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1',
- // 'Mozilla/5.0 (Linux; Android 9; ASUS_X00TD; Flow) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/359.0.0.288 Mobile Safari/537.36'
- ];
- return $userAgents[array_rand($userAgents)];
- }
-
- function getRandomProxies()
- {
- $proxies = [
- 'http://114.115.130.225:3128',
- // 'http://36.6.145.131:8089',
- // 'http://202.101.213.205:19926',
- // 'http://218.87.205.35:21874',
- // 'http://203.19.38.114:1080',
- // 'http://121.89.222.174:8090',
- // 'http://223.113.80.158:9091',
- // 'http://120.232.194.134:8998',
- // 'http://120.46.197.14:8083',
- // 'http://139.9.5.196:7890',
-
- // 'http://203.89.8.107:80',
- // 'http://117.186.143.130:8118',
- // 'http://117.186.232.73:8080',
- // 'http://203.12.200.179:8085',
- // 'http://120.46.215.52:15280',
- // 'http://111.230.243.170:80',
- // 'http://223.113.101.150:8060',
- // 'http://117.50.113.39:1337',
- ];
- return $proxies[array_rand($proxies)];
- }
-
- function fetchContentWithCurl($url, $headers = [], $timeout = 10, $proxy = null, $proxyAuth = null)
- {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
-
- // 设置头部
- if (!empty($headers)) {
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
- }
-
- // 模拟浏览器
- curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Linux; Android 9; ASUS_X00TD; Flow) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/359.0.0.288 Mobile Safari/537.36');
-
- // 如果需要代理
- if ($proxy) {
- curl_setopt($ch, CURLOPT_PROXY, $proxy);
- if ($proxyAuth) {
- curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyAuth); // 代理用户名和密码
- }
- }
-
- // 执行请求
- $response = curl_exec($ch);
-
- // 检查错误
- if (curl_errno($ch)) {
- $error = 'cURL Error: ' . curl_error($ch);
- curl_close($ch);
- return ['success' => false, 'error' => $error];
- }
-
- $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
- curl_close($ch);
-
- // 返回结果
- if ($httpCode >= 200 && $httpCode < 300) {
- return ['success' => true, 'data' => $response];
- } else {
- return ['success' => false, 'error' => "HTTP Error: $httpCode"];
- }
- }
-
-
- // 随机颜色生成函数
- function getRandomColor()
- {
- return 'color:rgb(' . mt_rand(0, 255) . ', ' . mt_rand(0, 255) . ', ' . mt_rand(0, 255) . ');';
- }
-
- /**
- * 生成分页 HTML 的通用函数
- *
- * @param int $currentPage 当前页码
- * @param int $lastPage 总页数
- * @param string $baseUrl 基础 URL
- * @param string $queryParams 查询参数(包含占位符 :page)
- * @param int $maxPagesToShow 最大显示页码数
- * @return string 分页 HTML
- * 示例调用
- * $paginationHtml = generatePaginationHtml(
- * 3, // 当前页
- * 10, // 总页数
- * '/vodshow/dy-cn-hot-action-en-', // 基础 URL
- * ':page---2024.html', // 查询参数,包含占位符 :page
- * 5 // 最多显示 5 个页码
- * );
- * // 输出分页 HTML
- * echo $paginationHtml;
- *
- */
- function generatePaginationHtml($currentPage, $lastPage, $baseUrl, $queryParams, $maxPagesToShow = 5)
- {
-
- $paginationHtml = '
';
-
- // 首页按钮
- $paginationHtml .= '- 首页
';
-
- // 上一页按钮
- if ($currentPage > 1) {
- $paginationHtml .= '- 上一页
';
- } else {
- $paginationHtml .= '- 上一页
';
- }
-
- // 页码范围控制:最多显示 $maxPagesToShow 个页码
- $start = max(1, $currentPage - floor($maxPagesToShow / 2));
- $end = min($lastPage, $start + $maxPagesToShow - 1);
- if ($end - $start + 1 < $maxPagesToShow) {
- $start = max(1, $end - $maxPagesToShow + 1);
- }
-
- // 页码按钮
- for ($i = $start; $i <= $end; $i++) {
- if ($i == $currentPage) {
- $paginationHtml .= '- ' . $i . '
';
- } else {
- $paginationHtml .= '- ' . $i . '
';
- }
- }
-
- // 下一页按钮
- if ($currentPage < $lastPage) {
- $paginationHtml .= '- 下一页
';
- } else {
- $paginationHtml .= '- 下一页
';
- }
-
- // 尾页按钮
- $paginationHtml .= '- 尾页
';
-
- $paginationHtml .= '
';
-
- return $paginationHtml;
- }
-
-
- /**
- * 生成分页 HTML 的通用函数
- *
- * @param int $currentPage 当前页码
- * @param int $lastPage 总页数
- * @param string $baseUrl 基础 URL
- * @param string $queryParams 查询参数(包含占位符 :page)
- * @param int $maxPagesToShow 最大显示页码数
- * @return string 分页 HTML
- * 示例调用
- * $paginationHtml = generatePaginationHtml(
- * 3, // 当前页
- * 10, // 总页数
- * '/vodshow/dy-cn-hot-action-en-', // 基础 URL
- * ':page---2024.html', // 查询参数,包含占位符 :page
- * 5 // 最多显示 5 个页码
- * );
- * // 输出分页 HTML
- * echo $paginationHtml;
- *
- */
- function generateNovelPaginationHtml($currentPage, $lastPage, $baseUrl, $queryParams, $maxPagesToShow = 10)
- {
- $paginationHtml = '';
-
- // 首页按钮
- $paginationHtml .= '
首 页';
-
- // 计算分页起始和结束
- $start = max(1, $currentPage - floor($maxPagesToShow / 2));
- $end = min($lastPage, $start + $maxPagesToShow - 1);
- if ($end - $start + 1 < $maxPagesToShow) {
- $start = max(1, $end - $maxPagesToShow + 1);
- }
-
- // 页码按钮
- for ($i = $start; $i <= $end; $i++) {
- if ($i == $currentPage) {
- $paginationHtml .= '
' . $i . ' ';
- } else {
- $paginationHtml .= '
' . $i . ' ';
- }
- }
-
- // 下一页按钮
- if ($currentPage < $lastPage) {
- $paginationHtml .= '
下一页';
- }
-
- $paginationHtml .= '
';
-
- return $paginationHtml;
- }
-
- // 分页模板-时空小说模板
- function generateNovelSkPaginationHtml($currentPage, $lastPage, $baseUrl, $queryParams, $maxPagesToShow = 10)
- {
- $paginationHtml = '';
-
- return $paginationHtml;
- }
-
-
-
- // 更据IP 获取地区
- function getLocationByIp($ip)
- {
- try {
- $response = file_get_contents("http://ip-api.com/json/{$ip}");
- $locationData = json_decode($response, true);
-
- if ($locationData['status'] === 'success') {
- return [
- 'country' => $locationData['country'],
- 'region' => $locationData['regionName'],
- 'city' => $locationData['city'],
- 'lat' => $locationData['lat'],
- 'lon' => $locationData['lon']
- ];
- }
- } catch (\Exception $e) {
- // 记录异常或忽略
- }
-
- return null; // 无法获取地理信息时返回 null
- }
-
- // 检查解密内容是否包含潜在的漏洞代码
- function checkForVulnerabilities($content)
- {
- // 检查是否包含 'eval' 函数
- if (stripos($content, 'eval') !== false) {
- return true;
- }
-
- // 检查是否包含恶意的 http 或域名
- $vulnerablePatterns = [
- '/http(s)?:\/\/[^ ]+/', // 匹配 URL
- '/.*<\/script>/i' // 匹配 script 标签
- ];
-
- foreach ($vulnerablePatterns as $pattern) {
- if (preg_match($pattern, $content)) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * 从 URL、URI 或路径中提取文件名(不带后缀)
- * @param string $path 输入的路径,比如 "/shu/1/4313672.html" 或 "https://example.com/files/test.pdf"
- * @return string|null 返回文件名部分,如果提取失败返回 null
- */
- function supperExtractFilename($path)
- {
- if (empty($path) || !is_string($path)) {
- return null;
- }
-
- $slashPos = strrpos($path, '/');
- if ($slashPos === false) {
- $slashPos = -1;
- }
-
- $dotPos = strrpos($path, '.');
- if ($dotPos === false || $dotPos <= $slashPos) {
-
- return substr($path, $slashPos + 1);
- }
-
- $start = $slashPos + 1;
- $length = $dotPos - $start;
- return substr($path, $start, $length);
- }
-
-
- /**
- * Undocumented function
- *
- * @param string $strZh
- * @return string
- */
- function zhToPinYin(string $strZh): string
- {
- if (empty($strZh)) {
- return $strZh;
- }
-
- $strPinYinToolsPath = root_path() . '/extend/tools/pinyin-tool';
-
- $strPinYin = shell_exec(sprintf("%s %s", $strPinYinToolsPath, escapeshellcmd($strZh)));
-
- $strPinYin = trim((string) $strPinYin);
-
- return $strPinYin;
- }
-
-
- /**
- * Undocumented function
- *
- * @param object $Obj
- * @param string $strAction
- * @return string
- */
- function getFomartSubjectKey(string $strAction): string
- {
- return strtoupper(str_replace('::', '@', ltrim(strrchr($strAction, "\\"), "\\")));
- }
-
- /**
- * Undocumented function
- *
- * @param MongoDB\BSON\UTCDateTime $mongoDate
- * @param string $format
- * @return string
- */
- function formatMongoDate(\MongoDB\BSON\UTCDateTime $mongoDate, string $strFormat = "Y-m-d H:i:s"): string
- {
- $intTimestamp = (int) ((string) $mongoDate / 1000);
- return gmdate($strFormat, $intTimestamp);
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrData
- * @param array $arrKeys
- * @param callable $Callback
- * @return void
- */
- function applyToKeys(null|array &$arrData, array $arrKeys, callable $Callback)
- {
- if (empty($arrData)) return;
-
- foreach ($arrKeys as $strKey) {
- if (key_exists($strKey, $arrData)) {
- $arrData[$strKey] = $Callback($arrData[$strKey]);
- }
- }
- }
-
- /**
- * generate string
- *
- * @param integer $length
- * @return string
- */
- function randomString(int $length): string {
- $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
- $max = 51; // 字符集长度减1 (0-51)
- $result = '';
-
- for ($i = 0; $i < $length; $i++) {
- $result .= $chars[random_int(0, $max)];
- }
-
- return $result;
- }
-}
diff --git a/code/app/event.php b/code/app/event.php
deleted file mode 100644
index e9851bb..0000000
--- a/code/app/event.php
+++ /dev/null
@@ -1,17 +0,0 @@
- [
- ],
-
- 'listen' => [
- 'AppInit' => [],
- 'HttpRun' => [],
- 'HttpEnd' => [],
- 'LogLevel' => [],
- 'LogWrite' => [],
- ],
-
- 'subscribe' => [
- ],
-];
diff --git a/code/app/home/BaseController.php b/code/app/home/BaseController.php
deleted file mode 100644
index 1b45103..0000000
--- a/code/app/home/BaseController.php
+++ /dev/null
@@ -1,152 +0,0 @@
-app = $app;
- $this->request = $this->app->request;
-
- // 控制器初始化
- $this->initialize();
-
- // View::assign('')
- }
-
- /**
- * 初始化
- *
- * @return void
- */
- protected function initialize()
- {
- $this->initSiteTKD();
- }
-
-
- /**
- * 初始化网站基本信息到全局替换类里
- *
- * @return void
- */
- private function initSiteTKD()
- {
- ConverterMovel::setVal([
- 'strSiteName' => $this->request->DomainModel->d_name,
- 'strSiteDomain' => $this->request->DomainModel->d_domain,
- 'strSiteKeywords' => $this->request->DomainModel->d_keywords,
- 'strSiteDescription' => $this->request->DomainModel->d_description,
- ]);
- }
-
- /**
- * return fomart view string
- *
- * @param string $strTemplate
- * @return string
- */
- public function rending($strTemplate = '')
- {
- // 全局使用的URL模板
- $strPcUrlTemp = $this->request->DomainModel->getFomartSubject('PC_URL_PATH','',false);
- $strNanUrlTemp = $this->request->DomainModel->getFomartSubject('NAN_SHENG_URL','',false);
- $strNvUrlTemp = $this->request->DomainModel->getFomartSubject('NV_SHENG_URL','',false);
- $strCategoryIndexUrlTemp = $this->request->DomainModel->getFomartSubject('CATEGORY_INDEX_URL','',false);
- $strRankUrlTemp = $this->request->DomainModel->getFomartSubject('RANK_INFO_URL','',false);
- $strSearchIndexUrlTemp = $this->request->DomainModel->getFomartSubject('SEARCH_INDEX_URL','',false);
- $strHistoryUrlTemp = $this->request->DomainModel->getFomartSubject('HISTORY_INFO_URL','',false);
- $strBookShelfUrlTemp = $this->request->DomainModel->getFomartSubject('SHUJIA_INFO_URL','',false);
- $strUserUrlTemp = $this->request->DomainModel->getFomartSubject('USER_INFO_URL','',false);
-
- View::assign("DomainModel", $this->request->DomainModel);
- View::assign("TemplatesModel", $this->request->TemplatesModel);
- View::assign("strPcPath", $strPcUrlTemp);
- View::assign("strNanUrlTemp", $strNanUrlTemp);
- View::assign("strNvUrlTemp", $strNvUrlTemp);
- View::assign("strCategoryIndexUrlTemp", $strCategoryIndexUrlTemp);
- View::assign("strRankUrlTemp", $strRankUrlTemp);
- View::assign("strSearchIndexUrlTemp", $strSearchIndexUrlTemp);
- View::assign("strHistoryUrlTemp", $strHistoryUrlTemp);
- View::assign("strBookShelfUrlTemp", $strBookShelfUrlTemp);
- View::assign("strUserUrlTemp", $strUserUrlTemp);
-
- $strTemplatesModel = $this->request->TemplatesModel->t_code;
-
- switch ($strTemplatesModel) {
- case 'default':
- // TODO 随机30个小说(有伪造小说的)
- $arrForgeNovel = [];
- View::assign([
- 'arrForgeNovel' => $arrForgeNovel,
- 'arrCategoryAll' => CategoryModel::$arrCategoryAll,
- ]);
- break;
- case 'kuangYu':
- break;
-
- }
-
- return View::fetch($strTemplate);
- }
-
- /**
- * generate GRM
- *
- * @param integer $intDeviceType
- * @param integer $intNum
- * @return void
- */
- public function generateGrm(int $intDeviceType, string|int $strDiff, int $intNum)
- {
- $strDomain = $this->request->DomainModel->d_domain;
- $strPageCode = $this->request->controller() . '@' . $this->request->action() . '@' . $intDeviceType;
-
- $arrGRM = GanRaoMaModel::getGrmCode($strDomain, $strPageCode, $strDiff, $intNum);
-
- View::assign("arrGRM", $arrGRM);
- }
-}
diff --git a/code/app/home/common.php b/code/app/home/common.php
deleted file mode 100644
index 1243615..0000000
--- a/code/app/home/common.php
+++ /dev/null
@@ -1,2 +0,0 @@
- [
- 'pc' => ['/pc', '/web', '/desktop', '/index', '/shouye', '/zhuomian'],
- 'h5' => ['','/nindex'],
- ],
-
- // 通用路径别名
- 'paths' => [
- // 章节相关路径
- 'chapter' => [
- '/xiaoshuo/:name-:intNovelId/zhang-:intChapterSort/[:intChapterPage]',
- '/novel/:name-:intNovelId/zhang-:intChapterSort/[:intChapterPage]',
- '/book/:name-:intNovelId/zhang-:intChapterSort/[:intChapterPage]',
- '/xiaoshuo-:name-:intNovelId/zhang-:intChapterSort/[:intChapterPage]',
- '/novel-:name-:intNovelId/zhang-:intChapterSort/[:intChapterPage]',
- '/book-:name-:intNovelId/zhang-:intChapterSort/[:intChapterPage]',
- ],
-
- // 最新章节-特殊页面处理
- 'latest' => [
- '/xiaoshuo/:name-:intNovelId/chapter/latest',
- '/novel/:name-:intNovelId/chapter/latest',
- '/book/:name-:intNovelId/chapter/latest',
- '/xiaoshuo-:name-:intNovelId/chapter/latest',
- '/novel-:name-:intNovelId/chapter/latest',
- '/book-:name-:intNovelId/chapter/latest',
- ],
-
- // 目录相关路径
- 'catalog' => [
- '/xiaoshuo/:name-:intNovelId/mulu/:strOrder/[:intPage]',
- '/novel/:name-:intNovelId/catalog/:strOrder/[:intPage]',
- '/book/:name-:intNovelId/table/:strOrder/[:intPage]',
- '/xiaoshuo/:name-:intNovelId/mulu/:strOrder/[:intPage]',
- '/novel/:name-:intNovelId/catalog/:strOrder/[:intPage]',
- '/book/:name-:intNovelId/table/:strOrder/[:intPage]',
- ],
-
- // 伪小说详情相关路径
- 'kan-novel' => [
- '/kan-xiaoshuo/:name-:intNovelId-:n_forge_id',
- '/show-novel/:name-:intNovelId-:n_forge_id',
- '/seo-book/:name-:intNovelId-:n_forge_id',
- '/show-xiaoshuo-:name-:intNovelId-:n_forge_id',
- '/see-novel-:name-:intNovelId-:n_forge_id',
- '/good-book-:name-:intNovelId-:n_forge_id',
- ],
-
- // 小说详情相关路径
- 'novel' => [
- '/xiaoshuo/:name-:intNovelId',
- '/novel/:name-:intNovelId',
- '/book/:name-:intNovelId',
- '/xiaoshuo-:name-:intNovelId',
- '/novel-:name-:intNovelId',
- '/book-:name-:intNovelId',
- ],
-
- // 书库
- 'library' => [
- /**
- * /shuku/nansheng-xiaoshuo/all/all/all/page1
- * '/:strGender?/:strCategory?/:strStatus?/:strOrder?/:intPage?';
- * 完整路由
- * 使用: {site:nflurl gender="$strGender" category="$CategoryPinyin" status="all" order="all" page="1"/}
- */
- // '/shuku/:strGender?/:strCategory?/:strStatus?/:strOrder?/page:intPage?',
- '/shuku/:strGender/:strCategory/:strStatus/:strOrder/page:intPage',
- '/books/:strGender/:strCategory/:strStatus/:strOrder/page:intPage',
- '/library/:strGender/:strCategory/:strStatus/:strOrder/page:intPage',
- '/fenlei/:strGender/:strCategory/:strStatus/:strOrder/page:intPage',
- '/class/:strGender/:strCategory/:strStatus/:strOrder/page:intPage',
- '/category/:strGender/:strCategory/:strStatus/:strOrder/page:intPage',
-
- /**
- * default 模板
- * strGender 不需要
- * 使用 :gender 传空/或者不传,控制器会默认值是 all
- * {site:nflurl gender="" category="$CategoryPinyin" status="all" order="all" page="1"/}
- */
- '/shuku/:strCategory/:strStatus/:strOrder/page:intPage',
- '/books/:strCategory/:strStatus/:strOrder/page:intPage',
- '/library/:strCategory/:strStatus/:strOrder/page:intPage',
- '/fenlei/:strCategory/:strStatus/:strOrder/page:intPage',
- '/class/:strCategory/:strStatus/:strOrder/page:intPage',
- '/category/:strCategory/:strStatus/:strOrder/page:intPage',
-
- /**
- * default 模板
- * strGender strOrder 不需要
- * 使用 :gender 传空/或者不传,控制器会默认值是 all
- * {site:nflurl gender="" category="$CategoryPinyin" status="all" order="all" page="1"/}
- */
- // '/shuku/:strCategory/:strStatus/page:intPage',
- // '/books/:strCategory/:strStatus/page:intPage',
- // '/library/:strCategory/:strStatus/page:intPage',
- // '/fenlei/:strCategory/:strStatus/page:intPage',
- // '/class/:strCategory/:strStatus/page:intPage',
- // '/category/:strCategory/:strStatus/page:intPage',
-
- /**
- * default 模板
- * strGender 不需要
- * 使用 :gender 传空/或者不传,控制器会默认值是 all
- * {site:nflurl gender="" category="$CategoryPinyin" status="all" order="all" page="1"/}
- */
- // '/shuku/:strCategory/:strOrder/page:intPage',
- // '/books/:strCategory/:strOrder/page:intPage',
- // '/library/:strCategory/:strOrder/page:intPage',
- // '/fenlei/:strCategory/:strOrder/page:intPage',
- // '/class/:strCategory/:strOrder/page:intPage',
- // '/category/:strCategory/:strOrder/page:intPage',
-
-
- /**
- * default 模板 /shuku/xuanhuan-xiuzhen/page1
- * strGender strStatus strOrder 不需要
- * 使用 :gender 传空/或者不传,控制器会默认值是 all
- * {site:nflurl gender="" category="$CategoryPinyin" status="all" order="all" page="1"/}
- */
- // '/shuku/:strCategory/page:intPage',
- // '/books/:strCategory/page:intPage',
- // '/library/:strCategory/page:intPage',
- // '/fenlei/:strCategory/page:intPage',
- // '/class/:strCategory/page:intPage',
- // '/category/:strCategory/page:intPage',
-
- /**
- * kuangyu 模板
- * strOrder 不需要
- * 使用 order 传空/或者不传,控制器会默认值是 all
- * {site:nflurl gender="$strGender" category="$CategoryPinyin" status="all" page="1"/}
- */
- '/shuku/:strGender/:strCategory/:strStatus/page:intPage',
- '/books/:strGender/:strCategory/:strStatus/page:intPage',
- '/library/:strGender/:strCategory/:strStatus/page:intPage',
- '/fenlei/:strGender/:strCategory/:strStatus/page:intPage',
- '/class/:strGender/:strCategory/:strStatus/page:intPage',
- '/category/:strGender/:strCategory/:strStatus/page:intPage',
-
- // '/shuku/:strGender/page:intPage',
- // '/books/:strGender/page:intPage',
- // '/library/:strGender/page:intPage',
- // '/fenlei/:strGender/page:intPage',
- // '/class/:strGender/page:intPage',
- // '/category/:strGender/page:intPage',
- ],
- // 书库首页
- 'library-index' => [
- '/shuku/index',
- '/books/index',
- '/library/index',
- '/fenlei/index',
- '/class/index',
- '/category/index',
- ],
- //排行榜
- 'rank' => ['/paihang/all', '/rank/all', '/paihang-quan', '/top/all', '/paihang-bang', '/ranks/all'],
- // 男生
- 'boys' => ['/nansheng-xiaoshuo', '/boys-novel', '/nansheng-shu', '/man-read', '/nansheng-book', '/male-novels'],
- //女生
- 'girls' => ['/nvsheng-xiaoshuo', '/girls-novel', '/nvsheng-shu', '/woman-read', '/nvsheng-book', '/female-novels'],
- //搜索
- 'search' => ['/search', '/explore', '/sousuo', '/find', '/query', '/keywords'],
- // 用户中心
- 'user' => ['/user', '/my-account', '/profile', '/yonghu', '/wode-zhongxin', '/personal-center'],
- //书架
- 'bookshelf' => ['/bookshelf', '/book-shelf', '/reading-shelf', '/shujia', '/yuedu-shujia', '/book-collection'],
- //历史记录
- 'history' => ['/history', '/reading-history', '/read-record', '/lishi', '/yuedu-lishi', '/browse-past'],
- // 首页
- 'index' => ['/'],
- // 首页 - 如果info_id 》 0
- 'nindex' => ['/nindex'],
-
- ],
-
-];
-
-/**
- * 遍历路由配置,动态注册 H5 和 PC 路由
- */
-foreach ($arrRoutes['prefixes'] as $platform => $prefixes) {
- $prefixes = is_array($prefixes) ? $prefixes : [$prefixes];
- $boolIsMobile = $platform === 'h5';
- foreach ($prefixes as $strPath) {
- foreach ($arrRoutes['paths'] as $key => $arrUrl) {
- foreach ($arrUrl as $strUrl) {
- $strRoute = $strPath . $strUrl;
- switch ($key) {
- case 'latest':
- //最新章节
- $strView = 'pc/getNovelCatalog.html';
- if ($platform == 'h5') {
- $strView = 'novel/getNovelCatalog.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- })
- ->pattern(['n_id' => '\d+', 'name' => '[\w-]+',]);
- break;
-
- case 'chapter':
- //章节
- $strView = 'pc/getNovelChapter.html';
- if ($platform == 'h5') {
- $strView = 'novel/getNovelChapter.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- })
- ->pattern(['intNovelId' => '\d+', 'name' => '[\w-]+', 'intChapterSort' => '\d+', 'intChapterPage' => '\d+']);
- break;
-
- case 'kan-novel':
- //伪造小说详情
- $strView = 'pc/getNovelInfo.html';
- if ($platform == 'h5') {
- $strView = 'novel/getNovelInfo.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- })
- ->pattern(['n_id' => '\d+', 'n_forge_id' => '\d+', 'name' => '[\w-]+',]);
- break;
-
- case 'novel':
- //小说详情
- $strView = 'pc/getNovelInfo.html';
- if ($platform == 'h5') {
- $strView = 'novel/getNovelInfo.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- })
- ->pattern(['n_id' => '\d+', 'name' => '[\w-]+',]);
-
- break;
- case 'catalog':
- //目录
- $strView = 'pc/getNovelCatalog.html';
- if ($platform == 'h5') {
- $strView = 'novel/getNovelCatalog.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- })
- ->pattern(['n_id' => '\d+', 'name' => '[\w-]+', 'strOrder' => 'zheng|dao', 'intPage' => '\d+']);
-
- break;
- case 'library':
- $strView = 'pc/getLibrary.html';
- if ($platform == 'h5') {
- $strView = 'novel/getLibrary.html';
- }
- //书库/分类
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- })
- ->pattern([
- 'strGender' => '[a-z\-]*', // 允许空值
- 'strCategory' => '[a-z\-]*', // 允许空值
- 'strStatus' => '(all|lianzai|wanjie)?', // 允许空值
- 'strOrder' => '[a-z\-]*', // 允许空值
- 'intPage' => '\d*', // 允许空值
- // 'strCategory' => 'all|xuanhuan-xiuzhen|junshi-xiaoshuo|wangyou-xiaoshuo|kehuan-xiaoshuo|zhongsheng-chuanyue|dushi-xiaoshuo|lingyi-xiaoshuo|yanqing-xiaoshuo|qita-xiaoshuo',
-
-
- ]);
- break;
-
- case 'library-index':
- //书库/分类首页
- $strView = 'pc/getLibrary.html';
- if ($platform == 'h5') {
- $strView = 'novel/getLibrary.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- });
-
- break;
- case 'rank':
- //排行榜
- $strView = 'pc/getNovelRank.html';
- if ($platform == 'h5') {
- $strView = 'novel/getNovelRank.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- });
- break;
-
- case 'boys':
- //男生
- $strView = 'pc/getNovelChannel.html';
- if ($platform == 'h5') {
- $strView = 'novel/getNovelChannel.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- })->append(['strChannel' => 'man']);
-
- //Route::get($strRoute, [Novel::class, 'getNovelChannel'])->append(['boolIsMobile' => $boolIsMobile, 'strChannel' => 'boys']);
- break;
-
- case 'girls':
- //女生
- $strView = 'pc/getNovelChannel.html';
- if ($platform == 'h5') {
- $strView = 'novel/getNovelChannel.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- })->append(['strChannel' => 'women']);
-
- //Route::get($strRoute, [Novel::class, 'getNovelChannel'])->append(['boolIsMobile' => $boolIsMobile, 'strChannel' => 'girls']);
- break;
-
- case 'search':
- //搜素
- $strView = 'pc/getSearchNovel.html';
- if ($platform == 'h5') {
- $strView = 'novel/getSearchNovel.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- })->ext('html');
- break;
-
- case 'user':
- //用户中心
- $strView = 'pc/user/index.html';
- if ($platform == 'h5') {
- $strView = 'user/index.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- });
- break;
-
- case 'bookshelf':
- //书架
- $strView = 'pc/user/getBookShelf.html';
- if ($platform == 'h5') {
- $strView = 'user/getBookShelf.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- });
- break;
-
- case 'history':
- //历史记录
- $strView = 'pc/user/getHistory.html';
- if ($platform == 'h5') {
- $strView = 'user/getHistory.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- });
- break;
-
- case 'index':
- // 首页
- if ($platform == 'h5') {
- Route::get($strRoute, function (\think\Request $Request, SiteContext $SiteContext ) {
- return view($SiteContext->getHomeView('h5'));
- });
- } else {
- Route::get($strRoute, function (\think\Request $Request, SiteContext $SiteContext ) {
- return view($SiteContext->getHomeView('pc'));
- });
- }
- break;
- case 'nindex':
- // 首页
- $strView = 'pc/index.html';
- if ($platform == 'h5') {
- $strView = 'index/index.html';
- }
- Route::get($strRoute, function () use ($strView) {
- return view($strView);
- });
- break;
-
- }
- }
- }
- }
-}
-
-/**
- * 遍历路由配置,动态注册 H5 和 PC 路由
- */
-// foreach ($arrRoutes['prefixes'] as $platform => $prefixes) {
-// $prefixes = is_array($prefixes) ? $prefixes : [$prefixes];
-// $boolIsMobile = $platform === 'h5';
-// foreach ($prefixes as $strPath) {
-// foreach ($arrRoutes['paths'] as $key => $arrUrl) {
-// foreach ($arrUrl as $strUrl) {
-// $strRoute = $strPath . $strUrl;
-// switch ($key) {
-// case 'latest':
-// //最新章节
-// Route::get($strRoute, [Novel::class, 'getNovelLatestChapter'])
-// ->append(['boolIsMobile' => $boolIsMobile])
-// ->pattern(['n_id' => '\d+', 'name' => '[\w-]+',]);
-// break;
-// case 'chapter':
-// //章节
-// Route::get($strRoute, [Novel::class, 'getNovelChapter'])
-// ->append(['boolIsMobile' => $boolIsMobile])
-// ->pattern(['intNovelId' => '\d+', 'name' => '[\w-]+', 'intChapterSort' => '\d+', 'intChapterPage' => '\d+']);
-// break;
-// case 'kan-novel':
-// //伪造小说详情
-// Route::get($strRoute, [Novel::class, 'getKanNovelInfo'])
-// ->append(['boolIsMobile' => $boolIsMobile])
-// ->pattern(['n_id' => '\d+', 'n_forge_id' => '\d+', 'name' => '[\w-]+',]);
-// break;
-// case 'novel':
-// //小说详情
-// Route::get($strRoute, [Novel::class, 'getNovelInfo'])
-// ->append(['boolIsMobile' => $boolIsMobile])
-// ->pattern(['n_id' => '\d+', 'name' => '[\w-]+',]);
-// break;
-// case 'catalog':
-// //目录
-// Route::get($strRoute, [Novel::class, 'getNovelCatalog'])
-// ->append(['boolIsMobile' => $boolIsMobile])
-// ->pattern(['intNovelId' => '\d+', 'name' => '[\w-]+', 'strOrder' => 'zheng|dao', 'intPage' => '\d+']);
-// break;
-// case 'library':
-// //书库/分类 /shuku/all/xuanhuan-xiuzhen/all/all/page1
-// Route::get($strRoute, [Novel::class, 'getLibrary'])
-// ->append(['boolIsMobile' => $boolIsMobile])
-// ->pattern([
-// //'strGender' => 'all|nansheng-xiaoshuo|boys-novel|nansheng-shu|man-read|nansheng-book|male-novels|nvsheng-xiaoshuo|girls-novel|nvsheng-shu|woman-read|nvsheng-book|female-novels',
-// 'strGender' => '[a-z\-]+',
-// 'strCategory' => '[a-z\-]+',
-// 'strStatus' => 'all|lianzai|wanjie',
-// // 'strOrder' => '[a-z\-]+',
-// 'intPage' => '\d+'
-// ]);
-// break;
-// case 'library-index':
-// //书库/分类首页
-// Route::get($strRoute, [Novel::class, 'getLibrary'])->append(['boolIsMobile' => $boolIsMobile]);
-// break;
-// case 'rank':
-// //排行榜
-// Route::get($strRoute, [Novel::class, 'getNovelRank'])->append(['boolIsMobile' => $boolIsMobile]);
-// break;
-// case 'boys':
-// //男生
-// Route::get($strRoute, [Novel::class, 'getNovelChannel'])->append(['boolIsMobile' => $boolIsMobile, 'strChannel' => 'boys']);
-// break;
-// case 'girls':
-// //女生
-// Route::get($strRoute, [Novel::class, 'getNovelChannel'])->append(['boolIsMobile' => $boolIsMobile, 'strChannel' => 'girls']);
-// break;
-// case 'search':
-// //搜素
-// Route::get($strRoute, [Novel::class, 'getSearchNovel'])->ext('html')->append(['boolIsMobile' => $boolIsMobile]);
-// break;
-// case 'user':
-// //用户中心
-// Route::get($strRoute, [User::class, 'Index'])->append(['boolIsMobile' => $boolIsMobile]);
-// break;
-// case 'bookshelf':
-// //书架
-// Route::get($strRoute, [User::class, 'getBookShelf'])->append(['boolIsMobile' => $boolIsMobile]);
-// break;
-// case 'history':
-// //历史记录
-// Route::get($strRoute, [User::class, 'getHistory'])->append(['boolIsMobile' => $boolIsMobile]);
-// break;
-// case 'index':
-// // 首页
-// if ($platform == 'h5') {
-// Route::get($strRoute, [Index::class, 'index'])->append(['boolIsMobile' => $boolIsMobile]);
-// } else {
-// Route::get($strRoute, [Index::class, 'getPcIndex'])->append(['boolIsMobile' => $boolIsMobile]);
-// }
-// break;
-// }
-// }
-// }
-// }
-// }
diff --git a/code/app/home/config/view.php b/code/app/home/config/view.php
deleted file mode 100644
index 00c27a9..0000000
--- a/code/app/home/config/view.php
+++ /dev/null
@@ -1,5 +0,0 @@
-getViewConfig();
diff --git a/code/app/home/controller/Index.php b/code/app/home/controller/Index.php
deleted file mode 100644
index aa6b561..0000000
--- a/code/app/home/controller/Index.php
+++ /dev/null
@@ -1,249 +0,0 @@
-param('boolIsMobile');
- $intTTL = 24 * 3600;
-
- $NovelModel = NovelModel::getInstance();
-
- $strTemplatesModel = $Request->TemplatesModel->t_code;
-
- switch ($strTemplatesModel) {
- case 'default':
- // 默认模板 630zw
- // TODO default模板-h5 首页数据: 获取所有分类数据,然后 每个分类 随机获取 10个小说 ,
- // 所有分类数据 放到一个数组里, 前端一个循环渲染,排版都是一样的
- $arrAllCategoryNovel = [];
-
- View::assign([
- 'arrAllCategoryNovel' => $arrAllCategoryNovel,
- ]);
- break;
-
- case 'kuangYu':
- $strKey = sprintf('%s:H5:INDEX:ZUIJIAN:SEX:%s:%s', $Request->DomainModel->d_domain, 0, 8);
- $arrNewsNovel = $NovelModel->getCommonNovelOnCache($strKey, $intTTL, 8, 0, NULL, ['n_update_time' => -1]);
-
- $strKey = sprintf('%s:H5:INDEX:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'daily', 0);
- $arrDayRankNovel = $NovelModel->getRankNovelOnCache($strKey, 10, 0, 'daily');
-
- $strKey = sprintf('%s:H5:INDEX:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'weekly', 0);
- $arrWeekRankNovel = $NovelModel->getRankNovelOnCache($strKey, 10, 0, 'weekly');
-
- $strKey = sprintf('%s:H5:INDEX:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'monthly', 0);
- $arrMoonRankNovel = $NovelModel->getRankNovelOnCache($strKey, 10, 0, 'monthly');
-
- $strStatus = '已完结';
- $strKey = sprintf('%s:H5:INDEX:RANK:%s:%s', $Request->DomainModel->d_domain, 'total', 'finished');
- $arrEndNovelRankNovel = $NovelModel->getRankNovelOnCache($strKey, 10, 0, 'total', $strStatus);
-
- /** @var DomainModel **/
- $Request->DomainModel;
-
-
- $strHostNovelDescriptionTemplate = $Request->DomainModel->getFomartSubject('INDEX_POPULAR_NOVELS');
- $strNewsNovelDescriptionTemplate = $Request->DomainModel->getFomartSubject('INDEX_NEWS_NOVELS');
- $strRankNovelDescriptionTemplate = $Request->DomainModel->getFomartSubject('INDEX_RANK_NOVELS');
- $strHostNovelDescription = ConverterMovel::convert($strHostNovelDescriptionTemplate);
- $strNewsNovelDescription = ConverterMovel::convert($strNewsNovelDescriptionTemplate);
- $strRankNovelDescription = ConverterMovel::convert($strRankNovelDescriptionTemplate);
-
- View::assign([
- 'arrDayRankNovel' => $arrDayRankNovel,
- 'arrWeekRankNovel' => $arrWeekRankNovel,
- 'arrMoonRankNovel' => $arrMoonRankNovel,
- 'arrEndNovelRankNovel' => $arrEndNovelRankNovel,
- 'strHostNovelDescription' => $strHostNovelDescription,
- 'strNewsNovelDescription' => $strNewsNovelDescription,
- 'strRankNovelDescription' => $strRankNovelDescription,
- ]);
- break;
- }
-
- // 推荐等级为9的 随机15个小说
- $strKey = sprintf('%s:H5:INDEX:TUIJIAN:%s', $Request->DomainModel->d_domain, 8);
- $arrRecommendNovel = $NovelModel->getCommonNovelOnCache($strKey, $intTTL, 8);
-
- $strKey = sprintf('%s:H5:INDEX:ZUIJIAN:SEX:%s:%s', $Request->DomainModel->d_domain, 0, 8);
- $arrNewsNovel = $NovelModel->getCommonNovelOnCache($strKey, $intTTL, 8, 0, NULL, ['og_novel_update_time' => -1]);
-
- // Title 模板
- ConverterMovel::setVal([
- 'strIndexTitle' => $this->request->DomainModel->d_index_title,
- 'strIndexKeywords' => $this->request->DomainModel->d_index_keywords,
- 'strIndexDescription' => $this->request->DomainModel->d_index_description,
- ]);
- $strTitleTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@TITLE');
- $strKeywordsTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@KEYWORDS');
- $strDescriptionTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@DESCRIPTION');
-
-
- $strTitle = ConverterMovel::convert($strTitleTemplate);
- $strKeywords = ConverterMovel::convert($strKeywordsTemplate);
- $strDescription = ConverterMovel::convert($strDescriptionTemplate);
-
- View::assign([
- 'arrRecommendNovel' => $arrRecommendNovel,
- 'arrNewsNovel' => $arrNewsNovel,
- 'strPageCode' => 'home',
- 'strTitle' => $strTitle,
- 'strKeywords' => $strKeywords,
- 'strDescription' => $strDescription,
-
- ]);
-
- $strView = $boolIsMobile ? '' : 'pc/index';
-
- $this->generateGrm(1, 0, 60);
- return $this->rending($strView);
- }
-
- /**
- * 首页数据-PC
- * @param Request $Request
- * @return void
- */
- public function getPcIndex(Request $Request)
- {
- $boolIsMobile = $Request->param('boolIsMobile');
-
- $intTTL = 24 * 3600;
-
- $NovelModel = NovelModel::getInstance();
-
- $strTemplatesModel = $Request->TemplatesModel->t_code;
-
- $intRecommendSerializationNovel = 4;
- $intRecommendEndNovel = 9;
-
- switch ($strTemplatesModel) {
- case 'default':
- // TODO 1.获取所有分类数据,
- // 2.然后 每个分类 随机获取 13个小说 ,
- // 3.所有分类数据 放到一个数组里, 前端一个循环渲染,排版都是一样的
- $arrAllCategoryNovel = [];
-
- // TODO 最新入库小说 随机30个
- $arrNewsNovel = [];
-
- View::assign([
- 'arrAllCategoryNovel' => $arrAllCategoryNovel,
- 'arrNewsNovel' => $arrNewsNovel,
-
- ]);
- break;
-
- case 'kuangYu':
- $intRecommendSerializationNovel = 13;
- $intRecommendEndNovel = 12;
- // 男生频道,最新的 随机5个小说
- $strKey = sprintf('%s:PC:INDEX:ZUIJIAN:SEX:%s:%s', $Request->DomainModel->d_domain, 1, 5);
- $arrBoyNewsNovel = $NovelModel->getCommonNovelOnCache($strKey, $intTTL, 5, 1, NULL, ['n_update_time' => -1]);
-
- // 男生频道,周排行榜 随机10个小说
- $strKey = sprintf('%s:PC:INDEX:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'weekly', 1);
- $arrBoyWeekRankNovel = $NovelModel->getRankNovelOnCache($strKey, 5, 1, 'weekly');
-
- // 男生频道,月排行榜 随机10个小说
- $strKey = sprintf('%s:PC:INDEX:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'monthly', 1);
- $arrBoyMoonRankNovel = $NovelModel->getRankNovelOnCache($strKey, 5, 1, 'monthly');
-
- // 男生频道,总排行榜 随机10个小说
- $strKey = sprintf('%s:PC:INDEX:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'total', 1);
- $arrBoyTotalRankNovel = $NovelModel->getRankNovelOnCache($strKey, 5, 1, 'total');
-
- // 女生频道,最新的 随机5个小说
- $strKey = sprintf('%s:PC:INDEX:ZUIJIAN:SEX:%s:%s', $Request->DomainModel->d_domain, 2, 5);
- $arrGirlNewsNovel = $NovelModel->getCommonNovelOnCache($strKey, $intTTL, 5, 2, NULL, ['n_update_time' => -1]);
-
- // 女生频道,周排行榜 随机10个小说
- $strKey = sprintf('%s:PC:INDEX:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'weekly', 2);
- $arrGirlWeekRankNovel = $NovelModel->getRankNovelOnCache($strKey, 5, 2, 'weekly');
-
- // 女生频道,月排行榜 随机10个小说
- $strKey = sprintf('%s:PC:INDEX:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'monthly', 2);
- $arrGirlMoonRankNovel = $NovelModel->getRankNovelOnCache($strKey, 5, 2, 'monthly');
-
- // 女生频道,总排行榜 随机10个小说
- $strKey = sprintf('%s:PC:INDEX:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'total', 2);
- $arrBGirlTotalRankNovel = $NovelModel->getRankNovelOnCache($strKey, 5, 2, 'total');
- View::assign([
- 'arrBoyNewsNovel' => $arrBoyNewsNovel,
- 'arrBoyWeekRankNovel' => $arrBoyWeekRankNovel,
- 'arrBoyMoonRankNovel' => $arrBoyMoonRankNovel,
- 'arrBoyTotalRankNovel' => $arrBoyTotalRankNovel,
- 'arrGirlNewsNovel' => $arrGirlNewsNovel,
- 'arrGirlWeekRankNovel' => $arrGirlWeekRankNovel,
- 'arrGirlMoonRankNovel' => $arrGirlMoonRankNovel,
- 'arrBGirlTotalRankNovel' => $arrBGirlTotalRankNovel,
- ]);
- break;
- }
-
- // 推荐等级为9的连载的 随机15个小说
- $strKey = sprintf('%s:PC:INDEX:TUIJIAN:%s', $Request->DomainModel->d_domain, $intRecommendSerializationNovel);
- $arrRecommendSerializationNovel = $NovelModel->getCommonNovelOnCache($strKey, $intTTL, $intRecommendSerializationNovel, 0, NULL);
-
- // 推荐等级为9的完结的 随机12个小说
- $strKey = sprintf('%s:PC:INDEX:TUIJIAN:WANJIE:%s', $Request->DomainModel->d_domain, $intRecommendEndNovel);
- $arrRecommendEndNovel = $NovelModel->getCommonNovelOnCache($strKey, $intTTL, $intRecommendEndNovel, 0, "已完结");
-
- // 最近更新-随机50
- $strKey = sprintf('%s:PC:INDEX:ZUIJIAN:SEX:%s:%s', $Request->DomainModel->d_domain, 0, 50);
- $arrNewsUpdateNovel = $NovelModel->getCommonNovelOnCache($strKey, $intTTL, 50, 0, NULL, ['n_update_time' => -1]);
-
- // Title 模板
- ConverterMovel::setVal([
- 'strIndexTitle' => $this->request->DomainModel->d_index_title,
- 'strIndexKeywords' => $this->request->DomainModel->d_index_keywords,
- 'strIndexDescription' => $this->request->DomainModel->d_index_description,
- ]);
- // $strTitle = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__));
- $strTitleTemplate = $Request->DomainModel->getFomartSubject('INDEX@INDEX@TITLE');
- $strKeywordsTemplate = $Request->DomainModel->getFomartSubject('INDEX@INDEX@KEYWORDS');
- $strDescriptionTemplate = $Request->DomainModel->getFomartSubject('INDEX@INDEX@DESCRIPTION');
-
- $strTitle = ConverterMovel::convert($strTitleTemplate);
- $strKeywords = ConverterMovel::convert($strKeywordsTemplate);
- $strDescription = ConverterMovel::convert($strDescriptionTemplate);
-
- View::assign([
- 'arrNewsUpdateNovel' => $arrNewsUpdateNovel,
- 'arrRecommendSerializationNovel' => $arrRecommendSerializationNovel,
- 'arrRecommendEndNovel' => $arrRecommendEndNovel,
- 'arrAdBanner' => [],
- 'strPageCode' => 'home',
- 'strTitle' => $strTitle,
- 'strKeywords' => $strKeywords,
- 'strDescription' => $strDescription,
- ]);
-
- $strView = $boolIsMobile ? '' : 'pc/index';
-
- $this->generateGrm(2, 0, 150);
- return $this->rending($strView);
- }
-}
diff --git a/code/app/home/controller/Novel.php b/code/app/home/controller/Novel.php
deleted file mode 100644
index bef662d..0000000
--- a/code/app/home/controller/Novel.php
+++ /dev/null
@@ -1,1051 +0,0 @@
-param('boolIsMobile');
-
- // 模拟数据-日排行榜 随机10个小说
- $NovelModel = NovelModel::getInstance();
- $strKey = sprintf('%s:PC:NOVEL:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'daily', 0);
- $arrDayRankNovel = $NovelModel->getRankNovelOnCache($strKey, 10, 0, 'daily');
-
- // 模拟数据-周排行榜 随机10个小说
- $strKey = sprintf('%s:PC:NOVEL:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'weekly', 0);
- $arrWeekRankNovel = $NovelModel->getRankNovelOnCache($strKey, 10, 0, 'weekly');
-
- // 模拟数据-月排行榜 随机10个小说
- $strKey = sprintf('%s:PC:NOVEL:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'monthly', 0);
- $arrMoonRankNovel = $NovelModel->getRankNovelOnCache($strKey, 10, 0, 'monthly');
-
- // 模拟数据-总排行榜 随机10个小说
- $strKey = sprintf('%s:PC:NOVEL:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'total', 0);
- $arrTotalRankNovel = $NovelModel->getRankNovelOnCache($strKey, 10, 0, 'total');
-
- // 新书榜 随机10个小说,n_id倒叙
- $strKey = $Request->DomainModel->d_domain . ':RANK:NEW:';
- $intLifeTime = 24 * 3600;
- $intCount = 10;
- $intType = 0;
- $strStatus = NULL;
- $arrSort = ['n_id' => -1];
- $arrNewsNovelRankNovel = $NovelModel->getCommonNovelOnCache($strKey, $intLifeTime, $intCount, $intType, $strStatus, $arrSort);
-
- // 完结榜 随机10个小说
- $strStatus = '已完结';
- $strKey = sprintf('%s:PC:NOVEL:RANK:%s:SEX:%s:%s', $Request->DomainModel->d_domain, 'total', 0, 'finished');
- $arrEdnNovelRankNovel = $NovelModel->getRankNovelOnCache($strKey, 10, 0, 'total', $strStatus);
-
- // Title 模板
- ConverterMovel::setVal([
- 'intPage' => 1,
- ]);
- // $strTitle = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__));
- $strTitleTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@TITLE');
- $strKeywordsTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@KEYWORDS');
- $strDescriptionTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@DESCRIPTION');
-
- $strTitle = ConverterMovel::convert($strTitleTemplate);
- $strKeywords = ConverterMovel::convert($strKeywordsTemplate);
- $strDescription = ConverterMovel::convert($strDescriptionTemplate);
-
- View::assign([
- 'arrDayRankNovel' => $arrDayRankNovel,
- 'arrWeekRankNovel' => $arrWeekRankNovel,
- 'arrMoonRankNovel' => $arrMoonRankNovel,
- 'arrTotalRankNovel' => $arrTotalRankNovel,
- 'arrNewsNovelRankNovel' => $arrNewsNovelRankNovel,
- 'arrEdnNovelRankNovel' => $arrEdnNovelRankNovel,
- 'strTitle' => $strTitle,
- 'strKeywords' => $strKeywords,
- 'strDescription' => $strDescription,
- 'strPageCode' => 'rank'
- ]);
-
-
- $strView = $boolIsMobile ? '' : 'pc/getNovelRank';
- $this->generateGrm(2, 0, 60);
- return $this->rending($strView);
- }
-
- /**
- * 书库
- *
- * @param Request $Request
- * @param string $strNovelChannel 男生/女生 -拼音
- * @param string $strCategory 分类 -拼音
- * @param string $strStatus 连载/完结 -拼音
- * @param string $strOrder 排序 -拼音
- * @param integer $intPage 分页
- * @return void
- */
- public function getLibrary(Request $Request, $strGender = 'all', $strCategory = 'all', $strStatus = 'all', $strOrder = 'all', $intPage = 1)
- {
- $boolIsMobile = $Request->param('boolIsMobile');
- $strChannel = $Request->param('strChannel') ?? 'all';
-
- $strNanUrlTemp = $this->request->DomainModel->getFomartSubject('NAN_SHENG_URL', '', false);
- $strNvUrlTemp = $this->request->DomainModel->getFomartSubject('NV_SHENG_URL', '', false);
- $strNanUrl = str_replace("/", "", $strNanUrlTemp);
- $strNvUrl = str_replace("/", "", $strNvUrlTemp);
- // 性别
- $arrSex = [
- 'all' => 0,
- $strNanUrl => 1,
- $strNvUrl => 1,
- ];
- $arrSexChinese = [
- 'all' => '',
- $strNanUrl => '男生',
- $strNvUrl => '女生',
- ];
-
- if (!key_exists($strGender, $arrSex)) {
- return response('Bad Request', 400);
- }
-
- $intGender = $arrSex[$strGender];
-
- // 分类
- if ($strCategory == 'all') {
- $strSearchCategory = '';
- } else if (!in_array($strCategory, CategoryModel::$arrCategoryPinYin)) {
- return response('Bad Request', 400);
- } else {
- $strCategoryKey = array_search($strCategory, CategoryModel::$arrCategoryPinYin);
- $strSearchCategory = CategoryModel::$arrCategory[$strCategoryKey];
- }
-
- // 小说状态
- $arrStatus = [
- 'all' => NULL,
- 'lianzai' => '连载中',
- 'wanjie' => '已完结',
- ];
-
- if (!key_exists($strStatus, $arrStatus)) {
- return response('Bad Request', 400);
- }
-
- $strSearchStatus = $arrStatus[$strStatus];
-
- $intPage = (int)$Request->param('intPage');
- if ($intPage <= 1) {
- $intPage = 1;
- }
- $intLimit = 20;
- $intLifeTime = 24 * 3600;
-
- $strTemplatesModel = $Request->TemplatesModel->t_code;
- switch ($strTemplatesModel) {
- case 'default':
- $arrOrder = [
- 'all' => '全部排序',
- 'day' => '日排行',
- 'week' => '周排行',
- 'mon' => '月排行',
- 'click' => '总排行',
- 'tuijian' => '推荐',
- 'news' => '最新入库',
- 'update' => '最新更新',
- ];
-
- // TODO 当前筛选条件(除了分页),随机6条
- $arrTopNovel = [];
-
- if (!$boolIsMobile) {
- // TODO 当前筛选条件(除了分页),最新 随机 $intLimit 条
- $arrNewsNovel = [];
- View::assign([
- 'arrNewsNovel' => $arrNewsNovel,
- ]);
- } else {
- }
-
- $strBaseUrl = app(NovelService::class)->getNovelCategoryUrl('', $strCategory, $strStatus, $strOrder, '{page}');
- View::assign([
- 'arrTopNovel' => $arrTopNovel,
- 'arrOrder' => $arrOrder,
- 'strOrder' => $strOrder,
- ]);
- break;
-
- case 'kuangYu':
- $strBaseUrl = app(NovelService::class)->getNovelCategoryUrl($strGender, $strCategory, $strStatus, "", '{page}');
- break;
- }
-
- $strKey = sprintf("Novel:Library:%s:%s:%s:%s", $intGender, $strSearchCategory, $strSearchStatus, $intPage);
-
- $NovelModel = NovelModel::getInstance();
- $arrPage = $NovelModel->getCustomPage01($strKey, $intPage, $intLimit, $intLifeTime, $intGender, $strSearchStatus);
-
- $strTemplate = '';
- $intButtonNum = 5;
- if ($boolIsMobile == false) {
- $intButtonNum = 10;
- $strTemplate = 'pc/getLibrary';
- }
-
- $arrPaginator = CusteomPage02::generate($intPage, $arrPage['total'], $intLimit, $strBaseUrl, $intButtonNum);
-
- // 更新值
- ConverterMovel::setVal([
- 'intPage' => $intPage,
- 'strNovelSex' => $arrSexChinese[$strGender],
- 'strNovelCategoryName' => str_replace("小说", "", $strSearchCategory),
- 'strNovelStatus' => $strSearchStatus,
- ]);
-
- $strTitleTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@TITLE');
- $strKeywordsTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@KEYWORDS');
- $strDescriptionTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@DESCRIPTION');
-
- $strTitle = ConverterMovel::convert($strTitleTemplate);
- $strKeywords = ConverterMovel::convert($strKeywordsTemplate);
- $strDescription = ConverterMovel::convert($strDescriptionTemplate);
-
- View::assign([
- 'arrNovel' => $arrPage['data'], // TODO default 模板需要加入 $strOrder 筛查数据
- 'strPageCode' => 'library',
- 'strGender' => $strGender,
- 'strCategory' => $strCategory,
- 'strStatus' => $strStatus,
- 'intPage' => $intPage,
- 'intTotalPage' => $arrPage['pages'],
- 'arrCategoryAll' => CategoryModel::$arrCategoryAll,
- 'arrPaginator' => $arrPaginator,
- 'strSearchCategory' => $strSearchCategory,
- 'strSearchStatus' => $strSearchStatus,
- 'strNovelSex' => $arrSexChinese[$strGender],
- 'strNanUrl' => $strNanUrl,
- 'strNvUrl' => $strNvUrl,
- 'strChannel' => $strChannel,
- 'strTitle' => $strTitle,
- 'strKeywords' => $strKeywords,
- 'strDescription' => $strDescription,
-
- ]);
-
- $this->generateGrm(2, $strGender . '-' . $strCategory . '-' . $strStatus . '-' . $intPage, 30);
- return $this->rending($strTemplate);
- }
-
- /**
- * 男生女生频道
- *
- * @param Request $Request
- * @return void
- */
- public function getNovelChannel(Request $Request)
- {
- $boolIsMobile = $Request->param('boolIsMobile');
- $strNovelChannel = $Request->param('strChannel'); // 区分男生/女生频道
-
- $NovelModel = NovelModel::getInstance();
- $intType = ['boys' => 1, 'girls' => 2][$strNovelChannel];
- $intLifeTime = 24 * 3600;
-
- // 推荐等级为9的,连载的,男生频道/女生频道, 随机12个小说
- $strKey = sprintf('%s:PC:Novel:Channel:Hot:%s:%s', $Request->DomainModel->d_domain, $intType, 'Serialized');
- $intCount = 12;
- $strStuatus = '连载中';
-
- $arrRecommendSerializationNovel = $NovelModel->getCommonNovelOnCache($strKey, $intLifeTime, $intCount, $intType, $strStuatus);
-
- // 推荐等级为9的,完结的,男生频道/女生频道, 随机8个小说
- $strKey = sprintf('%s:PC:Novel:Channel:Hot:%s:%s', $Request->DomainModel->d_domain, $intType, 'Finish');
- $intCount = 8;
- $strStuatus = '已完结';
-
- $arrRecommendEndNovel = $NovelModel->getCommonNovelOnCache($strKey, $intLifeTime, $intCount, $intType, $strStuatus);
-
- // 模拟数据-最近更新-随机50
- $strKey = sprintf('%s:PC:Novel:Channel:Latest:%s', $Request->DomainModel->d_domain, $intType);
- $intCount = 20;
- $arrNewsUpdateNovel = $NovelModel->getCommonNovelOnCache($strKey, $intLifeTime, $intCount, $intType, NULL, ['n_update_time' => -1]);
-
- // echo "";
- // var_dump($arrNewsUpdateNovel);exit;
- // TODO n_description 改成 n_description
- // 更新值
- ConverterMovel::setVal([
- 'intPage' => 1,
- 'strNovelSex' => $strNovelChannel == 'boys' ? '男生' : '女生', //汉字 男生或者女生
- ]);
-
- // $strTitle = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__));
- $strTitleTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@TITLE');
- $strKeywordsTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@KEYWORDS');
- $strDescriptionTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@DESCRIPTION');
-
- $strTitle = ConverterMovel::convert($strTitleTemplate);
- $strKeywords = ConverterMovel::convert($strKeywordsTemplate);
- $strDescription = ConverterMovel::convert($strDescriptionTemplate);
-
- View::assign([
- 'arrRecommendSerializationNovel' => $arrRecommendSerializationNovel,
- 'arrRecommendEndNovel' => $arrRecommendEndNovel,
- 'arrNewsUpdateNovel' => $arrNewsUpdateNovel,
- 'arrAdBanner' => [],
- 'strPageCode' => $strNovelChannel,
- 'strTitle' => $strTitle,
- 'strKeywords' => $strKeywords,
- 'strDescription' => $strDescription,
- ]);
-
-
- $strView = $boolIsMobile ? '' : 'pc/getNovelChannel';
- $this->generateGrm(2, $strNovelChannel, 50);
- return $this->rending($strView);
- }
-
- /**
- * 小说详情-伪造小说
- *
- * @param Request $Request
- * @return void
- */
- public function getKanNovelInfo(Request $Request)
- {
-
- $intNId = $Request->param('n_id');
-
- $intNForgeId = $Request->param('n_forge_id');
-
- $boolIsMobile = $Request->param('boolIsMobile');
-
- $NovelModel = NovelModel::getInstance();
-
- // 小说详情
- $arrNovel = $NovelModel->getNovelByNId($intNId);
-
- foreach ($arrNovel['n_forge_novel'] as $arrForgeNovel) {
- if ($arrForgeNovel['n_forge_id'] == $intNForgeId) {
- $arrNovel['n_name'] = $arrForgeNovel['n_forge_title'];
- break;
- }
- }
-
- // 分类拼音
- $arrNovel['n_category_pinyin'] = CategoryModel::getPinYin($arrNovel['n_category']);
- $arrNovel['n_category_sex_en'] = $arrNovel['n_category_sex_en'] ?? 'man';
-
- // 最后章节
- $ChapterModel = ChapterModel::getInstance();
- $arrLatestChapter = $ChapterModel->getLatestChapterByNId($intNId);
-
- // 第一章
- $arrFirstChapter = $ChapterModel->getFirstChapterByNId($intNId, false);
- $intFirstChapterSort = null;
- if ($arrFirstChapter) {
- $intFirstChapterSort = $arrFirstChapter['c_sort_num'];
- }
-
- $strFocus = '';
- // 要点
- if ($arrLatestChapter) {
- $strFocus = strip_tags($arrLatestChapter['c_content']);
- $intCount = mb_strlen($strFocus);
- if ($intCount > 300) {
- $intPos = mt_rand(0, $intCount - 300);
- $strFocus = mb_substr($strFocus, $intPos, 300);
- }
- }
-
- // 最近五个章节
- $arrChapter = $ChapterModel->findMany([
- 'n_id' => $intNId,
- 'c_page' => 0,
- ], 10, ['c_sort_num' => -1]);
-
- // 点击数
- $NovelClicksModel = NovelClicksModel::getInstance();
- $arrNovelClicks = $NovelClicksModel->getStats($intNId);
-
- // 推荐小说
- $arrRelateveNId = array_column($arrNovel['n_related_novel'], 'n_id');
-
- $arrRelateveNovel = $NovelModel->findMany(['n_id' => [
- '$in' => $arrRelateveNId,
- ]], 10);
-
- $strTemplatesModel = $Request->TemplatesModel->t_code;
- switch ($strTemplatesModel) {
- case 'default':
-
- // TODO 章节正序 前100 条
- $arrChapterAsc = [];
-
- // TODO 和当前小说同分类,完结的小说 随机6个
- $arrEndNovel = [];
-
- View::assign([
- 'arrChapterAsc' => $arrChapterAsc,
- 'arrEndNovel' => $arrEndNovel,
- ]);
- break;
- }
-
- // 更新值
- ConverterMovel::setVal([
- 'intPage' => 1,
- 'strNovelName' => $arrNovel['n_name'],
- 'strNovelAuthor' => $arrNovel['n_author'],
- 'strNovelCategoryName' => $arrNovel['n_category'],
- 'strNovelSex' => $arrNovel['n_category_sex_en'] == 'man' ? '男生' : '女生',
- 'strNovelStatus' => $arrNovel['n_status'],
- 'strNovelDescription' => $arrNovel['n_description'],
- ]);
-
- $strTitleTemplate = $Request->DomainModel->getFomartSubject('NOVEL@GETNOVELINFO@TITLE', $intNForgeId);
- $strKeywordsTemplate = $Request->DomainModel->getFomartSubject('NOVEL@GETNOVELINFO@KEYWORDS', $intNForgeId);
- $strDescriptionTemplate = $Request->DomainModel->getFomartSubject('NOVEL@GETNOVELINFO@DESCRIPTION', $intNForgeId);
-
- $strTitle = ConverterMovel::convert($strTitleTemplate);
- $strKeywords = ConverterMovel::convert($strKeywordsTemplate);
- $strDescription = ConverterMovel::convert($strDescriptionTemplate);
-
- // js使用到
- $arrNovelJs = $arrNovel;
- unset($arrNovelJs['n_related_novel'], $arrNovelJs['n_forge_novel'], $arrNovelJs['n_description']);
-
- View::assign([
- 'intPage' => 1,
- 'arrRelateveNovel' => $arrRelateveNovel,
- 'arrNovel' => $arrNovel,
- 'arrNovelJs' => $arrNovelJs,
- 'arrChapter' => $arrChapter,
- 'arrLatestChapter' => $arrLatestChapter,
- 'arrNovelClicks' => $arrNovelClicks,
- 'strFocus' => $strFocus,
- 'intFirstChapterSort' => $intFirstChapterSort,
- 'strPageCode' => 'detail',
- 'strTitle' => $strTitle,
- 'strKeywords' => $strKeywords,
- 'strDescription' => $strDescription,
- ]);
-
- $strView = $boolIsMobile ? 'getNovelInfo' : 'pc/getNovelInfo';
- $this->generateGrm(2, $intNId . '-' . $intNForgeId, 50);
- return $this->rending($strView);
- }
-
- /**
- * 小说详情
- *
- * @param Request $Request
- * @return void
- */
- public function getNovelInfo(Request $Request)
- {
- $intNId = $Request->param('n_id');
-
- $boolIsMobile = $Request->param('boolIsMobile');
-
- $NovelModel = NovelModel::getInstance();
-
- // 小说详情
- $arrNovel = $NovelModel->getNovelByNId($intNId);
-
- // 分类拼音
- $arrNovel['n_category_pinyin'] = CategoryModel::getPinYin($arrNovel['n_category']);
- $arrNovel['n_category_sex_en'] = $arrNovel['n_category_sex_en'] ?? 'man';
-
- // 最后章节
- $ChapterModel = ChapterModel::getInstance();
- $arrLatestChapter = $ChapterModel->getLatestChapterByNId($intNId);
-
- // 第一章
- $arrFirstChapter = $ChapterModel->getFirstChapterByNId($intNId, false);
- $intFirstChapterSort = null;
- if ($arrFirstChapter) {
- $intFirstChapterSort = $arrFirstChapter['c_sort_num'];
- }
-
- $strFocus = '';
- // 要点
- if ($arrLatestChapter) {
- $strFocus = strip_tags($arrLatestChapter['c_content']);
- $intCount = mb_strlen($strFocus);
- if ($intCount > 300) {
- $intPos = mt_rand(0, $intCount - 300);
- $strFocus = mb_substr($strFocus, 0, 300);
- }
- }
-
- // 最近五个章节
- $arrChapter = $ChapterModel->findMany([
- 'n_id' => $intNId,
- 'c_page' => 0,
- ], 10, ['c_sort_num' => -1]);
-
- // 点击数
- $NovelClicksModel = NovelClicksModel::getInstance();
- $arrNovelClicks = $NovelClicksModel->getStats($intNId);
-
- // 推荐小说
- $arrRelateveNId = array_column($arrNovel['n_related_novel'], 'n_id');
-
- $arrRelateveNovel = $NovelModel->findMany(['n_id' => [
- '$in' => $arrRelateveNId,
- ]], 10);
-
- $strTemplatesModel = $Request->TemplatesModel->t_code;
- switch ($strTemplatesModel) {
- case 'default':
-
- // TODO 章节正序 前100 条
- $arrChapterAsc = [];
-
- // TODO 和当前小说同分类,完结的小说 随机6个
- $arrEndNovel = [];
-
- View::assign([
- 'arrChapterAsc' => $arrChapterAsc,
- 'arrEndNovel' => $arrEndNovel,
- ]);
- break;
- }
-
- // 更新值
- ConverterMovel::setVal([
- 'intPage' => 1,
- 'strNovelName' => $arrNovel['n_name'],
- 'strNovelAuthor' => $arrNovel['n_author'],
- 'strNovelCategoryName' => $arrNovel['n_category'],
- 'strNovelSex' => $arrNovel['n_category_sex_en'] == 'man' ? '男生' : '女生',
- 'strNovelStatus' => $arrNovel['n_status'],
- 'strNovelDescription' => $arrNovel['n_description'],
- ]);
-
- $strTitleTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@TITLE', $intNId);
- $strKeywordsTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@KEYWORDS', $intNId);
- $strDescriptionTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@DESCRIPTION', $intNId);
-
- $strTitle = ConverterMovel::convert($strTitleTemplate);
- $strKeywords = ConverterMovel::convert($strKeywordsTemplate);
- $strDescription = ConverterMovel::convert($strDescriptionTemplate);
-
- View::assign([
- 'arrRelateveNovel' => $arrRelateveNovel,
- 'arrNovel' => $arrNovel,
- 'arrChapter' => $arrChapter,
- 'arrLatestChapter' => $arrLatestChapter,
- 'arrNovelClicks' => $arrNovelClicks,
- 'strFocus' => $strFocus,
- 'intFirstChapterSort' => $intFirstChapterSort,
- 'strPageCode' => 'detail',
- 'strTitle' => $strTitle,
- 'strKeywords' => $strKeywords,
- 'strDescription' => $strDescription,
- ]);
-
- $strView = $boolIsMobile ? '' : 'pc/getNovelInfo';
- $this->generateGrm(2, $intNId, 50);
- return $this->rending($strView);
- }
-
- /**
- * 最新章节-特殊页面处理
- *
- * @param Request $Request
- * @return void
- */
- public function getNovelLatestChapter(Request $Request)
- {
-
- $boolIsMobile = $Request->param('boolIsMobile');
-
- $intNId = $Request->param('n_id');
-
- // 小说详情
- $NovelModel = NovelModel::getInstance();
- $arrNovel = $NovelModel->getNovelByNId($intNId);
-
- $arrNovel['n_category_pinyin'] = $arrNovel['n_category_pinyin'] ?? 'all';
- $arrNovel['n_category_sex_en'] = $arrNovel['n_category_sex_en'] ?? 'man';
-
- // 最新章节
- $ChapterModel = ChapterModel::getInstance();
- $arrChapter = $ChapterModel->getLatestChapterByNId($intNId);
-
- $strChapterDescription = '';
- // 上一章节和下一章节
- $arrPreChapter = $arrNextChapter = [];
-
- if ($arrChapter) {
- $arrPreChapter = $ChapterModel->getPreChapter($arrChapter['n_id'], $arrChapter['c_sort_num'], $arrChapter['c_page']);
- $arrNextChapter = $ChapterModel->getNextChapter($arrChapter['n_id'], $arrChapter['c_sort_num'], $arrChapter['c_page']);
-
- // 要点-先从章节随机截取,后面如果用上ai,看看使用ai 提炼 精简内容
- $strChapterDescription = strip_tags($arrChapter['c_content']);
- $intCount = mb_strlen($strChapterDescription);
- $strChapterDescription = ($intCount > 50) ? mb_substr($strChapterDescription, 0, 50) : $strChapterDescription;
-
- $arrChapter['c_content'] = base64_encode($arrChapter['c_content']);
- }
-
- $strTemplatesModel = $Request->TemplatesModel->t_code;
- switch ($strTemplatesModel) {
- case 'default':
- // 推荐小说
- $arrRelateveNId = array_column($arrNovel['n_related_novel'], 'n_id');
- $arrRelateveNovel = $NovelModel->findMany(['n_id' => [
- '$in' => $arrRelateveNId,
- ]], 10);
-
- // TODO 和当前小说同分类,完结的小说 随机6个
- $arrEndNovel = [];
-
- View::assign([
- 'arrRelateveNovel' => $arrRelateveNovel,
- 'arrEndNovel' => $arrEndNovel,
- ]);
-
- break;
-
- case 'kuangYu':
- }
-
-
- $arrCategoryAll = CategoryModel::$arrCategoryAll;
-
- // 更新值
- ConverterMovel::setVal([
- 'intPage' => 1,
- 'strNovelName' => $arrNovel['n_name'],
- 'strNovelAuthor' => $arrNovel['n_author'],
- 'strNovelCategoryName' => $arrNovel['n_category'],
- 'strNovelStatus' => $arrNovel['n_status'],
- 'strNovelDescription' => $arrNovel['n_description'],
- 'strChapterDescription' => $strChapterDescription,
- 'strNovelChapterName' => $arrChapter['c_name'] ?? '',
- 'strNovelChapterSort' => $arrChapter['c_sort_num'] ?? '',
- ]);
-
-
- $strTitleTemplate = $Request->DomainModel->getFomartSubject('NOVEL@GETNOVELCHAPTER@TITLE', $intNId);
- $strKeywordsTemplate = $Request->DomainModel->getFomartSubject('NOVEL@GETNOVELCHAPTER@KEYWORDS', $intNId);
- $strDescriptionTemplate = $Request->DomainModel->getFomartSubject('NOVEL@GETNOVELCHAPTER@DESCRIPTION', $intNId);
-
- $strTitle = ConverterMovel::convert($strTitleTemplate);
- $strKeywords = ConverterMovel::convert($strKeywordsTemplate);
- $strDescription = ConverterMovel::convert($strDescriptionTemplate);
-
-
- View::assign([
- 'arrNovel' => $arrNovel,
- 'arrCategoryAll' => $arrCategoryAll,
- 'arrChapter' => $arrChapter,
- 'arrPreChapter' => $arrPreChapter,
- 'arrNextChapter' => $arrNextChapter,
- 'strPageCode' => 'boy',
- 'intNovelId' => $intNId,
- 'intChapterSort' => $arrChapter['c_sort_num'] ?? 0,
- 'intChapterPage' => $arrChapter['c_page'] ?? 0,
- 'strTitle' => $strTitle,
- 'strKeywords' => $strKeywords,
- 'strDescription' => $strDescription,
- ]);
-
- $strView = $boolIsMobile ? 'getNovelChapter' : 'pc/getNovelChapter';
- $this->generateGrm(2, $intNId . '-' . $arrChapter['c_sort_num'] ?? 0, 100);
- return $this->rending($strView);
- }
-
- /**
- * 章节详情
- *
- * @param Request $Request
- * @param integer $intNovelId 小说id
- * @param integer $intChapterSort 章节排序 序号
- * @param integer $intChapterPage 每个章节的分页
- * @return void
- */
- public function getNovelChapter(Request $Request, $intNovelId = 1, $intChapterSort = 1, $intChapterPage = 0)
- {
- $boolIsMobile = $Request->param('boolIsMobile');
-
- // 小说详情
- $NovelModel = NovelModel::getInstance();
- $intNId = $intNovelId;
- $arrNovel = $NovelModel->getNovelByNId($intNId);
-
- $arrNovel['n_category_pinyin'] = $arrNovel['n_category_pinyin'] ?? 'all';
- $arrNovel['n_category_sex_en'] = $arrNovel['n_category_sex_en'] ?? 'man';
-
- // 章节
- $ChapterModel = ChapterModel::getInstance();
- $arrFilter = ['n_id' => $intNId, 'c_sort_num' => $intChapterSort, 'c_page' => $intChapterPage];
-
- $arrChapter = $ChapterModel->findOne($arrFilter);
- $strChapterDescription = '';
-
- // 上一章节和下一章节
- $arrPreChapter = $arrNextChapter = [];
-
- if ($arrChapter) {
- $arrPreChapter = $ChapterModel->getPreChapter($arrChapter['n_id'], $arrChapter['c_sort_num'], $arrChapter['c_page']);
- $arrNextChapter = $ChapterModel->getNextChapter($arrChapter['n_id'], $arrChapter['c_sort_num'], $arrChapter['c_page']);
-
- // 要点-先从章节随机截取,后面如果用上ai,看看使用ai 提炼 精简内容
- $strChapterDescription = strip_tags($arrChapter['c_content']);
- $intCount = mb_strlen($strChapterDescription);
- $strChapterDescription = ($intCount > 50) ? mb_substr($strChapterDescription, 0, 50) : $strChapterDescription;
-
- $arrChapter['c_content'] = base64_encode($arrChapter['c_content']);
- }
-
- $strTemplatesModel = $Request->TemplatesModel->t_code;
- switch ($strTemplatesModel) {
- case 'default':
- // 推荐小说
- $arrRelateveNId = array_column($arrNovel['n_related_novel'], 'n_id');
- $arrRelateveNovel = $NovelModel->findMany(['n_id' => [
- '$in' => $arrRelateveNId,
- ]], 10);
-
- // TODO 和当前小说同分类,完结的小说 随机6个
- $arrEndNovel = [];
-
- View::assign([
- 'arrRelateveNovel' => $arrRelateveNovel,
- 'arrEndNovel' => $arrEndNovel,
- ]);
-
- break;
-
- case 'kuangYu':
- }
-
- $arrCategoryAll = CategoryModel::$arrCategoryAll;
-
- // 更新值
- ConverterMovel::setVal([
- 'intPage' => 1,
- 'strNovelName' => $arrNovel['n_name'],
- 'strNovelAuthor' => $arrNovel['n_author'],
- 'strNovelCategoryName' => $arrNovel['n_category'],
- 'strNovelStatus' => $arrNovel['n_status'],
- 'strNovelDescription' => $arrNovel['n_description'],
- 'strChapterDescription' => $strChapterDescription,
- 'strNovelChapterName' => $arrChapter['c_name'],
- 'strNovelChapterSort' => $arrChapter['c_sort_num'],
- ]);
-
- $strTitleTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@TITLE', $intNId);
- $strKeywordsTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@KEYWORDS', $intNId);
- $strDescriptionTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@DESCRIPTION', $intNId);
-
- $strTitle = ConverterMovel::convert($strTitleTemplate);
- $strKeywords = ConverterMovel::convert($strKeywordsTemplate);
- $strDescription = ConverterMovel::convert($strDescriptionTemplate);
-
- View::assign([
- 'arrNovel' => $arrNovel,
- 'arrCategoryAll' => $arrCategoryAll,
- 'arrChapter' => $arrChapter,
- 'arrPreChapter' => $arrPreChapter,
- 'arrNextChapter' => $arrNextChapter,
- 'strPageCode' => 'boy',
- 'intNovelId' => $intNovelId,
- 'intChapterSort' => $intChapterSort,
- 'intChapterPage' => $intChapterPage,
- 'strTitle' => $strTitle,
- 'strKeywords' => $strKeywords,
- 'strDescription' => $strDescription,
- ]);
-
- $strView = $boolIsMobile ? '' : 'pc/getNovelChapter';
- $this->generateGrm(2, $intNId . '-' . $arrChapter['c_sort_num'] ?? 0, 100);
- return $this->rending($strView);
- }
-
- /**
- * 小说章节列表页面
- *
- * @param Request $Request
- * @param int $intNovelId 小说id
- * @param int $intPage 目录分页
- * @param string $strOrder 正序倒叙:zheng/dao
- * @return void
- */
- public function getNovelCatalog(Request $Request, $intNovelId = null, $intPage = 1, $strOrder = 'zheng')
- {
- $boolIsMobile = $Request->param('boolIsMobile');
-
- // 小说详情
- $NovelModel = NovelModel::getInstance();
- $intNId = $intNovelId;
- $arrNovel = $NovelModel->getNovelByNId($intNId);
-
- $arrNovel['n_category_pinyin'] = $arrNovel['n_category_pinyin'] ?? 'all';
- $arrNovel['n_category_sex_en'] = $arrNovel['n_category_sex_en'] ?? 'man';
-
- $ChapterModel = ChapterModel::getInstance();
-
- $strKey = sprintf('Nid:%s:Chapter-Page:%s:Order:%s', $intNId, $intPage, $strOrder);
-
- $arrFilter = ['n_id' => $intNId, 'c_page' => 0,];
- $intLimit = 10;
- $intLifeTime = 12 * 3600;
-
- if ($strOrder == 'zheng') {
- $arrSort = ['c_sort_num' => 1];
- } else {
- $arrSort = ['c_sort_num' => -1];
- }
-
- $strTemplatesModel = $Request->TemplatesModel->t_code;
- switch ($strTemplatesModel) {
- case 'default':
- // 第一章
- $arrFirstChapter = $ChapterModel->getFirstChapterByNId($intNId, false);
- $intFirstChapterSort = null;
- if ($arrFirstChapter) {
- $intFirstChapterSort = $arrFirstChapter['c_sort_num'];
- }
-
- // 推荐小说
- $arrRelateveNId = array_column($arrNovel['n_related_novel'], 'n_id');
- $arrRelateveNovel = $NovelModel->findMany(['n_id' => [
- '$in' => $arrRelateveNId,
- ]], 10);
-
- // TODO 章节正序 前100 条
- $arrChapterAsc = [];
-
- // TODO 和当前小说同分类,完结的小说 随机6个
- $arrEndNovel = [];
-
- View::assign([
- 'arrChapterAsc' => $arrChapterAsc,
- 'arrEndNovel' => $arrEndNovel,
- 'intFirstChapterSort' => $intFirstChapterSort,
- 'arrRelateveNovel' => $arrRelateveNovel,
- ]);
- break;
-
- case 'kuangYu':
- }
-
- $arrPage = $ChapterModel->findPaginatedWithCache($arrFilter, $intPage, $intLimit, $arrSort, $strKey, $intLifeTime);
-
- $intButtonNum = 5;
- if ($boolIsMobile == false) {
- $intButtonNum = 10;
- }
-
- $strBaseUrl = app(NovelService::class)->getNovelCatalogUrl($intNId, $arrNovel['n_name_pinyin'], $strOrder, '{page}');
- $arrPaginator = CusteomPage02::generate($intPage, $arrPage['total'], $intLimit, $strBaseUrl, $intButtonNum);
-
- // 更新值
- ConverterMovel::setVal([
- 'intPage' => $intPage,
- 'strNovelSex' => $arrNovel['n_category_sex_en'] == 'man' ? '男生' : '女生',
- 'strNovelName' => $arrNovel['n_name'],
- 'strNovelAuthor' => $arrNovel['n_author'],
- 'strNovelCategoryName' => $arrNovel['n_category'],
- 'strNovelStatus' => $arrNovel['n_status'],
- 'strNovelDescription' => $arrNovel['n_description'],
- ]);
-
- $strTitleTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@TITLE', $intNId);
- $strKeywordsTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@KEYWORDS', $intNId);
- $strDescriptionTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@DESCRIPTION', $intNId);
-
- $strTitle = ConverterMovel::convert($strTitleTemplate);
- $strKeywords = ConverterMovel::convert($strKeywordsTemplate);
- $strDescription = ConverterMovel::convert($strDescriptionTemplate);
-
- View::assign([
- 'arrNovel' => $arrNovel,
- 'arrPage' => $arrPage,
- 'arrPaginator' => $arrPaginator,
- 'intNovelId' => $intNovelId,
- 'intPage' => $intPage,
- 'strOrder' => $strOrder,
- 'strPageCode' => 'chapters',
- 'intLimit' => $intLimit,
- 'strTitle' => $strTitle,
- 'strKeywords' => $strKeywords,
- 'strDescription' => $strDescription,
- ]);
-
-
- if ($boolIsMobile) {
- $strView = '';
- $this->generateGrm(1, $intNId . '-' . $strOrder . '-' . $intPage, 110);
- } else {
- $strView = 'pc/getNovelCatalog';
- $this->generateGrm(2, $intNId . '-' . $strOrder . '-' . $intPage, 110);
- }
-
- return $this->rending($strView);
- }
-
- /**
- * 小说-搜索
- *
- * @param Request $Request
- * @return void
- */
- public function getSearchNovel(Request $Request)
- {
- $boolIsMobile = $Request->param('boolIsMobile');
-
- $strSearchKeywords = (string)$Request->get('keyword');
- $intPage = (int)$Request->get('page', 1);
- $intLimit = 20;
-
- $strKey = sprintf('%s:PC:Novel:Search:%s:Page:%s:Limit:%s', $Request->DomainModel->d_domain, $strSearchKeywords, $intPage, $intLimit);
-
- if (empty($strSearchKeywords)) {
- return response('请输入搜索的关键字', 400);
- }
-
- $NovelModel = NovelModel::getInstance();
-
- $arrFilter = [
- '$or' => [
- ['n_name' => ['$regex' => $strSearchKeywords, '$options' => 'i']],
- ['n_author' => ['$regex' => $strSearchKeywords, '$options' => 'i']],
- ['n_category' => ['$regex' => $strSearchKeywords, '$options' => 'i']],
- ['n_description' => ['$regex' => $strSearchKeywords, '$options' => 'i']],
- ]
- ];
-
- $arrPage = $NovelModel->findPaginatedWithCache($arrFilter, $intPage, $intLimit, [], $strKey);
-
- $intButtonNum = 10;
-
-
- $strBaseUrl = app(NovelService::class)->getNovelSearchUrl($strSearchKeywords, '{page}');
- $arrPaginator = CusteomPage02::generate($intPage, $arrPage['total'], $intLimit, $strBaseUrl, $intButtonNum);
-
- // 更新值
- ConverterMovel::setVal([
- 'intPage' => $intPage,
- 'strSearchKeywords' => $strSearchKeywords,
-
- ]);
-
- $strTitleTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@TITLE');
- $strKeywordsTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@KEYWORDS');
- $strDescriptionTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@DESCRIPTION');
-
- $strTitle = ConverterMovel::convert($strTitleTemplate);
- $strKeywords = ConverterMovel::convert($strKeywordsTemplate);
- $strDescription = ConverterMovel::convert($strDescriptionTemplate);
-
- View::assign([
- 'arrPage' => $arrPage,
- 'arrPaginator' => $arrPaginator,
- 'strSearchKeywords' => $strSearchKeywords,
- 'intPage' => $intPage,
- 'intTotalPage' => $arrPage['pages'],
- 'strPageCode' => 'search',
- 'strTitle' => $strTitle,
- 'strKeywords' => $strKeywords,
- 'strDescription' => $strDescription,
- ]);
-
- $strView = $boolIsMobile ? '' : 'pc/getSearchNovel';
- $this->generateGrm(2, $strSearchKeywords . $intPage, 20);
- return $this->rending($strView);
- }
-
- /**
- * 小说章节-文章-自定义页面-列表
- *
- * @todo 第一版本不做
- * @param Request $Request
- * @param [type] $intCategoryId
- * @param integer $intPage
- * @return void
- */
- // public function getArticleList(Request $Request, $intCategoryId = null, $intPage = 1)
- // {
- // $boolIsMobile = $Request->param('boolIsMobile');
-
- // // 模拟数据
- // $arrNewsNovel = [
- // ['id' => 1, 'name' => '小说1', 'author' => '作者1'],
- // ['id' => 2, 'name' => '小说2', 'author' => '作者2'],
- // ['id' => 3, 'name' => '小说3', 'author' => '作者3'],
- // ['id' => 4, 'name' => '小说3', 'author' => '作者3'],
- // ['id' => 5, 'name' => '小说3', 'author' => '作者3'],
- // ['id' => 6, 'name' => '小说3', 'author' => '作者3'],
- // ['id' => 7, 'name' => '小说3', 'author' => '作者3'],
- // ['id' => 8, 'name' => '小说3', 'author' => '作者3'],
- // ];
-
- // View::assign([
- // 'arrNewsNovel' => $arrNewsNovel,
- // 'strPageCode' => 'article'
- // ]);
- // if ($boolIsMobile) {
- // return View::fetch();
- // } else {
- // return View::fetch('pc/getArticleList');
- // }
- // }
-
- /**
- * 小说章节-文章-自定义页面-详情
- * @todo 第一版本不做
- * @param Request $Request
- * @param [type] $intArticleId
- * @return void
- */
- // public function getArticleInfo(Request $Request, $intArticleId)
- // {
- // $boolIsMobile = $Request->param('boolIsMobile');
-
- // // 模拟数据
- // $arrNewsNovel = [
- // ['id' => 1, 'name' => '小说1', 'author' => '作者1'],
- // ['id' => 2, 'name' => '小说2', 'author' => '作者2'],
- // ['id' => 3, 'name' => '小说3', 'author' => '作者3'],
- // ['id' => 4, 'name' => '小说3', 'author' => '作者3'],
- // ['id' => 5, 'name' => '小说3', 'author' => '作者3'],
- // ['id' => 6, 'name' => '小说3', 'author' => '作者3'],
- // ['id' => 7, 'name' => '小说3', 'author' => '作者3'],
- // ['id' => 8, 'name' => '小说3', 'author' => '作者3'],
- // ];
-
- // View::assign([
- // 'arrNewsNovel' => $arrNewsNovel,
- // 'strPageCode' => 'article'
- // ]);
- // if ($boolIsMobile) {
- // return View::fetch();
- // } else {
- // return View::fetch('pc/getArticleInfo');
- // }
- // }
-}
diff --git a/code/app/home/controller/User.php b/code/app/home/controller/User.php
deleted file mode 100644
index ca1d199..0000000
--- a/code/app/home/controller/User.php
+++ /dev/null
@@ -1,102 +0,0 @@
-param('boolIsMobile');
-
- $strNovelUrlTemp = $Request->DomainModel->getFomartSubject('NOVEL_INFO_URL','',false);
- $strNovelChapterUrlTemp = $Request->DomainModel->getFomartSubject('CONTENT_INFO_URL','',false);
- $strSearchUrlTemp = $Request->DomainModel->getFomartSubject('SEARCH_INFO_URL','',false);
-
- $NovelModel = NovelModel::getInstance();
-
- // 推荐等级为9的完结 随机15个小说
- $intTTL = 24 * 3600;
- $strKey = sprintf('%s:ALL:USER:TUIJIAN:WANJIE:%s', $Request->DomainModel->d_domain, 8);
-
- $arrRecommendEndNovel = $NovelModel->getCommonNovelOnCache($strKey, $intTTL, 8, 0, "已完结");
-
- $strKey = sprintf('%s:PC:NOVEL:RANK:%s:SEX:%s', $Request->DomainModel->d_domain, 'monthly', 0);
- $arrMoonRankNovel = $NovelModel->getRankNovelOnCache($strKey, 5, 0, 'monthly');
-
- View::assign([
- 'arrRecommendEndNovel' => $arrRecommendEndNovel,
- 'arrMoonRankNovel' => $arrMoonRankNovel,
- 'strNovelUrlTemp' => $strNovelUrlTemp,
- 'strNovelChapterUrlTemp' => $strNovelChapterUrlTemp,
- 'strSearchUrlTemp' => $strSearchUrlTemp,
- ]);
-
- if ($boolIsMobile) {
- $strView = '';
- $this->generateGrm(1, 0, 20);
- } else {
- $strView = 'pc/user/index';
- $this->generateGrm(2, 0, 20);
- }
- return $this->rending($strView);
- }
-
- public function getBookShelf(Request $Request)
- {
-
- $boolIsMobile = $Request->param('boolIsMobile');
-
- $strNovelUrlTemp = $Request->DomainModel->getFomartSubject('NOVEL_INFO_URL','',false);
- $strNovelChapterUrlTemp = $Request->DomainModel->getFomartSubject('CONTENT_INFO_URL','',false);
- $strSearchUrlTemp = $Request->DomainModel->getFomartSubject('SEARCH_INFO_URL','',false);
-
- View::assign([
- 'strPageCode' => 'BookShelf',
- 'strNovelUrlTemp' => $strNovelUrlTemp,
- 'strNovelChapterUrlTemp' => $strNovelChapterUrlTemp,
- 'strSearchUrlTemp' => $strSearchUrlTemp,
- ]);
-
- if ($boolIsMobile) {
- $strView = '';
- $this->generateGrm(1, 0, 10);
- } else {
- $strView = 'pc/user/getBookShelf';
- $this->generateGrm(2, 0, 10);
- }
- return $this->rending($strView);
- }
-
- public function getHistory(Request $Request)
- {
-
- $boolIsMobile = $Request->param('boolIsMobile');
-
- $strNovelUrlTemp = $Request->DomainModel->getFomartSubject('NOVEL_INFO_URL','',false);
- $strNovelChapterUrlTemp = $Request->DomainModel->getFomartSubject('CONTENT_INFO_URL','',false);
- $strSearchUrlTemp = $Request->DomainModel->getFomartSubject('SEARCH_INFO_URL','',false);
-
- View::assign([
- 'strPageCode' => 'history',
- 'strNovelUrlTemp' => $strNovelUrlTemp,
- 'strNovelChapterUrlTemp' => $strNovelChapterUrlTemp,
- 'strSearchUrlTemp' => $strSearchUrlTemp,
- ]);
-
- if ($boolIsMobile) {
- $strView = '';
- $this->generateGrm(1, 0, 10);
- } else {
- $strView = 'pc/user/getHistory';
- $this->generateGrm(2, 0, 10);
- }
- return $this->rending($strView);
- }
-}
diff --git a/code/app/home/event.php b/code/app/home/event.php
deleted file mode 100644
index 4eff890..0000000
--- a/code/app/home/event.php
+++ /dev/null
@@ -1,5 +0,0 @@
-initCfg();
- return $next($request);
- },
-
-];
diff --git a/code/app/home/view/default/Index/index.html b/code/app/home/view/default/Index/index.html
deleted file mode 100644
index d10d6ff..0000000
--- a/code/app/home/view/default/Index/index.html
+++ /dev/null
@@ -1,120 +0,0 @@
-{extend name="baseH5" /}
-{block name="title"}{site:replace code="INDEX@INDEX@TITLE"}{/block}
-{block name="keywords"}{site:replace code="INDEX@INDEX@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="INDEX@INDEX@DESCRIPTION"}{/block}
-{block name="head"}
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-{site:grm page_code="h5_index" diff="0" num="100" g_key="arrGrm" /}
-
-{$DomainModel->d_index_description}
-
-
封面推荐
-
- {novel:list count="8" sort_type="tuijian" d_key="d_key" d_val="Novel" p_val="page_data" cache_life="86400"}
-
- -
- {$arrGrm[$d_key]|raw}
-
-
-
-
- -
-
-
作者:{$Novel.n_author}
- {$Novel.n_description}
-
-
- {/novel:list}
-
-
-
-
-
-{novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
-
-
- {$strCategoryName}
- 更多..
-
-
-
-
-
-
- {novel:list count="1" n_category="$strCategoryPinyin" sort_type="news" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- -
-
- {$arrGrm[$d_key+8+10*$start]|raw}
-
-

- -
-
-
作者:{$Novel.n_author}
- {$Novel.n_description}
-
- {/novel:list}
-
-
- {novel:list count="9" n_category="$strCategoryPinyin" sort_type="news" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- -
- {$arrGrm[$d_key+8+10*$start]|raw}
- {$Novel.n_name}{$Novel.n_author}
-
- {/novel:list}
-
-
-
-
-
-{/novel:category}
-
-{/block}
-
-{block name="customize"}
-
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Novel/getArticleInfo.html b/code/app/home/view/default/Novel/getArticleInfo.html
deleted file mode 100644
index 990ea64..0000000
--- a/code/app/home/view/default/Novel/getArticleInfo.html
+++ /dev/null
@@ -1,18 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-article.........
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Novel/getArticleList.html b/code/app/home/view/default/Novel/getArticleList.html
deleted file mode 100644
index 272e206..0000000
--- a/code/app/home/view/default/Novel/getArticleList.html
+++ /dev/null
@@ -1,46 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-
-
-
-
-
深度解说列表
-
-
-
- {foreach $arrNewsNovel as $key => $vo}
- {include file="Public/articleList" /}
-
- {/foreach}
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Novel/getLibrary.html b/code/app/home/view/default/Novel/getLibrary.html
deleted file mode 100644
index 07f6454..0000000
--- a/code/app/home/view/default/Novel/getLibrary.html
+++ /dev/null
@@ -1,178 +0,0 @@
-{extend name="baseH5" /}
-
-{block name="title"}{site:replace code="NOVEL@GETLIBRARY@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETLIBRARY@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETLIBRARY@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-
-
-{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
-
-{else}
-
-
-{/if}
-
-
-{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
-
-{else}
-
-{/if}
-
-{/block}
-
-{block name="head-js"}{/block}
-{block name='nav-active-class'}home{/block}
-{block name="body-class"}novel_home{/block}
-
-{block name="logo-html"}
-
- {$DomainModel->d_name}-{$Request.route.strCategory}{$Request.route.strOrder}{$Request.route.strStatus}免费阅读
-
-{/block}
-
-{block name="nav-html"}{/block}
-
-{block name="main"}
-
-{novel:pagerexp page="$Request.get.page" limit="30"
-n_category="$Request.route.strCategory"
-sort_type="$Request.route.strOrder"
-n_status="$Request.route.strStatus" d_key="d_key"
-d_key="d_key"
-d_val="Novel" n_num="total"
-button_num="5" cache_life="86400" func="generateCategoryPager" export_name="resData" /}
-
-{site:grm page_code="h5_novel_library" diff="$resData.p_data.page" num="40" g_key="arrGrm" /}
-
-{$strDescription??''}
-
-
-
-
-
-
-
-
更新列表
-
- {foreach $resData.data as $key=>$Novel}
-
- -
- [{$Novel.n_category}]
-
- {$arrGrm[$key]|raw}
-
- {$Novel.n_name}
-
-
- {$Novel.n_author}
- {:date('m-d')}
-
- {/foreach}
-
-
-
-
-
- {volist name="resData.p_data.pager" id="vo" key="k"}
- {switch $vo.label}
- {case value="上一页"}
- {if $resData.p_data.page == 1}
-
«
- {else}
-
«
- {/if}
- {/case}
- {case value="下一页"}
- {if $resData.p_data.page >= $resData.p_data.total}
-
»
- {else}
-
»
- {/if}
- {/case}
- {default /}
- {if preg_match('/^\d+$/', $vo.label)}
-
{$vo.label}
- {/if}
- {/switch}
- {/volist}
-
-
-
-
- 封面推荐
-
-
- {novel:list count="8" sort_type="tuijian" d_key="d_key" d_val="Novel" p_val="page_data" cache_life="86400"}
-
- -
- {$arrGrm[$d_key+30]|raw}
-
-
-
-
- -
-
-
作者:{$Novel.n_author}
- {$Novel.n_description}
-
-
- {/novel:list}
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Novel/getNovelCatalog.html b/code/app/home/view/default/Novel/getNovelCatalog.html
deleted file mode 100644
index 6577c37..0000000
--- a/code/app/home/view/default/Novel/getNovelCatalog.html
+++ /dev/null
@@ -1,268 +0,0 @@
-{extend name="baseH5" /}
-
-{block name="title"}{site:replace code="NOVEL@GETNOVELCATALOG@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELCATALOG@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELCATALOG@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-{novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /}
-{site:grm page_code="h5_novel_catalog " diff="$Request.url" num="120" g_key="arrGrm" /}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-js"}
-{/block}
-
-{block name="body-class"}novel_info{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="nav-html"}
-
-
-
-
-{/block}
-
-{block name="main"}
-
-{chapter:pagerexp page="$Request.route.intPage" limit="100" n_id="$Request.route.intNovelId" d_key="d_key" d_val="chapter"
-cache_life="86400" button_num="3" sort_type="$Request.route.strOrder" func="generateChapterPager" export_name="resData" /}
-
-{$arrNovel['n_name']}最新章节 - {$arrNovel['n_author']} - {$DomainModel->d_name}
-
-
-
-
![{$arrNovel['n_name'] ?? ''}小说封面 - {$arrNovel.n_author}最新章节](/static/img/default.jpg)
-
-
-
-
-
-
-
- {$arrNovel.n_description}
-
-
-章节列表(第{$Request.route.intPage}页)
- {if $Request.route.strOrder == 'zheng'}
- 点击切换倒序
- {else}
- 点击切换正序
- {/if}
-
-
-
-
- {include file="public/allChapterPage" start="1"/}
-
-
- {foreach $resData.data as $key=>$Chapter}
- -
- {$arrGrm[$key]|raw}
- {$Chapter.c_name}
-
-
- {/foreach}
-
-
- {include file="public/allChapterPage" /}
-
-
-
-
-
完结推荐
-
- {novel:list count="6" n_category="$arrNovel.n_category_pinyin" n_status="wanjie" d_key="d_key" d_val="Novel" p_val="page_data" cache_life="86400"}
-
- -
- {$arrGrm[$d_key+110]|raw}
-

- -
-
-
作者:{$Novel.n_author}
- {$Novel.n_description}
-
-
- {/novel:list}
-
-
-
-
-
-
相邻小说
-
-
- {$arrNovel.strFocus ?? ""} 。看小说就来{$DomainModel->d_name} {$DomainModel->d_domain}...
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"}
-
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Novel/getNovelChapter.html b/code/app/home/view/default/Novel/getNovelChapter.html
deleted file mode 100644
index 8c08d9d..0000000
--- a/code/app/home/view/default/Novel/getNovelChapter.html
+++ /dev/null
@@ -1,227 +0,0 @@
-{extend name="baseH5" /}
-
-{block name="title"}{site:replace code="NOVEL@GETNOVELCHAPTER@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELCHAPTER@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELCHAPTER@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-{site:grm page_code="h5_novel_chapter" diff="$Request.url" num="20" g_key="arrGrm" /}
-
-{novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /}
-{chapter:info n_id="$Request.route.intNovelId" c_sort_num="$Request.route.intChapterSort"
-c_page="$Request.route.intChapterPage" c_key="arrChapter" /}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-js"}
-
-{/block}
-
-{block name="body-class"}jjdfjkozd{/block}
-{block name="body-id"}kkasdfei{/block}
-
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="nav-html"}
-
-
-{/block}
-
-{block name="main"}
-{$arrNovel['n_name']}最新章节 - {$arrChapter.c_name ?? ''}
-
-
-
关灯
-
护眼
-
- 字体:
- 大
- 中
- 小
-
-
-
-
{$arrNovel.n_name}(第{$arrChapter.c_sort_num}页)
-
- {$arrGrm[1]|raw}
-
- {if $arrChapter.c_sort_num == 1}
- - 上一页
- {elseif $arrChapter['pre_chapter'] && $arrChapter['pre_chapter']['c_sort_num']}
- - 上一页
-
- {/if}
- - 章节目录
- {if $arrChapter.next_chapter && $arrChapter.next_chapter.c_sort_num}
- - 下一页
-
- {/if}
-
-
-
- {$arrGrm[2]|raw}
-
- {$arrGrm[3]|raw}
-
- {$arrGrm[4]|raw}
-
-
- {$arrGrm[5]|raw}
-
- {if $arrChapter.c_sort_num == 1}
- - 上一页
- {elseif $arrChapter['pre_chapter'] && $arrChapter['pre_chapter']['c_sort_num']}
- - 上一页
-
- {/if}
- - 章节目录
- {if $arrChapter.next_chapter && $arrChapter.next_chapter.c_sort_num}
- - 下一页
-
- {/if}
-
- {$arrGrm[6]|raw}
-
-
-
-
-
完结推荐
-
- {novel:list count="6" n_category="$arrNovel.n_category_pinyin" n_status="wanjie" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
-
- -
- {$arrGrm[$d_key+6]|raw}
-

- -
-
-
作者:{$Novel.n_author}
- {$Novel.n_description}
-
-
- {/novel:list}
-
-
-
-
-
相邻小说
-
-
- {$arrNovel.strFocus ?? ""} 。看小说就来{$DomainModel->d_name} {$DomainModel->d_domain}...
-
-
-
-{/block}
-
-{block name="customize"}
-
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Novel/getNovelInfo.html b/code/app/home/view/default/Novel/getNovelInfo.html
deleted file mode 100644
index 91e9ce2..0000000
--- a/code/app/home/view/default/Novel/getNovelInfo.html
+++ /dev/null
@@ -1,258 +0,0 @@
-$Novel.n_id{extend name="baseH5" /}
-{block name="title"}{site:replace code="NOVEL@GETNOVELINFO@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELINFO@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELINFO@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-{if $Request.route.intNovelId}
-{novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /}
-{else}
-{novel:info n_id="$DomainModel->info_id" n_key="arrNovel" n_forge_id="0" /}
-{/if}
-
-{site:grm page_code="h5_novel_info" diff="$arrNovel.n_id" num="120" g_key="arrGrm" /}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-js"}
-{/block}
-
-{block name="body-class"}novel_info{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="nav-html"}
-
-
-{/block}
-
-{block name="main"}
-{$arrNovel['n_name']}最新章节 - {$arrNovel['n_author']} - {$DomainModel->d_name}
-
-
-
-
![{$arrNovel['n_name'] ?? ''}小说封面 - {$arrNovel.n_author}最新章节](/static/img/default.jpg)
-
-
-
-
-
-
-
- {$arrNovel.n_description}
-
-
-最新章节
-
-
- {chapter:list count="10" sort_type="dao" n_id="$arrNovel.n_id" d_key="d_key" d_val="Chapter" cache_life="86400"}
- -
- {$arrGrm[$d_key]|raw}
- {$Chapter.c_name}
-
- {/chapter:list}
-
-
查看更多章节...
-
-
-章节列表
-
-
- {chapter:list count="100" sort_type="zheng" n_id="$arrNovel.n_id" d_key="d_key" d_val="Chapter" cache_life="86400"}
- -
- {$arrGrm[$d_key+10]|raw}
- {$Chapter.c_name}
-
- {/chapter:list}
-
-
查看更多章节...
-
-
-
-
完结推荐
-
- {novel:list count="6" n_category="$arrNovel.n_category_pinyin" n_status="wanjie" d_key="d_key" d_val="Novel" p_val="page_data" cache_life="86400"}
-
- -
- {$arrGrm[$d_key+110]|raw}
-

- -
-
-
作者:{$Novel.n_author}
- {$Novel.n_description}
-
-
- {/novel:list}
-
-
-
-
-
相邻小说
-
-
- {$arrNovel.strFocus ?? ""} 。看小说就来{$DomainModel->d_name} {$DomainModel->d_domain}...
-
-
-
-
-
-{/block}
-
-{block name="customize"}
-
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Novel/getSearchNovel.html b/code/app/home/view/default/Novel/getSearchNovel.html
deleted file mode 100644
index 1c6d512..0000000
--- a/code/app/home/view/default/Novel/getSearchNovel.html
+++ /dev/null
@@ -1,119 +0,0 @@
-{extend name="baseH5" /}
-{block name="title"}{site:replace code="NOVEL@GETSEARCHNOVEL@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETSEARCHNOVEL@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETSEARCHNOVEL@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name='nav-active-class'}home{/block}
-{block name="body-class"}novel_so novel_search_page{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-{novel:pagerexp page="$Request.get.page" limit="30"
-key="$Request.get.keyword"
-d_key="d_key"
-d_val="Novel"
-p_val="page_data" button_num="10" cache_life="86400" func="generateSearchPager" export_name="resData" /}
-
-{site:grm page_code="h5_novel_search" diff="$Request.url" num="30" g_key="arrGrm" /}
-
-
-
{$Request.get.keyword}搜索结果 - {$DomainModel->d_name} 第{$resData.p_data.page}页
- {if $resData.p_data.total < 1}
没有相关数据
- {else}
-
-
- {foreach $resData.data as $key=>$Novel}
-
- -
- {$arrGrm[$key]|raw}
-
-
-
-
- -
-
-
作者:{$Novel.n_author}
- {$Novel.n_description}
-
-
- {/foreach}
-
- {/if}
-
-
-
-
-
- {volist name="$resData.p_data.pager" id="vo" key="k"}
- {switch $vo.label}
- {case value="上一页"}
- {if $resData.p_data.page == 1}
-
«
- {else}
-
«
- {/if}
- {/case}
- {case value="下一页"}
- {if $resData.p_data.page >= $resData.p_data.total}
-
»
- {else}
-
»
- {/if}
- {/case}
- {default /}
- {if preg_match('/^\d+$/', $vo.label)}
-
{$vo.label}
- {/if}
- {/switch}
- {/volist}
-
-
-
-{/block}
-
-{block name="customize"}
-
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/adBanner.html b/code/app/home/view/default/Pc/Public/adBanner.html
deleted file mode 100644
index bd8e696..0000000
--- a/code/app/home/view/default/Pc/Public/adBanner.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
diff --git a/code/app/home/view/default/Pc/Public/allChapterPage.html b/code/app/home/view/default/Pc/Public/allChapterPage.html
deleted file mode 100644
index ce3086b..0000000
--- a/code/app/home/view/default/Pc/Public/allChapterPage.html
+++ /dev/null
@@ -1,35 +0,0 @@
-{if !empty($resData.p_data.pager)}
-
- {volist name="$resData.p_data.pager" id="item"}
- {eq name="item.type" value="prev"}
-
- {$item.label}
-
- {/eq}
- {/volist}
-
-
-
- {volist name="$resData.p_data.pager" id="item"}
- {eq name="item.type" value="next"}
-
- {$item.label}
-
- {/eq}
- {/volist}
-
-{/if}
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/articleList.html b/code/app/home/view/default/Pc/Public/articleList.html
deleted file mode 100644
index 3a6a22b..0000000
--- a/code/app/home/view/default/Pc/Public/articleList.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/chapterTableAll.html b/code/app/home/view/default/Pc/Public/chapterTableAll.html
deleted file mode 100644
index 2fc1fc2..0000000
--- a/code/app/home/view/default/Pc/Public/chapterTableAll.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
- 01 天龙问世
-
-
- 02 沧武的小霸王
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/endNovelList.html b/code/app/home/view/default/Pc/Public/endNovelList.html
deleted file mode 100644
index cb851c3..0000000
--- a/code/app/home/view/default/Pc/Public/endNovelList.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/footer.html b/code/app/home/view/default/Pc/Public/footer.html
deleted file mode 100644
index adc12bf..0000000
--- a/code/app/home/view/default/Pc/Public/footer.html
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/historyNovelList.html b/code/app/home/view/default/Pc/Public/historyNovelList.html
deleted file mode 100644
index 59a94b1..0000000
--- a/code/app/home/view/default/Pc/Public/historyNovelList.html
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
- |
-
- 我真是一条龙
- |
-
- 老读者必看公告!!!
- |
-
- 兔子很淡定
- |
- 3天前 |
-
- 已完结 |
-
- 阅读
- 删除
- |
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/hostListImg.html b/code/app/home/view/default/Pc/Public/hostListImg.html
deleted file mode 100644
index 6117718..0000000
--- a/code/app/home/view/default/Pc/Public/hostListImg.html
+++ /dev/null
@@ -1,15 +0,0 @@
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/hostListText.html b/code/app/home/view/default/Pc/Public/hostListText.html
deleted file mode 100644
index abaaf6e..0000000
--- a/code/app/home/view/default/Pc/Public/hostListText.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/indexBoyNewsList.html b/code/app/home/view/default/Pc/Public/indexBoyNewsList.html
deleted file mode 100644
index ca8cbc1..0000000
--- a/code/app/home/view/default/Pc/Public/indexBoyNewsList.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
美绿哔哔
-
武侠仙侠
-
-
-
-
[已签约实体待上市]【天生坏种x清冷校花】【大学校园、男追女、协议情侣、强制爱、破镜重圆】黎幸在整个西京大学都很有名。
- 高考状元,够美,够穷。这样的人,外貌不是恩赐,是原罪。楼崇,出生即登上金字塔最顶层的存在优越家世,顶级皮囊但却是个十足十的人渣。
- ——这样两个毫无交集的人,某天却被人撞见楼崇的阿斯顿马丁车内黎幸被单手抱起跨坐在腿上,后背抵着方向盘车窗光影交错,男人冷白精致的侧脸清晰可见,扣着她的手腕,亲自教她怎么扯开自己的领结。
- —— “协议女友,知道什么意思吗?” “意思是牵手,接吻,拥抱,上床。” “以及,爱上我。” “一步不能少。”—— “玻璃焰,玻璃高温产生的火焰,银蓝色,很美。”
- 本站提示:各位书友要是觉得《玻璃焰》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/indexBoyNewsOne.html b/code/app/home/view/default/Pc/Public/indexBoyNewsOne.html
deleted file mode 100644
index 4d7860e..0000000
--- a/code/app/home/view/default/Pc/Public/indexBoyNewsOne.html
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
作者:不见仙踪
-
分类:武侠仙侠
-
字数:24.20万字+
-
进度:已完结
-
总点击:0
-
-
【下本开《分手后四个鬼攻同时找上我》嗷~】 大二上学期,宣从南被一个温柔至极的男人追求;大二下学期,宣从南和沈迁在一起。
- 两个人谈了一年恋爱,宣从南发现,沈迁照常温柔,但他却常常把这样的话挂在嘴边: “不要笑。” “安静一点。” “不要太闹腾。” “眼里不要有温度。” “这样才像他。” 宣从南:……哦。
- 宣从南走了,潇洒果决,晚上却在路边捡到一个看起来落魄至极的男人。他耷拉着眉眼,带口罩,安静地坐在花坛边,似乎是在晒月光。 这人倒是很安静,还不笑,更不闹腾,眼里也没有温度。
- 宣从南把人捡回家了。他发现,这个名叫顾拾的男人竟然是娱乐圈里的顶流,只不过他不太关注娱乐圈,这才错误地把拥有千万粉丝的人捡回了家。
- 宣从南还发现,顾拾虽然过分冷淡,但他打直球说能不能喜欢我;顾拾虽然安静不闹腾,但他打直球说能不能抱抱我;顾拾虽然眼睛里没什么温度,但他打直球说能不能做…… 宣从南:这就是顶流吗?
- “同居”段时间,两人顺理成章地谈恋爱。 又同居段时间,宣从南忽而得知顾拾就是沈迁爱而不得的白月光。 宣从南:……命运啊。
- 为了避免尴尬,他收拾行李又打算跑,刚走到门口却只听一道开门声,顾拾裹挟着外面的寒气进来,轻轻带上门。 宣从南:…… 顾拾冷淡的目光从上到下打量他,最后落在行李箱上。 “去哪儿?”他问。
- 宣从南捏紧行李杆,正欲说话,顾拾又道: “你想甩了我?” …… 这天晚上有狗仔拍到顾拾进了一间出租屋。 除了顾拾,窗户玻璃上还映出另外一道男性身影,他手边还有个行李箱。
- 紧接着,一向喜怒不形于色的顾拾猛地推开行李箱,拽起另一人的手腕去了卧室。 一夜没出来。 【阅读指南】: *1V1,HE,甜文。 *攻非常非常非常爱受,非常非常非常宠受
- *攻能直球绿茶也能偏执疯批,属性复杂,天使们直接看文叭 *有打脸剧情 *无原型,勿代入现实。我写文为了快乐,也只想让读者快乐~ *感谢支持正版,给大家鞠躬啦~
- ★下本《分手后四个鬼攻同时找上我》求收藏~ 宴祀亭是个小道士,山生山长,没见过外面的天,最大的雄心壮志是杀死鬼王。 但他怕鬼,还花心。 下山后进城,他在酒吧泡了一个大学教授做男朋友。
- 教授克制古板,一副性冷淡的模样。 但他“暴力”且沉沦地教会了宴祀亭在床上的108种姿势。 每天晚上宴祀亭都被哔的“身心俱散”。 随着感情渐深,教授带宴祀亭回家见父母。 他家里有鬼,好多鬼。
- 那些鬼躲在门外、趴在床底听他和教授...... 宴祀亭瑟瑟发抖,教授却像没事人,依然一次比一次深入。 宴祀亭:师父救命——
- 日复一日,教授变得愈发过分。他中午要抱宴祀亭亲昵,下午要抱宴祀亭厮磨,晚上要抱宴祀亭深入交流,非常不节制。 最后他还设门禁时间限制宴祀亭的出行,控制欲极强。 宴祀亭受不了,把人踹了。
- 他谈了第二个男朋友。 但为什么温柔先生最后因他变得野蛮,各种道具都上场; 绅士先生因他变成恶棍,让他不准离开自己的视线; 禁欲先生因他变得纵荡,永远都要按着他驰骋......
- 宴祀亭:师父我遇到了好多变态,我要回山立刻马上! 身心遭受“严重摧残”的宴祀亭决定封心锁爱,这辈子都不要泡男人了,要去完成自己的雄心壮志——杀死鬼王。
- 紧接着被甩的教授将他堵在家门口,唇角带笑声含魅:“不是要杀我吗?我来了。” 晦暗夜色下,教授身后又慢慢浮现出温柔先生、绅士先生、禁欲先生的身影,他们都在盯着宴祀亭。
- 教授柔声道:“你是要我们一起来,还是一个一个来呢。” 宴祀亭抖如筛糠无可逃脱地被他们推进了卧室。恶鬼们商量谁先来,最后愉快地决定一起。 “不要,救命啊啊啊啊啊啊啊啊啊——” *切片攻
- *所有躲门外趴床底听床戏的,都是攻的切片 ★求预收《不是人也能攻我?》收藏~ 司徒禁肩宽窄腰身材好,胸肌饱满腿长,在男同界是被许多人觊觎的优质1。
- 有人找司徒禁拍钙片,身为直男的司徒禁果断拒绝。 等再醒来,司徒禁发现他穿到了异世界。 这里到处是妖魔鬼怪。
- 司徒禁有个极倒霉的倒霉体质,喝凉水塞牙缝,吃东西噎喉咙,睡觉能窒息。再又一次平地摔跤后,司徒禁气得破口大骂。 那些神经病又来了。 玛德,这次还敢撕他衣服!
- 这个世界不止他一个倒霉蛋,还有ABCDE等男人进来了。 老乡见老乡两眼泪汪汪,司徒禁和大家互相扶持,把这群想上他的变态杀得四处逃窜。 然后有一天,司徒禁看见男人 A 帮鬼撕碎了他的上衣。
- 司徒禁:? 男人B帮鬼扯烂了他的裤子。 司徒禁:?? 男人C帮鬼拽掉了他的衬衫夹。 司徒禁:??? 混乱中,谁摸了他的胸肌! 谁捏了他的屁股!! 谁掰开了他的腿!!!
- 司徒禁冷笑:想攻我的千千万,你算哪块小饼干?! ABCDE 得逞,鬼得逞,怪物藤蔓得手,触手得逞...... 被迫野战后司徒禁躺在草地里抽事后烟,沉思:是个人都能攻我?不是人也能攻我?
- 而他不知道,他进入的异世界其实是一个系列视频,无数观众坐在电视机前,每天就为了看他闯关。 司徒禁:什么关?“床”关吗? *切片攻,每个都为了受打得头破血流,甚至想杀了自己的分身
- *受极度理智冷静大胸美人 *攻疯得一批,每个切片都想独占囚禁受 *直播镜头前的观众只能看正经闯关,其他的看不到,花钱做榜一也没用
- 本站提示:各位书友要是觉得《渣攻的白月光总对我打直球》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/indexBoyRankList.html b/code/app/home/view/default/Pc/Public/indexBoyRankList.html
deleted file mode 100644
index 2009dd2..0000000
--- a/code/app/home/view/default/Pc/Public/indexBoyRankList.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
- {$key+=1}
-
-
-
-
-
-
-
作者:猩猩崛起
-
类别:武侠仙侠
-
小工作室的微电影导演,重生平行世界!踏上娱乐征途!
- 本站提示:各位书友要是觉得《娱乐宗师》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/indexBoyRankOne.html b/code/app/home/view/default/Pc/Public/indexBoyRankOne.html
deleted file mode 100644
index 458de74..0000000
--- a/code/app/home/view/default/Pc/Public/indexBoyRankOne.html
+++ /dev/null
@@ -1,26 +0,0 @@
-
- 1
-
-
-
-
-
-
-
作者:梧桐树下wt
-
类别:武侠仙侠
-
【本文将会于2023年9月30日星期六入V,谢谢支持!】 【求投票——《成长·逆袭》主题征文——作品投票——鱼跃龙门后来居上】
- 【每5K营养液加更一章】 作为刚升组没多久,在华国内难得可以跳跃演绎两手抓的男子单人花滑选手,郁辰被队里的教练们给予极大的厚望。
- 并且整个教练团也在想尽各种方法教导这位,冰上冰下两个样子,经常会躲起来不见人的闷葫芦。 “到底有什么办法,能让那家伙在冰下的时候,有上冰那会百分之一的灵气啊!”
- 只有郁辰他本人知道——他无论什么时候,都爱惨了艺术与冰面结合起来的样子。 ——只是台下之后,不会表达而已。
- 一切的变动,从他没忍住在莫斯科赛后偷瞒着教练,去看了一场芭蕾舞舞台剧之后。 追着一见钟情的男孩来到异国,并且努力学了中文的佐切卡:你好,郁!能我你拥抱?
- 沉思了好久,才理清楚他语法顺序的郁辰:你学顺了中文再和我说话吧。 佐切卡(惊喜):那就是可以了!
- 于是某位男单运动员就被纤细高挑练跳舞的熊抱住了一个下午,跑都跑不掉。 来自莫斯科的芭蕾舞者X略显自闭的花滑选手 1、故事里面所有人物故事,经历都没有原型。
- 2、作者对于花滑的认知还没有到完全专业水平,但是所有技术动作描写,比赛规则描述,都有资料支持。
- 3、如果有技术问题需要讨论可以随时留评,我看到后会回复的。看了每章词汇解释还是不懂的话也可以留评,我会想办法换一种解释试试看的(作者是真想教会你们滑冰系列)。
- 4、最重要一点——无论怎么样的情感下,都请不要轻易怀疑运动员对该项目的热爱。 5、停在‘4’好像不太好,所以写了个‘5’。
- 本站提示:各位书友要是觉得《捻转步舞曲[花滑]》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/indexNewsUpdateList.html b/code/app/home/view/default/Pc/Public/indexNewsUpdateList.html
deleted file mode 100644
index 1b055eb..0000000
--- a/code/app/home/view/default/Pc/Public/indexNewsUpdateList.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/shuKuNovelList.html b/code/app/home/view/default/Pc/Public/shuKuNovelList.html
deleted file mode 100644
index 1698493..0000000
--- a/code/app/home/view/default/Pc/Public/shuKuNovelList.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
- 作者:鱼昆子
- 分类:男生
- 状态:已完结
- 总字数:43.80万字+
-
-
- 标签:
-
-
-
最近更新:219 桃花酿
-
-
正文已完结,福利番外待续! 预收《癫疯人生有多爽你知道吗》《当家主母的咸鱼美食日常》戳专栏求收藏。 ——————— 温仲夏身为百万粉丝美食博主,一朝穿越。
- 好消息,穿成尚书千金。 坏消息,父兄获罪被贬到千里之外。 身边只有一个柔弱的嫂嫂和年幼的小弟。 开局就是一个交不上房租,大雪天几乎要流落街头的惨境。 温仲夏来不及哭,撸起袖子就是干。
- 红烧肉火锅烧烤爆米花卷饼卤肉奶茶小蛋糕…… 她就不信这些东京人都不爱吃。 不成的话,她还有麻辣烫烤鸭炸鸡酸辣粉炸酱面汤圆大馄饨…… 一不小心,落魄千金混成东京知名女掌柜。 …… 小剧场:
- 一众贵女听闻温仲夏当街叫卖吃食后,纷纷对她这种抛头露面的行为狠狠批判。 几天后,她们却在温仲夏的食店门口不期而遇。 “你怎么来了,不会是来买蛋挞的吧?” “难道你也是?”
- “我可不是,我还要买奶油蛋糕呢。” 说好的不齿与之为伍呢? 这时店内传来吆喝:“数量有限,先到先得。” 贵女们忙不迭地往里冲。 “我先来的!” ①本文主线是美食和日常。
- ②背景主要参考宋朝,不严谨的地方请见谅。
- 本站提示:各位书友要是觉得《落魄千金美食发家日常》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!
-
-
-
更新时间:2025-03-20 23:59
-
立即阅读
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/Public/swiperListImg.html b/code/app/home/view/default/Pc/Public/swiperListImg.html
deleted file mode 100644
index b0b9b0c..0000000
--- a/code/app/home/view/default/Pc/Public/swiperListImg.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/code/app/home/view/default/Pc/Public/swiperListText.html b/code/app/home/view/default/Pc/Public/swiperListText.html
deleted file mode 100644
index 620556b..0000000
--- a/code/app/home/view/default/Pc/Public/swiperListText.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- 1
- 落魄千金美食发家日常
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/User/getBookShelf.html b/code/app/home/view/default/Pc/User/getBookShelf.html
deleted file mode 100644
index 4de16d1..0000000
--- a/code/app/home/view/default/Pc/User/getBookShelf.html
+++ /dev/null
@@ -1,49 +0,0 @@
-{extend name="basePc" /}
-{block name="title"}我的书架{/block}
-{block name="keywords"}我的书架{/block}
-{block name="description"}我的书架{/block}
-{block name="head"}
-
-
-
-
-
-
-
-{block name="head-js"}{/block}
-
-
-{block name="body-class"}novel_home{/block}
-
-{block name="main"}
-
-
-
-
-{/block}
-
-{block name="customize"}
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/User/getHistory.html b/code/app/home/view/default/Pc/User/getHistory.html
deleted file mode 100644
index 3384ec2..0000000
--- a/code/app/home/view/default/Pc/User/getHistory.html
+++ /dev/null
@@ -1,49 +0,0 @@
-{extend name="basePc" /}
-{block name="title"}我的阅读记录{/block}
-{block name="keywords"}我的阅读记录{/block}
-{block name="description"}我的阅读记录{/block}
-{block name="head"}
-
-
-
-
-
-
-
-{block name="head-js"}{/block}
-
-
-{block name="body-class"}novel_home{/block}
-
-{block name="main"}
-
-
-
-
-{/block}
-
-{block name="customize"}
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/getArticleInfo.html b/code/app/home/view/default/Pc/getArticleInfo.html
deleted file mode 100644
index 5c10385..0000000
--- a/code/app/home/view/default/Pc/getArticleInfo.html
+++ /dev/null
@@ -1,14 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-
-{block name="main"}
-
-article.......
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/getArticleList.html b/code/app/home/view/default/Pc/getArticleList.html
deleted file mode 100644
index 0c385c6..0000000
--- a/code/app/home/view/default/Pc/getArticleList.html
+++ /dev/null
@@ -1,88 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
-
-
-
-
-
-
-
-
- -
-
- - 分类
- - 书名
- - 描述
- - 作者
- - 更新时间
-
-
- {foreach $arrNewsNovel as $key=>$Novel}
- {include file="Pc/Public/articleList" /}
- {/foreach}
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/getLibrary.html b/code/app/home/view/default/Pc/getLibrary.html
deleted file mode 100644
index 201e5b0..0000000
--- a/code/app/home/view/default/Pc/getLibrary.html
+++ /dev/null
@@ -1,204 +0,0 @@
-{extend name="basePc" /}
-{block name="title"}{site:replace code="NOVEL@GETLIBRARY@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETLIBRARY@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETLIBRARY@DESCRIPTION"}{/block}
-{block name="head"}
-
-
-
-{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
-
-{else}
-
-
-{/if}
-
-
-{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
-
-{else}
-
-{/if}
-
-{/block}
-{block name="head-js"}{/block}
-
-{block name="head-css"}
-
-{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
-
-{else}
-
-{/if}
-
-{/block}
-
-{block name='nav-active-class'}home{/block}
-
-
-{block name="main"}
-
-{novel:pagerexp page="$Request.get.page" limit="30"
-n_category="$Request.route.strCategory"
-sort_type="$Request.route.strOrder"
-n_status="$Request.route.strStatus" d_key="d_key"
-d_key="d_key"
-d_val="Novel" n_num="total"
-button_num="10" cache_life="86400" func="generateCategoryPager" export_name="resData" /}
-
-{site:grm page_code="pc_novel_library" diff="$resData.p_data.page" num="70" g_key="arrGrm" /}
-
-
-
-
-
- {novel:list count="6" sort_type="tuijian" d_key="d_key" d_val="Novel" p_val="page_data" cache_life="86400"}
-
- {/novel:list}
-
-
-
-
- 分类:
- 不限
-
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
- {$strCategoryName}
-
- {/novel:category}
-
-
-
-
排序:
- {novel:sort d_key="key" d_val="strSortName"}
- {$strSortName}
- {/novel:sort}
-
-
状态:
- {novel:status d_key="key" d_val="strStatusName"}
- {$strStatusName}
- {/novel:status}
-
-
-
-
-
-
-
最新入库小说
-
- {novel:list count="30" sort_type="news" d_key="d_key" d_val="Novel" p_val="page_data"
- cache_life="86400"}
- -
- [{$Novel->n_category ?? ''}
-
- {$arrGrm[$d_key+6]|raw}
- {$Novel->n_name}
- {$Novel->n_author}
-
- {/novel:list}
-
-
-
-
-
-
-
- {volist name="resData.p_data.pager" id="vo" key="k"}
- {switch $vo.label}
- {case value="上一页"}
- {if $resData.p_data.page == 1}
-
«
- {else}
-
«
- {/if}
- {/case}
- {case value="下一页"}
- {if $resData.p_data.page >= $resData.p_data.total}
-
»
- {else}
-
»
- {/if}
- {/case}
- {case value="..."}
-
...
- {/case}
- {default /}
- {if preg_match('/^\d+$/', $vo.label)}
-
{$vo.label}
- {/if}
- {/switch}
- {/volist}
-
-
-
-
-
-
-{/block}
-
-{block name="customize"}
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/getNovelCatalog.html b/code/app/home/view/default/Pc/getNovelCatalog.html
deleted file mode 100644
index 2fbcbeb..0000000
--- a/code/app/home/view/default/Pc/getNovelCatalog.html
+++ /dev/null
@@ -1,236 +0,0 @@
-{extend name="basePc" /}
-
-{block name="title"}{site:replace code="NOVEL@GETNOVELCATALOG@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELCATALOG@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELCATALOG@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-{novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /}
-{site:grm page_code="pc_novel_catalog" diff="$Request.url" num="120" g_key="arrGrm" /}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-css"}
-
-{/block}
-{block name="logo-html"}
-
-{/block}
-
-{block name="head-js"}
-{/block}
-
-{block name="body-class"}novel_info{/block}
-
-{block name="main"}
-
-{chapter:pagerexp page="$Request.route.intPage" limit="100" n_id="$Request.route.intNovelId" d_key="d_key" d_val="chapter"
-cache_life="86400" button_num="3" sort_type="$Request.route.strOrder" func="generateChapterPager" export_name="resData" /}
-
-
-
-
-
-
-
-
![{$arrNovel['n_name'] ?? ''}小说封面 - {$arrNovel.n_author}最新章节]()
-
-
-
-
{$arrNovel['n_name']}
-
-
-
{$arrNovel.n_description ?? ''}
-
-
-
-
-
《{$arrNovel.n_name ?? ''}》{$arrNovel.n_name ?? '章节'}
-
- {$arrNovel.strFocus ?? ""} 。看小说就来{$DomainModel->d_name} {$DomainModel->d_domain}...
-
-
相邻推荐:
- {volist name="arrNovel.n_forge_novel" id="ForgeNovel" key="key"}
- {if $key<20 } {$arrGrm[$key+20]|raw} {/if} {$ForgeNovel.n_forge_title}
- {/volist}
-
- {volist name='$arrNovel.arrRelateveNovel' id='Novel'}
- {$Novel.n_name}
- {/volist}
-
-
-
-
-
-
-
-
-
《{$arrNovel.n_name}》章节列表(第{$Request.route.intPage}页)切换倒序/正序:
- {if $Request.route.strOrder == 'zheng'}
- 点击切换倒序
- {else}
- 点击切换正序
- {/if}
-
-
-
- {include file="pc/public/allChapterPage" /}
-
-
- {foreach $resData.data as $key=>$Chapter}
- -
- {$arrGrm[$key]|raw}
-
- {$Chapter.c_name}
-
-
-
- {/foreach}
-
-
-
- {include file="pc/public/allChapterPage" /}
-
-
-
-
-
已完结热门小说推荐
-
-
- {novel:list count="6" n_category="$arrNovel.n_category_pinyin" n_status="wanjie" d_key="d_key" d_val="Novel"
- cache_life="86400"}
-
- {/novel:list}
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"}
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/getNovelChapter.html b/code/app/home/view/default/Pc/getNovelChapter.html
deleted file mode 100644
index 6868ba4..0000000
--- a/code/app/home/view/default/Pc/getNovelChapter.html
+++ /dev/null
@@ -1,189 +0,0 @@
-{extend name="basePc" /}
-{block name="title"}{site:replace code="NOVEL@GETNOVELCHAPTER@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELCHAPTER@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELCHAPTER@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-{site:grm page_code="pc_novel_chapter" diff="$Request.url" num="20" g_key="arrGrm" /}
-
-{novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /}
-{chapter:info n_id="$Request.route.intNovelId" c_sort_num="$Request.route.intChapterSort"
-c_page="$Request.route.intChapterPage" c_key="arrChapter" /}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-css"}
-
-{/block}
-
-{block name="head-js"}
-
-{/block}
-
-{block name="body-class"}novel_info{/block}
-{block name='nav-active-class'}home{/block}
-
-{block name="main"}
-
-
- {$arrGrm[1]|raw}
-
-
-
- {$arrGrm[2]|raw}
-
-
{$arrNovel.n_name}(第{$arrChapter['c_sort_num']}页)
-
- {if $arrChapter && $arrChapter.c_sort_num && $arrChapter.c_sort_num == 1}
-
上一页
- {else}
- {$arrGrm[10]|raw}
-
上一页
- {/if}
-
|
-
章节目录
-
|
- {if $arrChapter.next_chapter && $arrChapter.next_chapter.c_sort_num}
- {$arrGrm[9]|raw}
-
下一页
- {/if}
-
- {$arrGrm[3]|raw}
-
- {$arrGrm[4]|raw}
-
请勿开启浏览器阅读模式,否则将导致章节内容缺失及无法阅读下一页。
-
-
相邻推荐:
- {volist name="arrNovel.n_forge_novel" id="ForgeNovel" key="key"}
- {if $key<19 } {$arrGrm[$key+9]|raw} {/if} {$ForgeNovel.n_forge_title}
- {/volist}
-
- {volist name='arrNovel.arrRelateveNovel' id='Novel'}
- {$Novel.n_name}
- {/volist}
-
-
- {$arrGrm[5]|raw}
-
- {if $arrChapter && $arrChapter.c_sort_num && $arrChapter.c_sort_num == 1}
-
上一页
- {else}
- {$arrGrm[10]|raw}
-
上一页
- {/if}
-
|
-
章节目录
-
|
- {if $arrChapter.next_chapter && $arrChapter.next_chapter.c_sort_num}
- {$arrGrm[9]|raw}
-
下一页
- {/if}
-
- {$arrGrm[6]|raw}
-
-
-
-
-
已完结热门小说推荐
-
read_btn
-
- {novel:list count="6" n_category="$arrNovel.n_category_pinyin" n_status="wanjie" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
-
-
-
- {/novel:list}
-
-
-
-
-{/block}
-
-{block name="customize"}
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/getNovelInfo.html b/code/app/home/view/default/Pc/getNovelInfo.html
deleted file mode 100644
index 7f18d39..0000000
--- a/code/app/home/view/default/Pc/getNovelInfo.html
+++ /dev/null
@@ -1,232 +0,0 @@
-{extend name="basePc" /}
-
-{block name="title"}{site:replace code="NOVEL@GETNOVELINFO@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELINFO@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELINFO@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-{if $Request.route.intNovelId}
-{novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /}
-{else}
-{novel:info n_id="$DomainModel->info_id" n_key="arrNovel" n_forge_id="0" /}
-{/if}
-
-{site:grm page_code="pc_novel_info" diff="$arrNovel.n_id" num="120" g_key="arrGrm" /}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-css"}
-
-{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="head-js"}
-{/block}
-
-{block name="body-class"}novel_info{/block}
-
-{block name="main"}
-
-
-
-
-
-
-
-
![{$arrNovel['n_name'] ?? ''}小说封面 - {$arrNovel.n_author}最新章节]()
-
-
-
-
{$arrNovel['n_name']}
-
-
-
{$arrNovel.n_description ?? ''}
-
-
-
-
-
《{$arrNovel.n_name ?? ''}》{$arrNovel.n_name ?? '章节'}
-
- {$arrNovel.strFocus ?? ""} 。看小说就来{$DomainModel->d_name} {$DomainModel->d_domain}...
-
-
相邻推荐:
- {volist name="arrNovel.n_forge_novel" id="ForgeNovel" key="key"}
- {if $key<20 } {$arrGrm[$key+20]|raw} {/if} {$ForgeNovel.n_forge_title}
- {/volist}
-
- {volist name='$arrNovel.arrRelateveNovel' id='Novel'}
- {$Novel.n_name}
- {/volist}
-
-
-
-
-
-
-
-
-
《{$arrNovel.n_name}》最新章节
-
- {chapter:list count="12" sort_type="dao" n_id="$arrNovel.n_id" d_key="d_key" d_val="Chapter" cache_life="86400"}
- -
- {$arrGrm[$d_key]|raw}
- {$Chapter.c_name}
-
- {/chapter:list}
-
-
《{$arrNovel.n_name}》章节列表
-
- {chapter:list count="100" sort_type="zheng" n_id="$arrNovel.n_id" d_key="d_key" d_val="Chapter" cache_life="86400"}
- -
- {$arrGrm[$d_key+10]|raw}
- {$Chapter.c_name}
-
- {/chapter:list}
-
查看更多章节...
-
-
-
-
-
已完结热门小说推荐
-
-
- {novel:list count="6" n_category="$arrNovel.n_category_pinyin" n_status="wanjie" d_key="d_key" d_val="Novel" p_val="page_data" cache_life="86400"}
-
- {/novel:list}
-
-
-
-
-
-
-{/block}
-
-
-{block name="customize"}
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/getSearchNovel.html b/code/app/home/view/default/Pc/getSearchNovel.html
deleted file mode 100644
index daa10a4..0000000
--- a/code/app/home/view/default/Pc/getSearchNovel.html
+++ /dev/null
@@ -1,133 +0,0 @@
-{extend name="basePc" /}
-{block name="title"}{site:replace code="NOVEL@GETSEARCHNOVEL@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETSEARCHNOVEL@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETSEARCHNOVEL@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name='nav-active-class'}home{/block}
-
-{block name="title"}{/block}
-{block name="meta-other"}{/block}
-{block name="body-class"}novel_home novel_search_page{/block}
-{block name="main"}
-
-
-{novel:pagerexp page="$Request.get.page" limit="30"
-key="$Request.get.keyword"
-d_key="d_key"
-d_val="Novel" n_num="total"
-p_val="page_data" button_num="10" cache_life="86400" func="generateSearchPager" export_name="resData" /}
-
-{site:grm page_code="pc_novel_search" diff="$Request.url" num="30" g_key="arrGrm" /}
-
-
-
-
-
{$Request.get.keyword}搜索结果 - {$DomainModel->d_name} 第{$resData.p_data.page}页
-
- 搜索“{$Request.get.keyword}”相关结果共有 {$resData.p_data.total} 部小说
-
- {if $resData.p_data.total <1}
没有相关数据
- {else}
-
-
- {foreach $resData.data as $key=>$Novel}
-
- {/foreach}
-
-
-
- {/if}
-
-
-
-
-
-
- {volist name="resData.p_data.pager" id="vo" key="k"}
- {switch $vo.label}
- {case value="上一页"}
- {if $resData.p_data.page == 1}
-
«
- {else}
-
«
- {/if}
- {/case}
- {case value="下一页"}
- {if $resData.p_data.page >= $resData.p_data.total}
-
»
- {else}
-
»
- {/if}
- {/case}
- {case value="..."}
-
...
- {/case}
- {default /}
- {if preg_match('/^\d+$/', $vo.label)}
-
{$vo.label}
- {/if}
- {/switch}
- {/volist}
-
-
-
-
-{/block}
-
-{block name="customize"}
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Pc/index.html b/code/app/home/view/default/Pc/index.html
deleted file mode 100644
index 817a7ed..0000000
--- a/code/app/home/view/default/Pc/index.html
+++ /dev/null
@@ -1,179 +0,0 @@
-{extend name="basePc" /}
-{block name="title"}{site:replace code="INDEX@INDEX@TITLE"}{/block}
-{block name="keywords"}{site:replace code="INDEX@INDEX@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="INDEX@INDEX@DESCRIPTION"}{/block}
-
-{block name="head-css"}
-
-{/block}
-{block name="head"}
-
-
-
-
-
-
-
-{/block}
-
-{block name="main"}
-
-{site:grm page_code="pc_index" diff="0" num="150" g_key="arrGrm" /}
-
-
-
-
- {novel:list count="4" sort_type="tuijian" n_status="lianzai" d_key="d_key" d_val="Novel" p_val="page_data"
- cache_life="86400"}
-
- {/novel:list}
-
-
-
经典推荐
-
- {novel:list count="9" sort_type="tuijian" n_status="wanjie" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- -
- [{$Novel->n_category ?? ''}
-
- {$arrGrm[$d_key+4]|raw}
- {$Novel->n_name}
-
- {$Novel->n_author}
-
-
- {/novel:list}
-
-
-
-
-
-
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
-
-
{$strCategoryName}
-
-
-
-
- {novel:list count="1" n_category="$strCategoryPinyin" sort_type="news" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
-
- {$arrGrm[$d_key+9+10*$start]|raw}
-
-
-
-
-
- - {$Novel->n_name}
-
- - {$Novel.n_description ?? ''}
-
- {/novel:list}
-
-
- {novel:list count="12" n_category="$strCategoryPinyin" sort_type="news" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- -
- {$arrGrm[$d_key+9+10*$start]|raw}
- {$Novel->n_name}/{$Novel->n_author}
- {/novel:list}
-
-
- {/novel:category}
-
-
-
-
-
-
最新入库小说
-
- {novel:list count="50" sort_type="news" d_key="d_key" d_val="Novel" p_val="page_data"
- cache_life="86400"}
- -
- [{$Novel->n_category ?? ''}]
-
- {$arrGrm[$d_key+100]|raw}
- {$Novel->n_name}
- {$Novel->n_author}
-
- {/novel:list}
-
-
-
-
-
-
-{/block}
-
-{block name="customize"}
-
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/Public/allChapterPage.html b/code/app/home/view/default/Public/allChapterPage.html
deleted file mode 100644
index b8f1c2e..0000000
--- a/code/app/home/view/default/Public/allChapterPage.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
-{if !empty($resData.p_data.pager)}
-
-
- {volist name="$resData.p_data.pager" id="item"}
- {eq name="item.type" value="prev"}
- {$arrGrm[$key]|raw}
-
- {$item.label}
-
- {/eq}
- {/volist}
-
-
-
- {volist name="$resData.p_data.pager" id="item"}
- {eq name="item.type" value="next"}
- {$arrGrm[$key]|raw}
-
- {$item.label}
-
- {/eq}
- {/volist}
-
-{/if}
diff --git a/code/app/home/view/default/Public/articleList.html b/code/app/home/view/default/Public/articleList.html
deleted file mode 100644
index 4946aeb..0000000
--- a/code/app/home/view/default/Public/articleList.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
- {$key+=1}
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Public/chapterTable.html b/code/app/home/view/default/Public/chapterTable.html
deleted file mode 100644
index 5c04f4a..0000000
--- a/code/app/home/view/default/Public/chapterTable.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
- 01 天龙问世
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Public/chapterTableAll.html b/code/app/home/view/default/Public/chapterTableAll.html
deleted file mode 100644
index ec3a545..0000000
--- a/code/app/home/view/default/Public/chapterTableAll.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- 01 天龙问世
-
-
-
-
- 02 沧武的小霸王
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Public/footer.html b/code/app/home/view/default/Public/footer.html
deleted file mode 100644
index 0a03808..0000000
--- a/code/app/home/view/default/Public/footer.html
+++ /dev/null
@@ -1,24 +0,0 @@
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Public/historyNovelList.html b/code/app/home/view/default/Public/historyNovelList.html
deleted file mode 100644
index ca5bf18..0000000
--- a/code/app/home/view/default/Public/historyNovelList.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- 我真是一条龙
- 耽美百合
-
-
- 老读者必看公告!!!
-
- 4天前
- 继续阅读
-
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Public/novelListH.html b/code/app/home/view/default/Public/novelListH.html
deleted file mode 100644
index f594bca..0000000
--- a/code/app/home/view/default/Public/novelListH.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
- 我真是一条龙
-
- 我的父亲告诉我,在我出生那一年,天上金光闪耀,隐隐约约中,好像能看到云朵里有条龙在盘旋,紧接着,一道金光照入我们的村子,我便出生了……为寻答案来人间,天龙问世扰乾坤。
- 无情无义闹天下,千军万马赴黄泉。
- 本站提示:各位书友要是觉得《我真是一条龙》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!
-
-
-
- 作者:兔子很淡定
-
- 耽美百合
-
- 已完结
-
-
-
diff --git a/code/app/home/view/default/Public/novelListRank.html b/code/app/home/view/default/Public/novelListRank.html
deleted file mode 100644
index 7b1959c..0000000
--- a/code/app/home/view/default/Public/novelListRank.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
- {$key+=1}
-
\ No newline at end of file
diff --git a/code/app/home/view/default/Public/novelListS.html b/code/app/home/view/default/Public/novelListS.html
deleted file mode 100644
index 66bd276..0000000
--- a/code/app/home/view/default/Public/novelListS.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- 落魄千金美食发家日常
-
- 作者:鱼昆子
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/User/getBookShelf.html b/code/app/home/view/default/User/getBookShelf.html
deleted file mode 100644
index 55a721a..0000000
--- a/code/app/home/view/default/User/getBookShelf.html
+++ /dev/null
@@ -1,40 +0,0 @@
-{extend name="baseH5" /}
-{block name="title"}我的书架{/block}
-{block name="keywords"}我的书架{/block}
-{block name="description"}我的书架{/block}
-{block name='nav-active-class'}home{/block}
-
-
-{block name="body-class"}novel_so{/block}
-
-{block name='head-name'}{$DomainModel->d_name}{/block}
-{block name='head-href'}/{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-
-
-
-{/block}
-
-{block name="customize"}
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/User/getHistory.html b/code/app/home/view/default/User/getHistory.html
deleted file mode 100644
index 8bcdcf1..0000000
--- a/code/app/home/view/default/User/getHistory.html
+++ /dev/null
@@ -1,40 +0,0 @@
-{extend name="baseH5" /}
-{block name="title"}我的阅读记录{/block}
-{block name="keywords"}我的阅读记录{/block}
-{block name="description"}我的阅读记录{/block}
-
-{block name='nav-active-class'}home{/block}
-
-{block name="body-class"}novel_so{/block}
-
-{block name='head-name'}{$DomainModel->d_name}{/block}
-{block name='head-href'}/{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-
-
-
-{/block}
-
-{block name="customize"}
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/default/baseH5.html b/code/app/home/view/default/baseH5.html
deleted file mode 100644
index ed61ebf..0000000
--- a/code/app/home/view/default/baseH5.html
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
-
-
-
-
- {block name="title"}{/block}
-
-
-
-
-
-
-
- {block name="head"}{/block}
- {block name="head-css"}{/block}
- {block name="head-js"}{/block}
-
-
-
-
-
-
-
-
-
-
-
-
- {block name="nav-html"}{/block}
-
- {block name="main"} {/block}
-
-
- 反馈邮箱:
- {site:cfg code="YOU_XIANG" encode="false"/} Inc. All Rights Reserved.
-
-
-
-
-
-
-
-
-
- {block name="customize"}
-
- {/block}
-
-
- {site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
-
-
- {$DomainModel->d_statis|raw}
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/basePc.html b/code/app/home/view/default/basePc.html
deleted file mode 100644
index 9ec6e8d..0000000
--- a/code/app/home/view/default/basePc.html
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- {block name="title"}{/block}
-
-
-
-
-
-
-
-
-
- {block name="meta-other"}{/block}
- {block name="head"}{/block}
- {block name="head-css"}{/block}
- {block name="head-js"}{/block}
-
-
-
-
-
-
-
- {if $DomainModel->info_id > 0}
- - 首 页
- - 小说首页
- {else}
- - 首 页
- {/if}
-
-
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
- - {$strCategoryName}
- {/novel:category}
- - 阅读记录
-
-
- {block name="main"}
-
- {/block}
-
-
-
-
-
-
-
-
-
-
- {block name="customize"}
-
- {/block}
-
-
- {site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
-
-
- {$DomainModel->d_statis|raw}
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/default/index.md b/code/app/home/view/default/index.md
deleted file mode 100644
index 9e377a4..0000000
--- a/code/app/home/view/default/index.md
+++ /dev/null
@@ -1,32 +0,0 @@
-630小说模板-资源模板
-源地址: 630zw.org
-
-
-
-
-domain 表 要加字段 :
-1.tdk
-分类页面的tdk
-d_category_title d_category_keywords d_category_description
-排行榜页面的tdk
-d_rank_title d_rank_keywords d_rank_description
-内容/章节页面的tdk
-d_content_title d_content_keywords d_content_description
-
-
-2.详情页面的tdk:
-每个域名每个详情页面随机绑定一个设定的tdk模板
-
-3.页面路由别名配置:代码里面直接读这个配置渲染,后面就不需要改模板代码里面的挑战地址
-分类路由目录 : d_category_path
-详情路由目录 : d_info_path
-章节/内容页面路由目录 : d_content_path
-排行榜路由目录 : d_rank_path
-推荐页面路由目录 : d_recommend_path
-kan页面路由目录 : d_kan_path
-文章页面路由目录 : d_article_path
-
-4.这个是为了做某个视频或者某个小说关键词排名设计的
-是否设置详情页面为首页 : d_info_is_index
-要设置为首页的小说或者视频资源id : d_info_id
-
diff --git a/code/app/home/view/default/test/test01/faker.html b/code/app/home/view/default/test/test01/faker.html
deleted file mode 100644
index 2b71d63..0000000
--- a/code/app/home/view/default/test/test01/faker.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-{novel:info n_id="$DomainModel->n_id" n_key="arrNovel01" n_forge_id="1125940" /}
- {$arrNovel01.n_name} - 首页
-
-
-
- {$arrNovel01.n_description}
-
-
-
-
-
diff --git a/code/app/home/view/default/test/test01/index.html b/code/app/home/view/default/test/test01/index.html
deleted file mode 100644
index 5ba0b9d..0000000
--- a/code/app/home/view/default/test/test01/index.html
+++ /dev/null
@@ -1,108 +0,0 @@
- {site:forgelist count="3" d_key="d_key" d_val="novel" cache_life="1000"}
-
- Index: {$d_key}
- Title: {$novel.n_name}
- Author: {$novel.n_category}
-
-{/site:forgelist}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/code/app/home/view/haoZi/Index/index.html b/code/app/home/view/haoZi/Index/index.html
deleted file mode 100644
index 46ec3ce..0000000
--- a/code/app/home/view/haoZi/Index/index.html
+++ /dev/null
@@ -1,67 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
人气推荐
-
- {foreach $arrRecommendNovel as $key=>$category}
- {include file="Public/novelListS" /}
- {/foreach}
-
-
-
-
今日点击
- {foreach $arrRecommendNovel as $key=>$category}
- {if $key == 0}
- {include file="Public/novelListH" /}
- {/if}
- {/foreach}
-
- {foreach $arrRecommendNovel as $key=>$category}
- {if $key >= 1}
- {include file="Public/novelTextList" /}
- {/if}
- {/foreach}
-
-
-
-
书友推荐
- {foreach $arrRecommendNovel as $key=>$category}
- {if $key == 0}
- {include file="Public/novelListH" /}
- {/if}
- {/foreach}
-
- {foreach $arrRecommendNovel as $key=>$category}
- {if $key >= 1}
- {include file="Public/novelTextList" /}
- {/if}
- {/foreach}
-
-
-
-
最近入库
-
- {foreach $arrRecommendNovel as $key=>$category}
- {include file="Public/newsUpdateNovelList" /}
- {/foreach}
-
-
-
-
最近更新
-
- {foreach $arrRecommendNovel as $key=>$category}
- {include file="Public/newsUpdateNovelList" /}
- {/foreach}
-
-
-{/block} {block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Novel/getNovelCategory.html b/code/app/home/view/haoZi/Novel/getNovelCategory.html
deleted file mode 100644
index 14ed519..0000000
--- a/code/app/home/view/haoZi/Novel/getNovelCategory.html
+++ /dev/null
@@ -1,69 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-
首页
- >>
分类
- >>小说分类 - 小说列表
-
-
- {foreach $arrNewsUpdateNovel as $key=>$category}
- {include file="Public/novelListRank" /}
- {/foreach}
-
-
-
首 页
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
下一页
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Novel/getNovelChapter.html b/code/app/home/view/haoZi/Novel/getNovelChapter.html
deleted file mode 100644
index 153ef98..0000000
--- a/code/app/home/view/haoZi/Novel/getNovelChapter.html
+++ /dev/null
@@ -1,116 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-101 朕拳打南山敬老院(第1页)
-
-
-
当然,在开始修史前,编修们决定给许烟杪做个特训。
-
“来,许郎,我问你,你是史官,要记录一件事:皇帝得了一匹烈马,三年过去马仍桀骜,将军为其驯马,短短百日即令马服从,帝问其如何做到,他告知:使马忍渴受训,从人驱遣。”
-
许烟杪琢磨了一下,开始下笔。
-
——经过两年的工作环境熏陶,他已经可以相对熟练地使用文言文了。
-
“上得烈马,三年不得乘。将军献言:百日可令其驯服。遂使之。果得,上问其由。曰:使马久渴则从人。”
-
编修看毕,很是惊喜:“许郎初涉修史,便已摸到精髓了!不错,记史便是越简练越好,‘上得烈马,三年不得乘’,此句便足以超过九成史官!”
-
许烟杪眼神清亮:“谢编修!”
-
那编修一愣:“你谢我作甚?”
-
许烟杪不好意思地笑:“此前我听编修言你们修前朝史已修了十年,便怕我的到来给诸位添麻烦。”
-
那编修本来平静的情绪,又微妙起了望不见的波澜。他深深看了许烟杪一眼,本来觉得这白泽过来当个吉祥物,提供正史就可以了,至于史书,编得大差不差就行,反正也不是指望他来做这个的。
-
但此刻,编修提笔,在纸上写了一句话:“你来看看。”
-
许烟杪探头,就见他写的文字下面,是板板正正的:上得烈马,三年不得乘。将军闻之,以渴服马,解上愁。
-
许烟杪眼睛一下子亮了起来。
-
他明白了!
-
*
-
老皇帝进入椒房殿的时候,窦皇后都吓了一跳:“怎这般狼狈!”
-
怎么胡子乱糟糟的!衣服也有褶皱了!
-
老皇帝骂道:“匹夫!皆是匹夫!”
-
然后气冲冲地向窦皇后诉说自己刚才的遭遇:“他们一个个闹着要上吊不算,还言语围攻朕!还捋朕的龙须!朕不想和他们计较,要走,还抓着不让朕走!”
-
——气到‘朕’字都冒出来了。
-
窦皇后:“……”
-
都把大臣们气到上手抓着皇帝不让他走了……尤其是她家五郎这种暴脾气的皇帝……
-
“五郎,你和我说真话。”窦皇后表情一下子严肃起来:“你不会是一气之下,砸了大臣的祖坟吧?”
-
她本来是挑严重的说,没想到对面的人诡异地沉默了。
-
“……你?”窦皇后的尾音不是很稳。
-
老皇帝咳嗽一声:“也没这么严重,比这个轻一点……也不是,轻了一些……呃,总之就是轻了。”
-
要不是实在心虚,他也不会只是在老婆面前骂几句这群粗鄙之人不要太过分。
-
——早就让人拖出去打板子了。
-
窦皇后:“究竟是何事?”
-
老皇帝眼神一漂:“让许烟杪去修周史。”
-
窦皇后:“……”
-
这和掘人家祖坟也没差多少了。真的怨不得大臣一气之下做出以下犯上的事情。
-
但看看丈夫下巴上面被揪得乱糟糟的胡子,窦皇后还是没忍住笑出声。
-
老皇帝:“妹子!你又不帮我!”
-
窦皇后乐不可支:“你啊,大臣也不是泥捏的,这匹夫一怒……还好只是揪揪胡子,拉着衣服不让你走。”
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Novel/getNovelChapterAll.html b/code/app/home/view/haoZi/Novel/getNovelChapterAll.html
deleted file mode 100644
index b538d15..0000000
--- a/code/app/home/view/haoZi/Novel/getNovelChapterAll.html
+++ /dev/null
@@ -1,644 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-

-
- 满朝文武都能听到我的心声
-
-
-
- 白色的木
-
-
- 其他小说
- 连载中
-
-
- 最新章节:第224章 许郎此去光耀万里
-
-
最后更新:2024-06-05 17:53:58
-
-
-
-
满朝文武都能听到我的心声 章节列表(第2页)
-
-
上一页
-
-
下一页
-
-
-
-
上一页
-
-
下一页
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Novel/getNovelInfo.html b/code/app/home/view/haoZi/Novel/getNovelInfo.html
deleted file mode 100644
index 5b7df9b..0000000
--- a/code/app/home/view/haoZi/Novel/getNovelInfo.html
+++ /dev/null
@@ -1,699 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-

-
- 和扶弟魔老婆离婚后,我直接走上巅峰!
-
-
-
- 天命人悟猴
-
-
- 都市小说
- 连载中
-
-
- 最新章节:第344章
-
-
最后更新:2025-03-20 11:17:50
-
-
-
-
和扶弟魔老婆离婚后,我直接走上巅峰!小说简介
-
-
结婚两年半,妻子为了弟弟掏空家产,甚至拿走给工人的工资!面对妻子赵梦莹胡搅蛮缠的一家人,以及对方的颠倒黑白,许平安一通电话打给以前的战友。他不忍了!一场意外,再次见到高中同学,对方脱胎换骨。许平安也很惊讶,却不知自己是某人心中的白月光。离了赵梦莹,许平安逐渐走向人生巅峰,收获真爱,而前妻却开始死缠烂打。呵呵,他瞧不上!
-
-
-
-
-
和扶弟魔老婆离婚后,我直接走上巅峰! 最新章节
-
-
和扶弟魔老婆离婚后,我直接走上巅峰! 章节列表(第1页/100章)
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Novel/getNovelRank.html b/code/app/home/view/haoZi/Novel/getNovelRank.html
deleted file mode 100644
index a7cbea2..0000000
--- a/code/app/home/view/haoZi/Novel/getNovelRank.html
+++ /dev/null
@@ -1,72 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-
- {foreach $arrDayRankNovel as $key=>$category}
- {include file="Public/novelListRank" /}
- {/foreach}
-
-
-
首 页
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
下一页
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Novel/getSearchNovel.html b/code/app/home/view/haoZi/Novel/getSearchNovel.html
deleted file mode 100644
index 937a350..0000000
--- a/code/app/home/view/haoZi/Novel/getSearchNovel.html
+++ /dev/null
@@ -1,37 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
- "我"
- 相关结果:
-
-
- {foreach $arrSearchNovel as $key=>$category}
- {include file="Public/novelListRank" /}
- {/foreach}
-
-
-
首 页
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
下一页
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Novel/getSeoInfo.html b/code/app/home/view/haoZi/Novel/getSeoInfo.html
deleted file mode 100644
index 172afb8..0000000
--- a/code/app/home/view/haoZi/Novel/getSeoInfo.html
+++ /dev/null
@@ -1,29 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-
-
-
深度解说列表
-
-
-
- {foreach $arrNewsNovel as $key2 => $vo}
- {include file="Public/novelListRank" /}
- {/foreach}
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Novel/getSeoList.html b/code/app/home/view/haoZi/Novel/getSeoList.html
deleted file mode 100644
index 1eadedf..0000000
--- a/code/app/home/view/haoZi/Novel/getSeoList.html
+++ /dev/null
@@ -1,45 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-
-
-
-
-
深度解说列表
-
-
-
- {foreach $arrNewsNovel as $key => $vo}
- {include file="Public/novelListRank" /}
-
- {/foreach}
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/Public/chapterTableAll.html b/code/app/home/view/haoZi/Pc/Public/chapterTableAll.html
deleted file mode 100644
index 2e765a4..0000000
--- a/code/app/home/view/haoZi/Pc/Public/chapterTableAll.html
+++ /dev/null
@@ -1 +0,0 @@
-第1912章
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/Public/footer.html b/code/app/home/view/haoZi/Pc/Public/footer.html
deleted file mode 100644
index adc12bf..0000000
--- a/code/app/home/view/haoZi/Pc/Public/footer.html
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/Public/historyNovelList.html b/code/app/home/view/haoZi/Pc/Public/historyNovelList.html
deleted file mode 100644
index 07b4640..0000000
--- a/code/app/home/view/haoZi/Pc/Public/historyNovelList.html
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
- |
-
- 我真是一条龙
- |
-
- 老读者必看公告!!!
- |
-
- 兔子很淡定
- |
- 3天前 |
-
- 已完结 |
-
- 阅读
- 删除
- |
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/Public/hostListImg.html b/code/app/home/view/haoZi/Pc/Public/hostListImg.html
deleted file mode 100644
index 9056817..0000000
--- a/code/app/home/view/haoZi/Pc/Public/hostListImg.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-

-
-
- - 六界三道永恒之门
- - 关于永恒之门神魔混战,万界崩塌,只永恒仙域长存世间。尘世罹苦,妖祟邪乱,诸神明弃众生而不朽。万古后,一尊名为赵云的战神,凝练了天地玄黄,重铸了宇宙洪荒,自碧落凡尘,一路打上了永恒仙域,以神之名,君临万道。自此,他说的话,便是神话。...
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/Public/hostListText.html b/code/app/home/view/haoZi/Pc/Public/hostListText.html
deleted file mode 100644
index 5e2b744..0000000
--- a/code/app/home/view/haoZi/Pc/Public/hostListText.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
- 步步升云
-
- 钓人的鱼
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/Public/indexCategoryNewsList.html b/code/app/home/view/haoZi/Pc/Public/indexCategoryNewsList.html
deleted file mode 100644
index 9f8c3ba..0000000
--- a/code/app/home/view/haoZi/Pc/Public/indexCategoryNewsList.html
+++ /dev/null
@@ -1 +0,0 @@
-逆天邪神/火星引力
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/Public/indexCategoryNewsOne.html b/code/app/home/view/haoZi/Pc/Public/indexCategoryNewsOne.html
deleted file mode 100644
index ff31541..0000000
--- a/code/app/home/view/haoZi/Pc/Public/indexCategoryNewsOne.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- - 重生巫族,我为盘古立神像
- - 关于重生巫族,我为盘古立神像天生万物以养人,人无一物可报天,浩瀚如洪荒世界,在亿万生灵只知
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/Public/indexNewsUpdateList.html b/code/app/home/view/haoZi/Pc/Public/indexNewsUpdateList.html
deleted file mode 100644
index 2dc6664..0000000
--- a/code/app/home/view/haoZi/Pc/Public/indexNewsUpdateList.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
- [玄幻修真]
-
- 太荒吞天诀
-
-
- 第四千一百六十八章 熟悉的气息
-
- 铁马飞桥
- 03-20
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/User/getBookShelf.html b/code/app/home/view/haoZi/Pc/User/getBookShelf.html
deleted file mode 100644
index 34efd82..0000000
--- a/code/app/home/view/haoZi/Pc/User/getBookShelf.html
+++ /dev/null
@@ -1,42 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}boy{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/User/getHistory.html b/code/app/home/view/haoZi/Pc/User/getHistory.html
deleted file mode 100644
index 34efd82..0000000
--- a/code/app/home/view/haoZi/Pc/User/getHistory.html
+++ /dev/null
@@ -1,42 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}boy{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/getNovelCategory.html b/code/app/home/view/haoZi/Pc/getNovelCategory.html
deleted file mode 100644
index afe51d1..0000000
--- a/code/app/home/view/haoZi/Pc/getNovelCategory.html
+++ /dev/null
@@ -1,54 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}boy{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
-
-
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key < 6} {include file="Pc/Public/hostListImg" /} {/if}
- {/foreach}
-
-
-
-
-
-
-
-
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {include file="Pc/Public/indexNewsUpdateList" /}
- {/foreach}
-
-
-
-
-
最新入库
-
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {include file="Pc/Public/hostListText" /}
- {/foreach}
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/getNovelChapter.html b/code/app/home/view/haoZi/Pc/getNovelChapter.html
deleted file mode 100644
index 72b0d1f..0000000
--- a/code/app/home/view/haoZi/Pc/getNovelChapter.html
+++ /dev/null
@@ -1,132 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}boy{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
-
-
-
-
-
晚上八点钟,冯宇走出孙记私房菜馆,两人没有谈拢,最终不欢而散。
-
相比冯宇的满面愁容,洪波则是一脸得意的走出私房菜馆,看着冯宇离开的方向,冷哼一声。
-
刚才在包厢里,他故意引导冯宇说出了那天找自己的经过,不但偷录了音,微型摄像头还把冯宇说话的整个过程录了下来。
-
“冯宇啊冯宇,要怪就怪出了事你想拿老子顶缸,把老子当傻子,一点实惠没有,还想让老子给你卖命,真以为你一个县委书记秘书有什么了不起,呸。”洪波心里暗骂一声。
-
当晚洪波睡得很香,冯宇则是辗转反侧,到天亮的时候才眯了一会。
-
早晨,洪波并没去上班,而是直接开车去了市区。
-
冯宇顶着熊猫眼来到了县委,杨志看了他一眼,眉头紧锁了起来。
-
他一直对形象十分重视,所以要求身边的人也要随时随地保持自己的形象。
-
冯宇以前都做得很好,可是今天早晨却是头发混乱,眼圈十分重,一副无精打采的样子。
-
冯宇将刚沏好的茶放在杨志面前。
-
杨志看了他一眼,道:“冯宇,如果你觉得在我身边压力过大,我可以把你调到轻松的部门。”
-
本来无精打采的冯宇,听到杨志的话,瞬间身体打了一个激灵,立刻开口说道:“杨书记,我没事,我没感觉到压力,在您身边在我的荣幸,你的批评是对我的鞭策,我一定把工作做好……”
-
冯宇紧张的说了很多,直到杨志摆了一下手,他的话才戛然而止。
-
“你看看你今天的形象,昨晚去干嘛了?没睡觉吗?”杨志问道。
-
冯宇看着杨志,这几天他承受了十分巨大的压力,此时终于有点扛不住了。
-
“杨书记,我……”冯宇红了眼圈,一个大男人想要落泪。
-
不知道是真的,还是演的,反正效果不错,杨志看到落泪的冯宇,明显语气变得温和起来:“什么事,还能让你一个县委书记的秘书急得落泪?”
-
“杨书记,我犯了错误。”冯宇低头说道。
-
他扛不住了,不如跟杨志说实话,不然等市纪委下来调查,他的结果可能更惨。
-
“说。”杨志喝了口茶,说道。
-
“杨书记,上次您让我给小羊饼干加把火,于是我就找了……”冯宇把事情详细的讲了一遍,最后说道:“阳城县那边已经把许强秘密抓捕了,可能很快就能查到咱们县住建局洪波头上,可是这几天我跟他谈了好几次,洪波都不愿意把事情扛下来。”
-
-
“甚至他还威胁我,只要市纪委找到他,他就立刻把我供出来,当时我说只要你把事情扛下来,书记您会想办法让他的处分最小,保住他的党籍和级别,等沉寂几年,未来还能重新起复。”
-
“洪波还是没松口,他说……”冯宇变得犹犹豫豫起来。
-
“说什么?”杨志问道。
-
明知后面的话可能不太好听,但是他还是问了。
-
“他说杨书记你还是管好自己,上次就被王子枫玩得团团……”
-
砰!
-
转字还没有说出口,冯宇就听到杨志生气的拍了桌子。
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
-
-{block name="footer-js"}
-
-
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/getNovelChapterAll.html b/code/app/home/view/haoZi/Pc/getNovelChapterAll.html
deleted file mode 100644
index 9cc3cf2..0000000
--- a/code/app/home/view/haoZi/Pc/getNovelChapterAll.html
+++ /dev/null
@@ -1,180 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}boy{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
-
-
-
武裂苍穹
-
作者:九子登云 状态:连载中
-
分类:玄幻修真 加入书架
-
最新章节:第3050章
-
更新时间:2025-03-26 00:21:24
-
-
-
-
-
-
-
-
- - 《武裂苍穹》正文目录
- 上一页下一页
-
- {foreach $arrNovelChapterAll as $category}
- {include file="Pc/Public/chapterTableAll" /}
- {/foreach}
- - 返回《武裂苍穹》第一页
- 上一页下一页
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/getNovelInfo.html b/code/app/home/view/haoZi/Pc/getNovelInfo.html
deleted file mode 100644
index 0cb544f..0000000
--- a/code/app/home/view/haoZi/Pc/getNovelInfo.html
+++ /dev/null
@@ -1,269 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}boy{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
-
-
-
剑出霜满城
-
作者:馀杯 状态:连载中
-
分类:玄幻修真 加入书架
- 章节目录
-
最新章节:第1912章
-
更新时间:2025-03-25 09:08:59
-
-
-
-
-
-
-
-
- - 《剑出霜满城》最新章节
- {foreach $arrRecommendNovel as $category}
- {include file="Pc/Public/chapterTableAll" /}
- {/foreach}
-
- - 《剑出霜满城》正文目录
- {foreach $arrRecommendNovel as $category}
- {include file="Pc/Public/chapterTableAll" /}
- {/foreach}
- - >> 查看《剑出霜满城》更多章节列表 <<
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/getNovelRank.html b/code/app/home/view/haoZi/Pc/getNovelRank.html
deleted file mode 100644
index f954f83..0000000
--- a/code/app/home/view/haoZi/Pc/getNovelRank.html
+++ /dev/null
@@ -1,54 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}boy{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
-
-
- {foreach $arrNewsNovelRankNovel as $key=>$Novel}
- {if $key < 6} {include file="Pc/Public/hostListImg" /} {/if}
- {/foreach}
-
-
-
-
-
-
-
-
- {foreach $arrNewsNovelRankNovel as $key=>$Novel}
- {include file="Pc/Public/indexNewsUpdateList" /}
- {/foreach}
-
-
-
-
-
最新入库
-
- {foreach $arrNewsNovelRankNovel as $key=>$Novel}
- {include file="Pc/Public/hostListText" /}
- {/foreach}
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/getSearchNovel.html b/code/app/home/view/haoZi/Pc/getSearchNovel.html
deleted file mode 100644
index 1bca516..0000000
--- a/code/app/home/view/haoZi/Pc/getSearchNovel.html
+++ /dev/null
@@ -1,46 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}boy{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
-
-
-
-
-
'玄幻修真' - 相关搜索结果
-
- {foreach $arrSearchNovel as $key=>$Novel}
- {include file="Pc/Public/indexNewsUpdateList" /}
- {/foreach}
-
-
-
-
-
最新入库
-
- {foreach $arrSearchNovel as $key=>$Novel}
- {include file="Pc/Public/hostListText" /}
- {/foreach}
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/getSeoInfo.html b/code/app/home/view/haoZi/Pc/getSeoInfo.html
deleted file mode 100644
index 172afb8..0000000
--- a/code/app/home/view/haoZi/Pc/getSeoInfo.html
+++ /dev/null
@@ -1,29 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-
-
-
深度解说列表
-
-
-
- {foreach $arrNewsNovel as $key2 => $vo}
- {include file="Public/novelListRank" /}
- {/foreach}
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/getSeoList.html b/code/app/home/view/haoZi/Pc/getSeoList.html
deleted file mode 100644
index 423dc98..0000000
--- a/code/app/home/view/haoZi/Pc/getSeoList.html
+++ /dev/null
@@ -1,89 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
-
-
-
-
-
-
-
-
- -
-
- - 分类
- - 书名
- - 描述
- - 作者
- - 更新时间
-
-
- {foreach $arrNewsNovel as $key=>$Novel}
- {if $key >= 1}
- {include file="Pc/Public/indexNewsUpdateList" /}
- {/if}
- {/foreach}
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Pc/index.html b/code/app/home/view/haoZi/Pc/index.html
deleted file mode 100644
index 71794c6..0000000
--- a/code/app/home/view/haoZi/Pc/index.html
+++ /dev/null
@@ -1,144 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key < 4} {include file="Pc/Public/hostListImg" /} {/if} {/foreach}
-
-
-
经典推荐
-
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key > 3}
- {include file="Pc/Public/hostListText" /}
- {/if}
- {/foreach}
-
-
-
-
-
-
-
玄幻魔法
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key == 0}
- {include file="Pc/Public/indexCategoryNewsOne" /}
- {/if}
- {/foreach}
-
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key >= 1}
- {include file="Pc/Public/indexCategoryNewsList" /}
- {/if}
- {/foreach}
-
-
-
-
武侠修真
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key == 0}
- {include file="Pc/Public/indexCategoryNewsOne" /}
- {/if}
- {/foreach}
-
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key >= 1}
- {include file="Pc/Public/indexCategoryNewsList" /}
- {/if}
- {/foreach}
-
-
-
-
都市言情
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key == 0}
- {include file="Pc/Public/indexCategoryNewsOne" /}
- {/if}
- {/foreach}
-
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key >= 1}
- {include file="Pc/Public/indexCategoryNewsList" /}
- {/if}
- {/foreach}
-
-
-
-
-
-
-
穿越小说
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key == 0}
- {include file="Pc/Public/indexCategoryNewsOne" /}
- {/if}
- {/foreach}
-
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key >= 1}
- {include file="Pc/Public/indexCategoryNewsList" /}
- {/if}
- {/foreach}
-
-
-
-
网游动漫
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key == 0}
- {include file="Pc/Public/indexCategoryNewsOne" /}
- {/if}
- {/foreach}
-
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key >= 1}
- {include file="Pc/Public/indexCategoryNewsList" /}
- {/if}
- {/foreach}
-
-
-
-
科幻小说
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key == 0}
- {include file="Pc/Public/indexCategoryNewsOne" /}
- {/if}
- {/foreach}
-
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {if $key >= 1}
- {include file="Pc/Public/indexCategoryNewsList" /}
- {/if}
- {/foreach}
-
-
-
-
-
-
-
最近更新小说列表
-
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {include file="Pc/Public/indexNewsUpdateList" /}
- {/foreach}
-
-
-
-
最新入库小说
-
- {foreach $arrRecommendSerializationNovel as $key=>$Novel}
- {include file="Pc/Public/hostListText" /}
- {/foreach}
-
-
-
-
-
- {/block}
-
- {block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Public/chapterTable.html b/code/app/home/view/haoZi/Public/chapterTable.html
deleted file mode 100644
index 9f93359..0000000
--- a/code/app/home/view/haoZi/Public/chapterTable.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
- 01 天龙问世
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Public/chapterTableAll.html b/code/app/home/view/haoZi/Public/chapterTableAll.html
deleted file mode 100644
index c296f50..0000000
--- a/code/app/home/view/haoZi/Public/chapterTableAll.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- 01 天龙问世
-
-
-
-
- 02 沧武的小霸王
-
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Public/footer.html b/code/app/home/view/haoZi/Public/footer.html
deleted file mode 100644
index 727e92e..0000000
--- a/code/app/home/view/haoZi/Public/footer.html
+++ /dev/null
@@ -1,26 +0,0 @@
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Public/historyNovelList.html b/code/app/home/view/haoZi/Public/historyNovelList.html
deleted file mode 100644
index ca5bf18..0000000
--- a/code/app/home/view/haoZi/Public/historyNovelList.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- 我真是一条龙
- 耽美百合
-
-
- 老读者必看公告!!!
-
- 4天前
- 继续阅读
-
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Public/newsUpdateNovelList.html b/code/app/home/view/haoZi/Public/newsUpdateNovelList.html
deleted file mode 100644
index 65baad0..0000000
--- a/code/app/home/view/haoZi/Public/newsUpdateNovelList.html
+++ /dev/null
@@ -1,4 +0,0 @@
-[03-20]
- 夏野堂
- 万人嫌师兄被魔尊掳走後
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Public/novelListH.html b/code/app/home/view/haoZi/Public/novelListH.html
deleted file mode 100644
index 7840ca8..0000000
--- a/code/app/home/view/haoZi/Public/novelListH.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
1
-
- 
-
医道官途
-
帷赫其他小说
-
天才中医凌游,在大学毕业后为逝世的爷爷回村守孝三年,并且继承了爷爷生前经营的医馆三七堂。
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Public/novelListRank.html b/code/app/home/view/haoZi/Public/novelListRank.html
deleted file mode 100644
index bab7f32..0000000
--- a/code/app/home/view/haoZi/Public/novelListRank.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
- 满朝文武都能听到我的心声
-
-
- 白色的木
-
- *古代奇幻轻小说坏消息许烟杪穿越回古代了,而他本人四肢不勤五谷不分,专业还是对古...
-
- 最新:第224章许郎此去光耀万里
-
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Public/novelListS.html b/code/app/home/view/haoZi/Public/novelListS.html
deleted file mode 100644
index 567a8d2..0000000
--- a/code/app/home/view/haoZi/Public/novelListS.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- 绝品风流狂医
- 花开彼岸
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/Public/novelTextList.html b/code/app/home/view/haoZi/Public/novelTextList.html
deleted file mode 100644
index 929889c..0000000
--- a/code/app/home/view/haoZi/Public/novelTextList.html
+++ /dev/null
@@ -1,4 +0,0 @@
-2
- 咸鱼继母日常
- 明栀
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/User/getBookShelf.html b/code/app/home/view/haoZi/User/getBookShelf.html
deleted file mode 100644
index 1cb5922..0000000
--- a/code/app/home/view/haoZi/User/getBookShelf.html
+++ /dev/null
@@ -1,32 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
《阅读记录》最多显示100条,请收藏至书架
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/User/getHistory.html b/code/app/home/view/haoZi/User/getHistory.html
deleted file mode 100644
index 1cb5922..0000000
--- a/code/app/home/view/haoZi/User/getHistory.html
+++ /dev/null
@@ -1,32 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
《阅读记录》最多显示100条,请收藏至书架
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/User/index.html b/code/app/home/view/haoZi/User/index.html
deleted file mode 100644
index e37fe98..0000000
--- a/code/app/home/view/haoZi/User/index.html
+++ /dev/null
@@ -1,60 +0,0 @@
-{extend name="baseH5User" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="head-name"}用户中心{/block}
-{block name="main"}
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/baseH5.html b/code/app/home/view/haoZi/baseH5.html
deleted file mode 100644
index 7e17dad..0000000
--- a/code/app/home/view/haoZi/baseH5.html
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
- 耗子小说网_最值得收藏的热门小说阅读网
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {block name="main"} {/block}
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/baseH5User.html b/code/app/home/view/haoZi/baseH5User.html
deleted file mode 100644
index 9206c2d..0000000
--- a/code/app/home/view/haoZi/baseH5User.html
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-
- 狂雨小说
-
-
-
-
-
-
-
-
-
- {block name="main"} {/block}
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/basePc.html b/code/app/home/view/haoZi/basePc.html
deleted file mode 100644
index 1dfbb52..0000000
--- a/code/app/home/view/haoZi/basePc.html
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-
- 耗子小说网_最值得收藏的热门小说阅读网
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {block name="main"} {/block}
-
-
-
- {block name="customize"}{/block}
-
- {block name="footer-js"} {/block}
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/basePcUser.html b/code/app/home/view/haoZi/basePcUser.html
deleted file mode 100644
index ddab4dd..0000000
--- a/code/app/home/view/haoZi/basePcUser.html
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
- 狂雨小说
-
-
-
-
-
-
-
-
-
-
-
123456
-
-
- -
-
- 经验:0
-
- -
-
- 积分:0
-
- -
-
-
- 推荐票:0
-
-
-
-
-
-
- 关注中心
-
-
-
-
- 设置
-
-
-
-
- {block name="main"} {/block}
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/haoZi/index.md b/code/app/home/view/haoZi/index.md
deleted file mode 100644
index 3a3526e..0000000
--- a/code/app/home/view/haoZi/index.md
+++ /dev/null
@@ -1,2 +0,0 @@
-耗子小说网模板
-源地址: https://hzpxw.net/
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/baseH5.html b/code/app/home/view/kuangYu/baseH5.html
deleted file mode 100644
index a0e6c67..0000000
--- a/code/app/home/view/kuangYu/baseH5.html
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- {block name="title"}{/block}
-
-
-
-
-
-
-
-
-
- {block name="head"}{/block}
- {block name="head-css"}{/block}
- {block name="head-js"}{/block}
-
-
-
-
-
-
-
-
-
-
-
-
- {block name="main"} {site:wz wz="主内容" /}{/block}
-
- {include file="public/footer" /}
-
- {block name="customize"}{/block}
-
-
-
-
-
-
-
-
-
- {block name="footer-js"}{/block}
-
-
- {site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
-
-
- {$DomainModel->d_statis|raw}
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/baseH5User.html b/code/app/home/view/kuangYu/baseH5User.html
deleted file mode 100644
index 303dc20..0000000
--- a/code/app/home/view/kuangYu/baseH5User.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {$strTitle??''}
-
-
-
- {block name="head"}{/block}
- {block name="head-css"}{/block}
- {block name="head-js"}{/block}
-
-
-
-
-
-
-
- {block name="main"} {/block}
-
-
-
-
-
-
-
- {site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
-
-
- {$DomainModel->d_statis|raw}
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/basePc.html b/code/app/home/view/kuangYu/basePc.html
deleted file mode 100644
index 75f9ac1..0000000
--- a/code/app/home/view/kuangYu/basePc.html
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
-
-
-
-
- {block name="title"}{/block}
-
-
-
-
-
-
- {block name="head"}{/block}
- {block name="head-css"}{/block}
- {block name="head-js"}{/block}
-
-
-
-
-{block name="strPageCode"}
-
-{/block}
-
-
-
-
-
-
-
- {block name="main"} {/block}
-
- {block name="customize-footer-after"}{/block}
-
- {include file="pc/public/footer" /}
-
- {block name="customize"}{/block}
-
-
-
-
-
-
-
-
-
- {block name="footer-js"}{/block}
-
-
- {site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
-
-
- {$DomainModel->d_statis|raw}
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/basePcUser.html b/code/app/home/view/kuangYu/basePcUser.html
deleted file mode 100644
index 0295dd7..0000000
--- a/code/app/home/view/kuangYu/basePcUser.html
+++ /dev/null
@@ -1,144 +0,0 @@
-
-
-
-
-
-
-
-
- {$strTitle??''}
-
-
-
- {block name="head"}{/block}
- {block name="head-css"}{/block}
- {block name="head-js"}{/block}
-
-
-
-
-
-
-
-
-
-
-
123456
-
-
- -
-
- 经验:0
-
- -
-
- 积分:0
-
- -
-
-
- 推荐票:0
-
-
-
-
-
-
- 关注中心
-
-
-
-
- 设置
-
-
-
-
- {block name="main"} {/block}
-
-
-
-
-
-
-
-
- {site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
-
-
- {$DomainModel->d_statis|raw}
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/index/index.html b/code/app/home/view/kuangYu/index/index.html
deleted file mode 100644
index 1215d01..0000000
--- a/code/app/home/view/kuangYu/index/index.html
+++ /dev/null
@@ -1,165 +0,0 @@
-{extend name="baseH5" /}
-{block name="title"}{site:replace code="INDEX@INDEX@TITLE"}{/block}
-{block name="keywords"}{site:replace code="INDEX@INDEX@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="INDEX@INDEX@DESCRIPTION"}{/block}
-{block name="head"}
-
-
-
-
-
-
-
-
-{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-{site:grm page_code="h5_index" diff="0" num="60" g_key="arrGrm" /}
-
-
-
-
-
-
-
{$DomainModel->d_index_description}
-
-
-
-
-
-
-
热门小说
-
-
{site:replace code="INDEX_POPULAR_NOVELS"}
-
-
- {novel:list count="8" sort_type="tuijian" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
- {include file="public/novelListS" start="0"/}
- {/novel:list}
-
-
-
-
-
-
-
-
最新小说
-
-
{site:replace code="INDEX_NEWS_NOVELS"}
-
-
-
- {novel:list count="8" sort_type="news" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
- {include file="public/novelListH" start="9"/}
- {/novel:list}
-
-
-
-
-
-
-
-
小说排行榜
-
-
{site:replace code="INDEX_RANK_NOVELS"}
-
-
-
- - 日排榜
- - 周排榜
- - 月排榜
- - 完结榜
-
-
-
-
-
-
- {novel:list count="8" n_category="xuanhuan-xiuzhen" sort_type="news" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
- {include file="public/novelListH" start="17"/}
- {/novel:list}
-
-
-
-
-
-
-
- {novel:list count="8" n_category="zhongsheng-chuanyue" sort_type="news" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
- {include file="public/novelListH" start="27"/}
- {/novel:list}
-
-
-
-
-
-
-
- {novel:list count="8" n_category="dushi-xiaoshuo" sort_type="news" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
- {include file="public/novelListH" start="37" /}
- {/novel:list}
-
-
-
-
-
-
-
- {novel:list count="8" n_category="yanqing-xiaoshuo" sort_type="news" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
- {include file="public/novelListH" start="47"/}
- {/novel:list}
-
-
-
-
-
-
-
{$DomainModel->d_description}
-
-{/block} {block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/novel/getArticleInfo.html b/code/app/home/view/kuangYu/novel/getArticleInfo.html
deleted file mode 100644
index 649fb51..0000000
--- a/code/app/home/view/kuangYu/novel/getArticleInfo.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{extend name="baseH5" /}
-{block name="title"}{$strTitle??''}{/block}
-{block name="keywords"}{$strKeywords??''}{/block}
-{block name="description"}{$strDescription??''}{/block}
-{block name="head"}
-
-
-
-
-
-
-
- {/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-article.........
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/novel/getArticleList.html b/code/app/home/view/kuangYu/novel/getArticleList.html
deleted file mode 100644
index a78d589..0000000
--- a/code/app/home/view/kuangYu/novel/getArticleList.html
+++ /dev/null
@@ -1,64 +0,0 @@
-{extend name="baseH5" /}
-{block name="title"}{$strTitle??''}{/block}
-{block name="keywords"}{$strKeywords??''}{/block}
-{block name="description"}{$strDescription??''}{/block}
-{block name="head"}
-
-
-
-
-
-
-
- {/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-
-
-
-
-
深度解说列表
-
-
-
- {foreach $arrNewsNovel as $key => $vo}
- {include file="public/articleList" /}
-
- {/foreach}
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/novel/getLibrary.html b/code/app/home/view/kuangYu/novel/getLibrary.html
deleted file mode 100644
index 811a0ed..0000000
--- a/code/app/home/view/kuangYu/novel/getLibrary.html
+++ /dev/null
@@ -1,194 +0,0 @@
-{extend name="baseH5" /}
-
-{block name="title"}{site:replace code="NOVEL@GETLIBRARY@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETLIBRARY@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETLIBRARY@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-
-
-{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
-
-{else}
-
-
-{/if}
-
-
-{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
-
-{else}
-
-{/if}
-
-{/block}
-
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="strPageCode"}
-
-{/block}
-
-{block name="main"}
-
-{novel:pagerexp page="$Request.get.page" limit="30"
-n_category="$Request.route.strCategory"
-n_sex="$Request.route.strGender"
-n_status="$Request.route.strStatus"
-d_key="d_key"
-button_num="10" cache_life="86400" func="generateCategoryPager" export_name="resData" /}
-
-{site:grm page_code="pc_novel_library" diff="$resData.p_data.page" num="70" g_key="arrGrm" /}
-
-
-
{site:replace code="NOVEL@GETLIBRARY@DESCRIPTION"}
-
-
-
-
-
-
-
-
- -
- 全部
-
- {if $Request.route.strGender == "all" || $Request.route.strGender == ""}
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
- -
- {$strCategoryName}
-
- {/novel:category}
- {/if}
-
- {eq name="$Request.route.strGender" value="$strNanUrl"}
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName" n_sex="man"}
- -
- {$strCategoryName}
-
- {/novel:category}
- {/eq}
-
- {eq name="$Request.route.strGender" value="$strNvUrl"}
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName" n_sex="women"}
- -
- {$strCategoryName}
-
- {/novel:category}
- {/eq}
-
-
-
-
-
-
-
-
-
- {volist name="$resData.data" id="Novel" key="key"}
- {include file="public/novelListH" start="0"/}
- {/volist}
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/novel/getNovelCatalog.html b/code/app/home/view/kuangYu/novel/getNovelCatalog.html
deleted file mode 100644
index 2457b52..0000000
--- a/code/app/home/view/kuangYu/novel/getNovelCatalog.html
+++ /dev/null
@@ -1,162 +0,0 @@
-{extend name="baseH5" /}
-
-{block name="title"}{site:replace code="NOVEL@GETNOVELCATALOG@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELCATALOG@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELCATALOG@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-{novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /}
-{site:grm page_code="h5_novel_catalog " diff="$Request.url" num="120" g_key="arrGrm" /}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-{chapter:pagerexp page="$Request.route.intPage" limit="100" n_id="$Request.route.intNovelId" d_key="d_key" d_val="chapter"
-cache_life="86400" button_num="3" sort_type="$Request.route.strOrder" func="generateChapterPager" export_name="resData" /}
-
-
-
-
-
-
- {$arrGrm[0]|raw}
-
-
{$arrNovel['n_name']}章节目录 - {$arrNovel['n_author']} - {$DomainModel->d_name} 第{$Request.route.intPage}页
-
-
-
-
-
- {include file="public/allChapterPage" start="0"/}
-
-
- {volist name="resData.data" id="Chapter" key="key"}
- -
- {$arrGrm[$key]|raw}
- {$Chapter.c_name}
-
- {/volist}
-
-
-
- {include file="public/allChapterPage" /}
-
-
-
-
-
-
-
-
-
-{/block}
-
-
-
diff --git a/code/app/home/view/kuangYu/novel/getNovelChannel.html b/code/app/home/view/kuangYu/novel/getNovelChannel.html
deleted file mode 100644
index a9a2899..0000000
--- a/code/app/home/view/kuangYu/novel/getNovelChannel.html
+++ /dev/null
@@ -1,113 +0,0 @@
-{extend name="baseH5" /}
-
-{block name="title"}{site:replace code="NOVEL@GETNOVELCHANNEL@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELCHANNEL@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELCHANNEL@DESCRIPTION"}{/block}
-
-{block name="head"}
-param('strChannel');
-
-?>
-
-
-
-
-
-
-
-{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-{site:grm page_code="pc_index" diff="0" num="50" g_key="arrGrm" /}
-
-
-
-
-
{site:replace code="NOVEL@GETNOVELCHANNEL@DESCRIPTION"}
-
-
-
-
-
-
-
热门推荐
-
-
-
- {novel:list count="8" sort_type="tuijian" n_status="lianzai" n_sex="$strPageCode" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
- {include file="public/novelListS" start="0"/}
- {/novel:list}
-
-
-
-
-
-
完结推荐
-
-
-
- {novel:list count="8" sort_type="tuijian" n_status="wanjie" n_sex="$strPageCode" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
- {include file="public/novelListS" start="13"/}
- {/novel:list}
-
-
-
-
-
-
最近更新
-
-
-
- {novel:list count="8" sort_type="update" n_sex="$strPageCode" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
- {include file="public/novelListH" start="21"/}
- {/novel:list}
-
-
-
-
-
-{/block} {block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/novel/getNovelChapter.html b/code/app/home/view/kuangYu/novel/getNovelChapter.html
deleted file mode 100644
index 8059e84..0000000
--- a/code/app/home/view/kuangYu/novel/getNovelChapter.html
+++ /dev/null
@@ -1,403 +0,0 @@
-
-
-
-
- {site:grm page_code="h5_novel_chapter" diff="$Request.url" num="20" g_key="arrGrm" /}
-
-{novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /}
-{chapter:info n_id="$Request.route.intNovelId" c_sort_num="$Request.route.intChapterSort"
-c_page="$Request.route.intChapterPage" c_key="arrChapter" /}
-
-
-
-
-
-
-
-
-
- {site:replace code="NOVEL@GETNOVELCHAPTER@TITLE"}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {$arrGrm[0]|raw}
-
- {$arrGrm[1]|raw}
-
- {$arrGrm[6]|raw}
-
- {$arrGrm[7]|raw}
-
-
-
-
-
-
-
-
-
-
-
-
- {block name="footer-js"}
-
- {/block}
-
- {$arrGrm[10]|raw}
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/novel/getNovelInfo.html b/code/app/home/view/kuangYu/novel/getNovelInfo.html
deleted file mode 100644
index f90fcfd..0000000
--- a/code/app/home/view/kuangYu/novel/getNovelInfo.html
+++ /dev/null
@@ -1,274 +0,0 @@
-{extend name="baseH5" /}
-
-{block name="title"}{site:replace code="NOVEL@GETNOVELINFO@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELINFO@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELINFO@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-{if $Request.route.intNovelId}
-{novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /}
-{else}
-{novel:info n_id="$DomainModel->info_id" n_key="arrNovel" n_forge_id="0" /}
-{/if}
-{site:grm page_code="h5_novel_info" diff="$arrNovel.n_id" num="120" g_key="arrGrm" /}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-
-
-
-
- {$arrGrm[0]|raw}
-
-
- -
-
-
- 已完结
-
- -
-
{$arrNovel['n_name']}
-
- 分类:{$arrNovel.n_category}
- 作者:{$arrNovel.n_author}
-
- 阅读:{$arrNovel.arrNovelClicks.total}
-
-
-
- {$arrGrm[1]|raw}
-
-
- {if !empty($arrNovel.intFirstChapterSort)}
- -
- {$arrGrm[2]|raw}
- 点击阅读
-
- {/if}
- -
- 加入书架
-
-
-
-
- {$arrGrm[3]|raw}
-
-
- {$arrNovel.n_description ?? ''}
-
-
-
-
-
-
-
-
-
-
-
最新要点
-
- {$arrGrm[4]|raw}
-
-
-
- {$arrNovel.strFocus}
-
-
相邻推荐:
- {volist name="arrNovel.n_forge_novel" id="ForgeNovel" key="key"}
- {$arrGrm[$key+20]|raw}
- {$ForgeNovel.n_forge_title}
- {/volist}
-
-
-
-
-
-
-
-
-
-
-
-
{$arrNovel.n_name}最新章节
-
-
-
- {chapter:list count="10" sort_type="dao" n_id="$arrNovel.n_id" d_key="d_key" d_val="Chapter" cache_life="86400"}
- -
- {$arrGrm[$key]|raw}
- {$Chapter.c_name}
-
- {/chapter:list}
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"}
-
-
-{/block}
-
-{block name="footer-js"}
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/novel/getNovelRank.html b/code/app/home/view/kuangYu/novel/getNovelRank.html
deleted file mode 100644
index f955ee5..0000000
--- a/code/app/home/view/kuangYu/novel/getNovelRank.html
+++ /dev/null
@@ -1,173 +0,0 @@
-{extend name="baseH5" /}
-
-{block name="title"}{site:replace code="NOVEL@GETNOVELRANK@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELRANK@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELRANK@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-
-
-
-
-
-
-{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="strPageCode"}
-
-{/block}
-
-
-{block name="main"}
-
-{site:grm page_code="h5_rank" diff="0" num="100" g_key="arrGrm" /}
-
-
-
{site:replace code="NOVEL@GETNOVELRANK@DESCRIPTION"}
-
-
-
-
-
-
日点击榜
-
-
-
- {novel:ranklist count="10" sort_type="daily" d_key="key" d_val="Novel" cache_life="1000"}
- {if $key == 1}
- {include file="public/novelListH" start="0"/}
- {/if}
- {if $key >= 2}
- {include file="public/novelListRank" start="1"/}
- {/if}
-
- {/novel:ranklist}
-
-
-
-
-
-
-
周点击榜
-
-
-
- {novel:ranklist count="10" sort_type="weekly" d_key="key" d_val="Novel" cache_life="1000"}
- {if $key == 1}
- {include file="public/novelListH" start="10"/}
- {/if}
- {if $key >= 2}
- {include file="public/novelListRank" start="11"/}
- {/if}
-
- {/novel:ranklist}
-
-
-
-
-
-
-
月点击榜
-
-
-
- {novel:ranklist count="10" sort_type="monthly" d_key="key" d_val="Novel" cache_life="1000"}
- {if $key == 1}
- {include file="public/novelListH" start="20"/}
- {/if}
- {if $key >= 2}
- {include file="public/novelListRank" start="21"/}
- {/if}
-
- {/novel:ranklist}
-
-
-
-
-
-
-
总点击榜
-
-
-
- {novel:ranklist count="10" sort_type="total" d_key="key" d_val="Novel" cache_life="1000"}
- {if $key == 1}
- {include file="public/novelListH" start="30"/}
- {/if}
- {if $key >= 2}
- {include file="public/novelListRank" start="31"/}
- {/if}
- {/novel:ranklist}
-
-
-
-
-
-
-
新书榜
-
-
-
- {novel:ranklist count="10" sort_type="total" n_status="lianzai" d_key="key" d_val="Novel" cache_life="1000"}
- {if $key == 1}
- {include file="public/novelListH" start="40"/}
- {/if}
- {if $key >= 2}
- {include file="public/novelListRank" start="41"/}
- {/if}
- {/novel:ranklist}
-
-
-
-
-
-
-
完结榜
-
-
-
- {novel:ranklist count="10" sort_type="total" n_status="wanjie" d_key="key" d_val="Novel" cache_life="1000"}
- {if $key == 1}
- {include file="public/novelListH" start="50"/}
- {/if}
- {if $key >= 2}
- {include file="public/novelListRank" start="51"/}
- {/if}
- {/novel:ranklist}
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/novel/getSearchNovel.html b/code/app/home/view/kuangYu/novel/getSearchNovel.html
deleted file mode 100644
index 0f81602..0000000
--- a/code/app/home/view/kuangYu/novel/getSearchNovel.html
+++ /dev/null
@@ -1,105 +0,0 @@
-{extend name="baseH5" /}
-
-{block name="title"}{site:replace code="NOVEL@GETSEARCHNOVEL@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETSEARCHNOVEL@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETSEARCHNOVEL@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-{novel:pagerexp page="$Request.get.page" limit="30"
-key="$Request.get.keyword"
-d_key="d_key"
-d_val="Novel"
-p_val="page_data" button_num="10" cache_life="86400" func="generateSearchPager" export_name="resData" /}
-
-{site:grm page_code="h5_novel_search" diff="$Request.url" num="30" g_key="arrGrm" /}
-
-
-
-
-
-
-
{$Request.get.keyword}搜索结果 - {$DomainModel->d_name} 第{$Request.get.intPage}页
- 搜索“{$Request.get.keyword}”相关结果共有 {$resData.p_data.total} 部小说
-
- {if empty($resData.data)}
-
没有相关数据
- {else}
-
- {foreach $resData.data as $key=>$Novel}
- {include file="public/novelListH" start="0"/}
- {/foreach}
-
- {/if}
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/getArticleInfo.html b/code/app/home/view/kuangYu/pc/getArticleInfo.html
deleted file mode 100644
index 2f067e4..0000000
--- a/code/app/home/view/kuangYu/pc/getArticleInfo.html
+++ /dev/null
@@ -1,38 +0,0 @@
-{extend name="basePc" /}
-{block name="title"}{$strTitle??''}{/block}
-{block name="keywords"}{$strKeywords??''}{/block}
-{block name="description"}{$strDescription??''}{/block}
-{block name="head"}
-
-
-
-
-
-
-
- {/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-article.......
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/getArticleList.html b/code/app/home/view/kuangYu/pc/getArticleList.html
deleted file mode 100644
index 3e46d23..0000000
--- a/code/app/home/view/kuangYu/pc/getArticleList.html
+++ /dev/null
@@ -1,105 +0,0 @@
-{extend name="basePc" /}
-{block name="title"}{$strTitle??''}{/block}
-{block name="keywords"}{$strKeywords??''}{/block}
-{block name="description"}{$strDescription??''}{/block}
-{block name="head"}
-
-
-
-
-
-
-
- {/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-{block name="main"}
-
-
-
-
-
-
-
-
-
-
-
- -
-
- - 分类
- - 书名
- - 描述
- - 作者
- - 更新时间
-
-
- {foreach $arrNewsNovel as $key=>$Novel}
- {include file="pc/public/articleList" /}
- {/foreach}
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/getKanNovelInfo.html b/code/app/home/view/kuangYu/pc/getKanNovelInfo.html
deleted file mode 100644
index 3570b81..0000000
--- a/code/app/home/view/kuangYu/pc/getKanNovelInfo.html
+++ /dev/null
@@ -1,267 +0,0 @@
-{extend name="basePc" /}
-{block name="title"}{$strTitle??''}{/block}
-{block name="keywords"}{$strKeywords??''}{/block}
-{block name="description"}{$strDescription??''}{/block}
-{block name="head"}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-{block name="head-css"}
-
-{/block}
-{block name="logo-html"}
-
-{/block}
-{block name="main"}
-
-
-
-
-
-
-
-
-
- 作者:{$arrNovel.n_author}
- 创建日期:{$arrNovel.n_update_time}
-
-
-
简介
-
-
- {$arrNovel.n_description}
-
展开
-
收起
-
-
-
-
最新要点
-
-
- {$strFocus}
-
展开
-
收起
-
-
-
- {if !empty($arrChapter)}
-
立即阅读
-
目录
- {/if}
-
-
-
-
-
-
-
小说信息
-
类别:
-
-
- {$arrNovel.n_category}
-
-
-
-
总点击量:{$arrNovelClicks.total}
-
月点击量:{$arrNovelClicks.monthly}
-
周点击量:{$arrNovelClicks.weekly}
-
日点击量:{$arrNovelClicks.daily}
-
-
-
-
-
-
-
-
-
-
-
最新章节
-
-
- {volist name="arrChapter" id="Chapter" key="key"}
-
- {$Chapter.c_name}
- {$Chapter.created_at ?? '1天前'}
-
-
-
- {/volist}
-
-
-
-
相邻推荐:
-
-
-
-
-
-
-
精品推荐
-
- {volist name="arrRelateveNovel" id="Novel" key="key"}
- -
-
-
-
- {/volist}
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"}
-
-{/block}
-
-{block name="footer-js"}
-
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/getLibrary.html b/code/app/home/view/kuangYu/pc/getLibrary.html
deleted file mode 100644
index 77464ab..0000000
--- a/code/app/home/view/kuangYu/pc/getLibrary.html
+++ /dev/null
@@ -1,213 +0,0 @@
-{extend name="basePc" /}
-
-{block name="title"}{site:replace code="NOVEL@GETLIBRARY@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETLIBRARY@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETLIBRARY@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-
-
-{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
-
-{else}
-
-
-{/if}
-
-
-{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
-
-{else}
-
-{/if}
-
-{/block}
-{block name="head-js"}{/block}
-
-{block name="head-css"}
-
-{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
-
-{else}
-
-{/if}
-
-{/block}
-{block name="logo-html"}
-
-{/block}
-
-{block name="strPageCode"}
-
-{/block}
-
-{block name="main"}
-
-{novel:pagerexp page="$Request.get.page" limit="30"
-n_category="$Request.route.strCategory"
-n_sex="$Request.route.strGender"
-n_status="$Request.route.strStatus"
-d_key="d_key"
-button_num="10" cache_life="86400" func="generateCategoryPager" export_name="resData" /}
-
-{site:grm page_code="pc_novel_library" diff="$resData.p_data.page" num="70" g_key="arrGrm" /}
-
-
-
-
-
-
-
- 6
- {$Request.route.strGender}
- 5
-
所属频道
-
-
-
-
所属分类
-
- -
- 全部
-
- {if $Request.route.strGender == "all" || $Request.route.strGender == ""}
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
- -
- {$strCategoryName}
-
- {/novel:category}
- {/if}
-
- {eq name="$Request.route.strGender" value="$strNanUrl"}
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName" n_sex="man"}
- - {$strCategoryName}
- {/novel:category}
- {/eq}
-
- {eq name="$Request.route.strGender" value="$strNvUrl"}
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName" n_sex="women"}
- - {$strCategoryName}
- {/novel:category}
- {/eq}
-
-
-
-
-
-
-
-
-
-
- {volist name="$resData.data" id="Novel" key="key"}
- {include file="pc/public/shukuNovelList" start="0"/}
- {/volist}
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/getNovelCatalog.html b/code/app/home/view/kuangYu/pc/getNovelCatalog.html
deleted file mode 100644
index f1c0d8d..0000000
--- a/code/app/home/view/kuangYu/pc/getNovelCatalog.html
+++ /dev/null
@@ -1,153 +0,0 @@
-{extend name="basePc" /}
-
-{block name="title"}{site:replace code="NOVEL@GETNOVELCATALOG@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELCATALOG@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELCATALOG@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-{novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /}
-{site:grm page_code="pc_novel_catalog" diff="$Request.url" num="120" g_key="arrGrm" /}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-css"}
-
-{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-{block name="main"}
-
-{chapter:pagerexp page="$Request.route.intPage" limit="100" n_id="$Request.route.intNovelId" d_key="d_key" d_val="chapter"
-cache_life="86400" button_num="3" sort_type="$Request.route.strOrder" func="generateChapterPager" export_name="resData" /}
-
-
-
-
-
-
-
- {$arrGrm[0]|raw}
-
-
作者:{$arrNovel.n_author}
-
-
-
-
章节列表
-
-
- {include file="pc/public/allChapterPage" /}
-
-
-
- {foreach $resData.data as $key => $Chapter }
- -
- {$arrGrm[$key]|raw}
-
-
- {/foreach}
-
-
-
-
- {include file="pc/public/allChapterPage" /}
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/getNovelChannel.html b/code/app/home/view/kuangYu/pc/getNovelChannel.html
deleted file mode 100644
index 6cf625d..0000000
--- a/code/app/home/view/kuangYu/pc/getNovelChannel.html
+++ /dev/null
@@ -1,150 +0,0 @@
-{extend name="basePc" /}
-
-{block name="title"}{site:replace code="NOVEL@GETNOVELCHANNEL@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELCHANNEL@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELCHANNEL@DESCRIPTION"}{/block}
-
-{block name="strPageCode"}
- param('strChannel'); ?>
-{/block}
-
-{block name="head"}
-
-param('strChannel');
-
-?>
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-css"}
-
-{eq name="strPageCode" value="man"}
-
-{else}
-
-{/eq}
-
-{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-{site:grm page_code="pc_index" diff="0" num="50" g_key="arrGrm" /}
-
-
-
-
-
-
-
-
-
-
热门推荐
-
-
-
- {novel:list count="12" sort_type="tuijian" n_status="lianzai" n_sex="$strPageCode" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
- {include file="pc/public/endNovelList" start="0"/}
- {/novel:list}
-
-
-
-
-
-
-
-
-
-
-
-
-
完本推荐
-
-
- {novel:list count="8" sort_type="tuijian" n_status="wanjie" n_sex="$strPageCode" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
-
- {include file="pc/public/endNovelList" start="13"/}
- {/novel:list}
-
-
-
-
-
-
-
-
-
-
-
作品更新
-
-
-
-
-
- -
-
- - 类别
- - 书名
- - 最新更新章节
- - 作者
- - 更新时间
-
-
- {novel:list count="30" sort_type="update" n_sex="$strPageCode" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
- {include file="pc/public/indexNewsUpdateList" start="21"/}
- {/novel:list}
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/getNovelChapter.html b/code/app/home/view/kuangYu/pc/getNovelChapter.html
deleted file mode 100644
index 27c0a3d..0000000
--- a/code/app/home/view/kuangYu/pc/getNovelChapter.html
+++ /dev/null
@@ -1,423 +0,0 @@
-
-
-
- {site:grm page_code="pc_novel_chapter" diff="$Request.url" num="20" g_key="arrGrm" /}
-
-{novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /}
-{chapter:info n_id="$Request.route.intNovelId" c_sort_num="$Request.route.intChapterSort"
-c_page="$Request.route.intChapterPage" c_key="arrChapter" /}
-
-
-
-
-
-
- {site:replace code="NOVEL@GETNOVELCHAPTER@TITLE"}
-
-
-
- {block name="head-css"}
-
- {/block}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {$arrGrm[0]|raw}
-
-
-
-
-
-
-
-
-
- {if $arrChapter && $arrChapter.c_content}
-
- {/if}
-
-
-
-
-
-
-
-
-
-
-
- {if $arrChapter && $arrChapter.c_sort_num && $arrChapter.c_sort_num == 1}
-
上一章
- {else}
- {$arrGrm[10]|raw}
-
上一章
- {/if}
-
|
- {if $arrChapter.next_chapter && $arrChapter.next_chapter.c_sort_num}
- {$arrGrm[9]|raw}
-
下一章
- {/if}
-
-
-
-
-
-
- -
- {$arrGrm[8]|raw}
-
- 目录
-
-
- -
-
- 设置
-
-
- -
- {$arrGrm[7]|raw}
-
- 书架
-
-
- -
- {$arrGrm[6]|raw}
-
- 详情
-
-
-
- {$arrGrm[5]|raw}
-
-
-
-
-
设置
-
-
- -
- 阅读主题
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {$arrGrm[4]|raw}
- -
- 正文字体
- 雅黑
- 宋体
- 楷书
-
- -
- 字体大小
-
-
-
-
- 18
-
-
-
-
-
- -
- 页面宽度
-
-
-
-
-
-
- 800
-
-
-
-
-
-
- {$arrGrm[3]|raw}
- -
- 阅读方式
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {$arrGrm[2]|raw}
-
-
-
-
-
-
-
-
-
- {$arrGrm[19]|raw}
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/getNovelInfo.html b/code/app/home/view/kuangYu/pc/getNovelInfo.html
deleted file mode 100644
index 5d87783..0000000
--- a/code/app/home/view/kuangYu/pc/getNovelInfo.html
+++ /dev/null
@@ -1,292 +0,0 @@
-{extend name="basePc" /}
-
-{block name="title"}{site:replace code="NOVEL@GETNOVELINFO@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELINFO@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELINFO@DESCRIPTION"}{/block}
-
-
-{block name="head"}
-
-{if $Request.route.intNovelId}
-{novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /}
-{else}
-{novel:info n_id="$DomainModel->info_id" n_key="arrNovel" n_forge_id="0" /}
-{/if}
-{site:grm page_code="pc_novel_info" diff="$arrNovel.n_id" num="120" g_key="arrGrm" /}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-css"}
-
-{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="strPageCode"}
-
-{/block}
-
-{block name="main"}
-
-
-
-
-
-
-
-
-
-
- 作者:{$arrNovel.n_author}
- 创建日期:{$arrNovel.n_update_time}
-
-
-
简介
-
-
- {$arrNovel.n_description ?? ''}
-
展开
-
收起
-
-
-
-
最新要点
-
-
- {$arrNovel.strFocus}
-
展开
-
收起
-
-
-
-
-
-
-
-
-
小说信息
-
类别:
-
- {$arrNovel.n_category}
-
-
-
-
总点击量:{$arrNovel.arrNovelClicks.total}
-
月点击量:{$arrNovel.arrNovelClicks.monthly}
-
周点击量:{$arrNovel.arrNovelClicks.weekly}
-
日点击量:{$arrNovel.arrNovelClicks.daily}
-
-
-
-
-
-
-
-
-
-
-
最新章节
-
-
- {chapter:list count="12" sort_type="dao" n_id="$arrNovel.n_id" d_key="key" d_val="Chapter" cache_life="86400"}
-
- {$arrGrm[$key]|raw}
- {$Chapter.c_name}
- {$Chapter.created_at ?? '1天前'}
-
-
-
- {/chapter:list}
-
-
-
-
相邻推荐:
-
-
- {volist name="arrNovel.n_forge_novel" id="ForgeNovel" key="key"}
- {if $key<20 } {$arrGrm[$key+20]|raw} {/if}
{$ForgeNovel.n_forge_title}
- {/volist}
-
-
-
-
-
-
-
精品推荐
-
- {novel:list count="6" n_category="$arrNovel.n_category_pinyin" n_status="wanjie" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
- -
-
-
-
- {/novel:list}
-
-
-
-
-
-
-{/block}
-
-{block name="customize"}
-
-{/block}
-
-{block name="footer-js"}
-
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/getNovelRank.html b/code/app/home/view/kuangYu/pc/getNovelRank.html
deleted file mode 100644
index 76f2eea..0000000
--- a/code/app/home/view/kuangYu/pc/getNovelRank.html
+++ /dev/null
@@ -1,215 +0,0 @@
-{extend name="basePc" /}
-
-{block name="title"}{site:replace code="NOVEL@GETNOVELRANK@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETNOVELRANK@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETNOVELRANK@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-css"}
-
-{/block}
-{block name="head-js"}{/block}
-{block name='body-class'}body-rank-class{/block}
-{block name="logo-html"}
-
-{/block}
-
-{block name="strPageCode"}
-
-{/block}
-
-{block name="main"}
-
-{site:grm page_code="h5_rank" diff="0" num="100" g_key="arrGrm" /}
-
-
-
-
-
-
-
-
-
-
日点击榜
-
-
-
-
- {novel:ranklist count="10" sort_type="daily" d_key="key" d_val="Novel" cache_life="1000"}
- {if $key == 0}
- {include file="pc/public/indexBoyRankOne" start="0"/}
- {/if}
- {if $key >= 1}
- {include file="pc/public/indexBoyRankList" start="1"/}
- {/if}
- {/novel:ranklist}
-
-
-
-
-
-
-
-
周点击榜
-
-
-
-
- {novel:ranklist count="10" sort_type="weekly" d_key="key" d_val="Novel" cache_life="1000"}
- {if $key == 0}
- {include file="pc/public/indexBoyRankOne" start="10"/}
- {/if}
- {if $key >= 1}
- {include file="pc/public/indexBoyRankList" start="11"/}
- {/if}
- {/novel:ranklist}
-
-
-
-
-
-
-
-
月点击榜
-
-
-
-
- {novel:ranklist count="10" sort_type="monthly" d_key="key" d_val="Novel" cache_life="1000"}
- {if $key == 0}
- {include file="pc/public/indexBoyRankOne" start="20"/}
- {/if}
- {if $key >= 1}
- {include file="pc/public/indexBoyRankList" start="21"/}
- {/if}
- {/novel:ranklist}
-
-
-
-
-
-
-
-
总点击榜
-
-
-
-
- {novel:ranklist count="10" sort_type="total" d_key="key" d_val="Novel" cache_life="1000"}
- {if $key == 0}
- {include file="pc/public/indexBoyRankOne" start="30"/}
- {/if}
- {if $key >= 1}
- {include file="pc/public/indexBoyRankList" start="31"/}
- {/if}
- {/novel:ranklist}
-
-
-
-
-
-
-
-
连载榜
-
-
-
-
- {novel:ranklist count="10" sort_type="total" n_status="lianzai" d_key="key" d_val="Novel" cache_life="1000"}
- {if $key == 0}
- {include file="pc/public/indexBoyRankOne" start="40"/}
- {/if}
- {if $key >= 1}
- {include file="pc/public/indexBoyRankList" start="41"/}
- {/if}
- {/novel:ranklist}
-
-
-
-
-
-
-
-
完结榜
-
-
-
-
- {novel:ranklist count="10" sort_type="total" n_status="wanjie" d_key="key" d_val="Novel" cache_life="1000"}
- {if $key == 0}
- {include file="pc/public/indexBoyRankOne" start="50"/}
- {/if}
- {if $key >= 1}
- {include file="pc/public/indexBoyRankList" start="51"/}
- {/if}
- {/novel:ranklist}
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/getSearchNovel.html b/code/app/home/view/kuangYu/pc/getSearchNovel.html
deleted file mode 100644
index a9cecc7..0000000
--- a/code/app/home/view/kuangYu/pc/getSearchNovel.html
+++ /dev/null
@@ -1,120 +0,0 @@
-{extend name="basePc" /}
-
-{block name="title"}{site:replace code="NOVEL@GETSEARCHNOVEL@TITLE"}{/block}
-{block name="keywords"}{site:replace code="NOVEL@GETSEARCHNOVEL@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="NOVEL@GETSEARCHNOVEL@DESCRIPTION"}{/block}
-
-{block name="head"}
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-{novel:pagerexp page="$Request.get.page" limit="30"
-key="$Request.get.keyword"
-d_key="d_key"
-d_val="Novel" n_num="total"
-p_val="page_data" button_num="10" cache_life="86400" func="generateSearchPager" export_name="resData" /}
-
-{site:grm page_code="pc_novel_search" diff="$Request.url" num="30" g_key="arrGrm" /}
-
-
-
-
-
-
{$Request.get.keyword}搜索结果 - {$DomainModel->d_name} 第{$Request.get.page}页
-
-
- 搜索“{$Request.get.keyword}”相关结果共有 {$resData.p_data.total} 部小说
-
-
-
-
-
- {if empty($resData.data)}
-
没有相关数据
- {else}
-
- {foreach $resData.data as $key=>$Novel}
- {include file="pc/public/shukuNovelList" start="0"/}
- {/foreach}
-
- {/if}
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/index.html b/code/app/home/view/kuangYu/pc/index.html
deleted file mode 100644
index 5a6114a..0000000
--- a/code/app/home/view/kuangYu/pc/index.html
+++ /dev/null
@@ -1,303 +0,0 @@
-{extend name="basePc" /}
-
-{block name="title"}{site:replace code="INDEX@INDEX@TITLE"}{/block}
-{block name="keywords"}{site:replace code="INDEX@INDEX@KEYWORDS"}{/block}
-{block name="description"}{site:replace code="INDEX@INDEX@DESCRIPTION"}{/block}
-
-{block name="head-css"}
-
-{/block}
-{block name="head"}
-
-
-
-
-
-
-
-{/block}
-{block name="head-js"}{/block}
-
-{block name="strPageCode"}
-
-{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-{site:grm page_code="pc_index" diff="0" num="150" g_key="arrGrm" /}
-
-
-
-
{$DomainModel->d_index_description}
-
-
- {novel:pagerexp page="1" limit="13"
-sort_type="tuijian"
-n_status="lianzai"
-d_key="d_key"
-button_num="10" cache_life="86400" func="generateCategoryPager" export_name="resData" /}
-
-
-
-
- {volist name="$resData.data" id="Novel" key="key"}
- {if $key < 6} {include file="pc/public/swiperListImg" start="1" /} {/if}
- {/volist}
-
-
-
- {volist name="$resData.data" id="Novel" key="key"}
- {if $key < 6} {include file="pc/public/swiperListText" /} {/if} {/volist}
-
-
- {volist name="$resData.data" id="Novel" key="key"}
- {if $key == 1}
-
-
{$Novel.n_description ?? ''}
- {/if}
- {/volist}
-
-
-
- {volist name="$resData.data" id="Novel" key="key"}
- {if $key > 5 && $key < 10} {include file="pc/public/hostListImg" start="5" /} {/if} {/volist}
- {volist
- name="$resData.data" id="Novel" key="key" } {if $key> 9 }
- {$arrGrm[$key+9]|raw}
- {include file="pc/public/hostListText" start="9"/}
- {/if}
- {/volist}
-
-
-
-
-
-
-
-
完本推荐
-
-
-
- {novel:list count="12" sort_type="tuijian" n_status="wanjie" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- {include file="pc/public/endNovelList" start="13" /}
- {/novel:list}
-
-
-
-
-
-
-
-
-
-
-
男生频道
-
-
- {novel:list count="1" n_sex="man" sort_type="news" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- {include file="pc/public/indexBoyNewsOne" start="25" /}
- {/novel:list}
-
-
- {novel:list count="4" n_sex="man" sort_type="news" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- {include file="pc/public/indexBoyNewsList" start="26" /}
- {/novel:list}
-
-
-
-
- 排行榜
- 周
- 月
- 总
-
-
-
- {novel:list count="10" n_sex="man" sort_type="update" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- {if $d_key == 1}
- {include file="pc/public/indexBoyRankOne" start="30"/}
- {/if}
- {if $d_key >= 2}
- {include file="pc/public/indexBoyRankList" start="31"/}
- {/if}
- {/novel:list}
-
-
查看更多
-
-
-
- {novel:list count="10" n_sex="man" sort_type="update" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- {if $d_key == 1}
- {include file="pc/public/indexBoyRankOne" start="41"/}
- {/if}
- {if $d_key >= 2}
- {include file="pc/public/indexBoyRankList" start="42"/}
- {/if}
- {/novel:list}
-
-
查看更多
-
-
-
- {novel:list count="10" n_sex="man" sort_type="update" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- {if $d_key == 1}
- {include file="pc/public/indexBoyRankOne" start="53"/}
- {/if}
- {if $d_key >= 2}
- {include file="pc/public/indexBoyRankList" start="54"/}
- {/if}
- {/novel:list}
-
-
查看更多
-
-
-
-
-
-
-
-
-
-
女生频道
-
-
- {novel:list count="1" n_sex="women" sort_type="news" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- {include file="pc/public/indexBoyNewsOne" start="55"/}
- {/novel:list}
-
-
- {novel:list count="4" n_sex="women" sort_type="news" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- {include file="pc/public/indexBoyNewsList" start="56"/}
- {/novel:list}
-
-
-
-
- 排行榜
- 周
- 月
- 总
-
-
-
- {novel:list count="10" n_sex="women" sort_type="update" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- {if $d_key == 1}
- {include file="pc/public/indexBoyRankOne" start="59"/}
- {/if}
- {if $d_key >= 2}
- {include file="pc/public/indexBoyRankList" start="60"/}
- {/if}
- {/novel:list}
-
-
查看更多
-
-
-
- {novel:list count="10" n_sex="women" sort_type="update" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- {if $d_key == 1}
- {include file="pc/public/indexBoyRankOne" start="71"/}
- {/if}
- {if $d_key >= 2}
- {include file="pc/public/indexBoyRankList" start="72" /}
- {/if}
- {/novel:list}
-
-
查看更多
-
-
-
- {novel:list count="10" n_sex="women" sort_type="update" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- {if $d_key == 1}
- {include file="pc/public/indexBoyRankOne" start="83"/}
- {/if}
- {if $d_key >= 2}
- {include file="pc/public/indexBoyRankList" start="84"/}
- {/if}
- {/novel:list}
-
-
查看更多
-
-
-
-
-
-
-
-
-
-
-
-
作品更新
-
-
-
-
-
- -
-
- - 类别
- - 书名
- - 最新更新章节
- - 作者
- - 更新时间
-
-
- {novel:list count="30" sort_type="update" d_key="d_key" d_val="Novel"
- p_val="page_data" cache_life="86400"}
- {include file="pc/public/indexNewsUpdateList" start="70"/}
- {/novel:list}
-
-
-
-
-
-
{$DomainModel->d_description}
-
-{/block}
-
-{block name="customize-footer-after"}
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/public/adBanner.html b/code/app/home/view/kuangYu/pc/public/adBanner.html
deleted file mode 100644
index fe9b569..0000000
--- a/code/app/home/view/kuangYu/pc/public/adBanner.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
diff --git a/code/app/home/view/kuangYu/pc/public/allChapterPage.html b/code/app/home/view/kuangYu/pc/public/allChapterPage.html
deleted file mode 100644
index 7cb2e8c..0000000
--- a/code/app/home/view/kuangYu/pc/public/allChapterPage.html
+++ /dev/null
@@ -1,34 +0,0 @@
-{if !empty($resData.p_data.pager)}
-
- {volist name="$resData.p_data.pager" id="item"}
- {eq name="item.type" value="prev"}
-
- {$item.label}
-
- {/eq}
- {/volist}
-
-
-
- {volist name="$resData.p_data.pager" id="item"}
- {eq name="item.type" value="next"}
-
- {$item.label}
-
- {/eq}
- {/volist}
-
-{/if}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/public/articleList.html b/code/app/home/view/kuangYu/pc/public/articleList.html
deleted file mode 100644
index d2fe72b..0000000
--- a/code/app/home/view/kuangYu/pc/public/articleList.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/public/endNovelList.html b/code/app/home/view/kuangYu/pc/public/endNovelList.html
deleted file mode 100644
index 15fc07d..0000000
--- a/code/app/home/view/kuangYu/pc/public/endNovelList.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
- {$arrGrm[$key+[start]]|raw}
-
-
-
-
{$Novel->n_author ?? ''}
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/public/footer.html b/code/app/home/view/kuangYu/pc/public/footer.html
deleted file mode 100644
index 55728d0..0000000
--- a/code/app/home/view/kuangYu/pc/public/footer.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/public/hostListImg.html b/code/app/home/view/kuangYu/pc/public/hostListImg.html
deleted file mode 100644
index 26fc40e..0000000
--- a/code/app/home/view/kuangYu/pc/public/hostListImg.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/public/hostListText.html b/code/app/home/view/kuangYu/pc/public/hostListText.html
deleted file mode 100644
index df44eba..0000000
--- a/code/app/home/view/kuangYu/pc/public/hostListText.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/public/indexBoyNewsList.html b/code/app/home/view/kuangYu/pc/public/indexBoyNewsList.html
deleted file mode 100644
index 17ac3aa..0000000
--- a/code/app/home/view/kuangYu/pc/public/indexBoyNewsList.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/public/indexBoyNewsOne.html b/code/app/home/view/kuangYu/pc/public/indexBoyNewsOne.html
deleted file mode 100644
index 93d48ce..0000000
--- a/code/app/home/view/kuangYu/pc/public/indexBoyNewsOne.html
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
作者:{$Novel->n_author ?? ''}
-
分类:
- {$Novel->n_category ?? ''}
-
-
-
进度:{$Novel->n_status ?? ''}
-
总点击:{$Novel->og_novel_click ?? 0}
-
-
{$Novel->n_description ?? ''}
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/public/indexBoyRankList.html b/code/app/home/view/kuangYu/pc/public/indexBoyRankList.html
deleted file mode 100644
index 2963c9c..0000000
--- a/code/app/home/view/kuangYu/pc/public/indexBoyRankList.html
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
- {$key+=1}
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/public/indexBoyRankOne.html b/code/app/home/view/kuangYu/pc/public/indexBoyRankOne.html
deleted file mode 100644
index 3f02d19..0000000
--- a/code/app/home/view/kuangYu/pc/public/indexBoyRankOne.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
- 1
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/public/indexNewsUpdateList.html b/code/app/home/view/kuangYu/pc/public/indexNewsUpdateList.html
deleted file mode 100644
index 6980311..0000000
--- a/code/app/home/view/kuangYu/pc/public/indexNewsUpdateList.html
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/public/shukuNovelList.html b/code/app/home/view/kuangYu/pc/public/shukuNovelList.html
deleted file mode 100644
index 7bb36ad..0000000
--- a/code/app/home/view/kuangYu/pc/public/shukuNovelList.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
- {$arrGrm[$key+[start]]|raw}
-
-
-
-
-
-
更新时间:2025-03-20 23:59
-
立即阅读
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/public/swiperListImg.html b/code/app/home/view/kuangYu/pc/public/swiperListImg.html
deleted file mode 100644
index 7e2d8b8..0000000
--- a/code/app/home/view/kuangYu/pc/public/swiperListImg.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
- {$arrGrm[$key+[start]]|raw}
-
-
diff --git a/code/app/home/view/kuangYu/pc/public/swiperListText.html b/code/app/home/view/kuangYu/pc/public/swiperListText.html
deleted file mode 100644
index 662b5e2..0000000
--- a/code/app/home/view/kuangYu/pc/public/swiperListText.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- {$key}
- {$Novel.n_name ?? ''}
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/user/getBookShelf.html b/code/app/home/view/kuangYu/pc/user/getBookShelf.html
deleted file mode 100644
index f22e114..0000000
--- a/code/app/home/view/kuangYu/pc/user/getBookShelf.html
+++ /dev/null
@@ -1,74 +0,0 @@
-{extend name="basePcUser" /}
-
-{block name="title"}我的书架{/block}
-{block name="keywords"}我的书架{/block}
-{block name="description"}我的书架{/block}
-
-{block name="head"}
-
-
-
-
-
-
-
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-{site:grm page_code="pc_bookshekf" diff="0" num="10" g_key="arrGrm" /}
-{$arrGrm[0]|raw}
-
-
-
- 我的书架
-
- {$arrGrm[1]|raw}
-
-
-
-
- | 封面 |
- 书名 |
- 最新章节 |
- 作者 |
- 更新时间 |
- 状态 |
- 操作 |
-
-
- {$arrGrm[3]|raw}
-
-
- {$arrGrm[4]|raw}
-
-
-
-{$arrGrm[2]|raw}
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/user/getHistory.html b/code/app/home/view/kuangYu/pc/user/getHistory.html
deleted file mode 100644
index 721b262..0000000
--- a/code/app/home/view/kuangYu/pc/user/getHistory.html
+++ /dev/null
@@ -1,70 +0,0 @@
-{extend name="basePcUser" /}
-{block name="title"}我的阅读记录{/block}
-{block name="keywords"}我的阅读记录{/block}
-{block name="description"}我的阅读记录{/block}
-{block name="head"}
-
-
-
-
-
-
-
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-{site:grm page_code="pc_history" diff="0" num="10" g_key="arrGrm" /}
-{$arrGrm[0]|raw}
-
-
- 最近阅读
-
- {$arrGrm[1]|raw}
-
-
-
-
- | 封面 |
- 书名 |
- 阅读章节 |
- 作者 |
- 更新时间 |
- 状态 |
- 操作 |
-
-
-
-
- {$arrGrm[2]|raw}
-
-
-
-{$arrGrm[3]|raw}
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/user/index.html b/code/app/home/view/kuangYu/pc/user/index.html
deleted file mode 100644
index 3554ff4..0000000
--- a/code/app/home/view/kuangYu/pc/user/index.html
+++ /dev/null
@@ -1,277 +0,0 @@
-{extend name="basePcUser" /}
-
-{block name="title"}个人中心{/block}
-{block name="keywords"}个人中心{/block}
-{block name="description"}个人中心{/block}
-
-{block name="head"}
-
-
-
-
-
-
-
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-{site:grm page_code="userinfo" diff="0" num="100" g_key="arrGrm" /}
-
-
-
-
-
-
-
- {$arrGrm[2]|raw}
-
- {$arrGrm[3]|raw}
-
-
- 热读作品
-
-
-
-
- {novel:list count="10" sort_type="news" d_key="key" d_val="Novel" cache_life="86400"}
- {include file="pc/public/endNovelList" start="0"/}
- {/novel:list}
-
-
-
-
-
-
-
- {$arrGrm[4]|raw}
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/public/allChapterPage.html b/code/app/home/view/kuangYu/public/allChapterPage.html
deleted file mode 100644
index f6a5274..0000000
--- a/code/app/home/view/kuangYu/public/allChapterPage.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{if !empty($resData.p_data.pager)}
-
- {volist name="$resData.p_data.pager" id="item"}
- {eq name="item.type" value="prev"}
- {$arrGrm[$key]|raw}
-
- {$item.label}
-
- {/eq}
- {/volist}
-
-
-
- {volist name="$resData.p_data.pager" id="item"}
- {eq name="item.type" value="next"}
- {$arrGrm[$key]|raw}
-
- {$item.label}
-
- {/eq}
- {/volist}
-
-{/if}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/public/articleList.html b/code/app/home/view/kuangYu/public/articleList.html
deleted file mode 100644
index 36ed3c6..0000000
--- a/code/app/home/view/kuangYu/public/articleList.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
- {$key+=1}
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/public/footer.html b/code/app/home/view/kuangYu/public/footer.html
deleted file mode 100644
index c1b4b51..0000000
--- a/code/app/home/view/kuangYu/public/footer.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/public/novelListH.html b/code/app/home/view/kuangYu/public/novelListH.html
deleted file mode 100644
index e563bfd..0000000
--- a/code/app/home/view/kuangYu/public/novelListH.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
- {$arrGrm[$key+[start]]|raw}
-
- {$Novel.n_description ?? ''}
-
-
- 作者:{$Novel.n_author ?? ''}
-
- {$Novel->n_category ?? ''}
- {$Novel->n_status ?? ''}
-
-
-
-
-
-
diff --git a/code/app/home/view/kuangYu/public/novelListRank.html b/code/app/home/view/kuangYu/public/novelListRank.html
deleted file mode 100644
index 1c81f8f..0000000
--- a/code/app/home/view/kuangYu/public/novelListRank.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
- {$key}
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/public/novelListS.html b/code/app/home/view/kuangYu/public/novelListS.html
deleted file mode 100644
index 553f7a8..0000000
--- a/code/app/home/view/kuangYu/public/novelListS.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
- {$arrGrm[$key+[start]]|raw}
-
-
- {$Novel.n_name ?? ''}
-
- 作者:{$Novel.n_author ?? ''}
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/user/getBookShelf.html b/code/app/home/view/kuangYu/user/getBookShelf.html
deleted file mode 100644
index ff88f1b..0000000
--- a/code/app/home/view/kuangYu/user/getBookShelf.html
+++ /dev/null
@@ -1,59 +0,0 @@
-{extend name="baseH5User" /}
-{block name="title"}我的书架{/block}
-{block name="keywords"}我的书架{/block}
-{block name="description"}我的书架{/block}
-{block name="head"}
-
-
-
-
-
-
-
-{block name="head-js"}{/block}
-
-{block name="head-name"}我的书架{/block}
-{block name="main"}
-{site:grm page_code="h5_bookshekf" diff="0" num="10" g_key="arrGrm" /}
-
-{$arrGrm[0]|raw}
-
- {$arrGrm[3]|raw}
-
- 完成
- 管理
-
- {$arrGrm[2]|raw}
-
- {$arrGrm[4]|raw}
-
-
-
-
-{$arrGrm[1]|raw}
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/user/getHistory.html b/code/app/home/view/kuangYu/user/getHistory.html
deleted file mode 100644
index ae22b0e..0000000
--- a/code/app/home/view/kuangYu/user/getHistory.html
+++ /dev/null
@@ -1,62 +0,0 @@
-{extend name="baseH5User" /}
-{block name="title"}我的阅读记录{/block}
-{block name="keywords"}我的阅读记录{/block}
-{block name="description"}我的阅读记录{/block}
-{block name="head"}
-
-
-
-
-
-
-
-{block name="head-js"}{/block}
-
-{block name="head-name"}最近阅读{/block}
-{block name="main"}
-
-{site:grm page_code="h5_history" diff="0" num="10" g_key="arrGrm" /}
-
-{$arrGrm[0]|raw}
-
- {$arrGrm[1]|raw}
-
- 完成
- 管理
-
- {$arrGrm[2]|raw}
-
-
-
- {$arrGrm[4]|raw}
-
-
-
-{$arrGrm[5]|raw}
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/user/index.html b/code/app/home/view/kuangYu/user/index.html
deleted file mode 100644
index c3e2f5e..0000000
--- a/code/app/home/view/kuangYu/user/index.html
+++ /dev/null
@@ -1,74 +0,0 @@
-{extend name="baseH5User" /}
-{block name="title"}个人中心{/block}
-{block name="keywords"}个人中心{/block}
-{block name="description"}个人中心{/block}
-{block name="head"}
-
-
-
-
-
-
-
-{block name="head-js"}{/block}
-
-{block name="head-name"}用户中心{/block}
-{block name="main"}
-{site:grm page_code="userinfo" diff="0" num="10" g_key="arrGrm" /}
-{$arrGrm[0]|raw}
-
- {$arrGrm[1]|raw}
-
-
- {$arrGrm[3]|raw}
-
-
-
-
-
-
-
-
-{$arrGrm[5]|raw}
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/分类书库页面TKD.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/分类书库页面TKD.md
deleted file mode 100644
index 975ddfb..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/分类书库页面TKD.md
+++ /dev/null
@@ -1,213 +0,0 @@
-最牛的seo 优化大师
-这个是 替换标识 这个页面下面的标签都可以使用 ,{strSiteKeywords} 是全局公用关键词,你看看怎么使用
-'{strSiteName}' => '这个是网站名',
-'{strSiteDomain}' => '这个是站点域名',
-'{strSiteKeywords}' => '这个是网站全局通用关键字',
-'{intPage}' => '当前页面分页页码',
-'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
-'{strNovelCategoryName}' => '当前页面小说分类名字',
-'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
-
-
-这个是分类或者书库的路由,公用一套视图模板
-/shuku/:strGender/:strCategory/:strStatus/page:intPage
-
-
-请根据路由和上面的替换标识,你帮忙设计100套最友好seo的 tkd 替换模板,字数要符合常规,不要超标也不要少,质量要保证
-返回格式:
-title :[
- '{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页',
- '{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页',
- ..
-]
-
-keywords: [
- '{strNovelCategoryName}, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读',
- ..
- ]
-description: [
- '{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费阅读,第{intPage}页汇聚热门作品,欢迎体验{strSiteDomain}!',
- ..
- ]
-
-
-
-好的,我会根据你提供的书库路由 `/shuku/:strGender/:strCategory/:strStatus/page:intPage` 和替换标识,设计一个最优的 SEO 友好的 TKD 模板。你的案例已经给出了一个分类页的模板,我会在此基础上优化,确保它既符合书库页面的特点,又最大化 SEO 效果。
-
----
-
-### **分析**
-#### **路由特点**
-- **路由**:`/shuku/:strGender/:strCategory/:strStatus/page:intPage`
- - `:strGender`:性别筛选(男生/女生/全部)。
- - `:strCategory`:分类(如玄幻、言情)。
- - `:strStatus`:状态(连载/完结/全部)。
- - `:intPage`:分页页码。
-- **页面类型**:书库或分类页面,展示符合筛选条件的小说列表,支持分页。
-- **SEO 目标**:
- - 突出筛选条件(性别、分类、状态)。
- - 支持分页优化。
- - 融入品牌词并吸引点击。
-
-#### **替换标识使用**
-- **核心字段**:
- - `{strNovelSex}`:对应 `:strGender`。
- - `{strNovelCategoryName}`:对应 `:strCategory`。
- - `{strNovelStatus}`:对应 `:strStatus`。
- - `{intPage}`:对应 `:intPage`。
- - `{strSiteName}`、 `{strSiteDomain}`:品牌词。
-- **不适用字段**:
- - `{strNovelName}`、 `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strNovelAuthor}`、 `{strNovelDescription}`:书库页不涉及具体小说。
- - `{strSearchKeywords}`:搜索页专用。
-
-#### **SEO 优化原则**
-- **Title**:简洁(60 字符内),突出筛选条件和品牌。
-- **Keywords**:覆盖分类、性别、状态等核心词,5-10 个。
-- **Description**:吸引点击,融入筛选条件和网站特色。
-
----
-
-### **优化后的 TKD 模板**
-以下是基于你的案例优化后的 TKD 模板:
-
-#### **1. Title**(控制在 60 字符以内)
-- **模板**:`{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页`
-- **优化点**:
- - 保留你的案例结构,简洁直观。
- - `{intPage}` 仅在大于 1 时显示,避免首页面冗余。
-- **示例**(`/shuku/nansheng-xiaoshuo/xuanhuan/lianzai/page2`):
- - `男生玄幻连载小说 - 这个是网站名 - 第2页`
-
-#### **2. Keywords**(5-10 个核心词)
-- **模板**:`{strNovelCategoryName}小说, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费小说, 在线阅读`
-- **优化点**:
- - 增加“免费小说”和“在线阅读”,提升行业词覆盖。
- - `{strSiteName}` 作为品牌词,不重复 `{strSiteKeywords}`,保持简洁。
-- **示例**:
- - `玄幻小说, 男生小说, 连载小说, 这个是网站名, 免费小说, 在线阅读`
-
-#### **3. Description**(150-160 字符)
-- **模板**:`{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费在线阅读,第{intPage}页精选热门作品,畅享{strSiteDomain}!`
-- **优化点**:
- - 替换“欢迎体验”为“畅享”,更吸引移动端用户。
- - 加入“精选热门作品”,提升点击欲望。
-- **示例**:
- - `这个是网站名提供男生玄幻连载小说免费在线阅读,第2页精选热门作品,畅享这个是站点域名!`
-
----
-
-### **参数映射**
-- `{strNovelSex}`:
- - `nansheng-xiaoshuo` → '男生'
- - `nvsheng-xiaoshuo` → '女生'
- - `all` → ''(空)
-- `{strNovelCategoryName}`:
- - `xuanhuan` → '玄幻'
- - `yanqing` → '言情'
- - `all` → ''(需完整映射表)
-- `{strNovelStatus}`:
- - `lianzai` → '连载'
- - `wanjie` → '完结'
- - `all` → ''(空)
-- `{intPage}`:直接使用路由中的 `:intPage`
-- `{strSiteName}` → '这个是网站名'
-- `{strSiteDomain}` → '这个是站点域名'
-- `{strSiteTitle}` → '这个是网站标题'
-- `{strSiteKeywords}` → '这个是网站关键字'
-- `{strNovelName}`、 `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strNovelAuthor}`、 `{strNovelDescription}`、 `{strSearchKeywords}` → 空
-
----
-
-### **完整拼接示例**
-#### **1. 全默认:`/shuku/all/all/all/page1`**
-- **Title**:`小说 - 这个是网站名`
-- **Keywords**:`小说, 这个是网站名, 免费小说, 在线阅读`
-- **Description**:`这个是网站名提供小说免费在线阅读,第1页精选热门作品,畅享这个是站点域名!`
-
-#### **2. 具体筛选:`/shuku/nansheng-xiaoshuo/xuanhuan/lianzai/page2`**
-- **Title**:`男生玄幻连载小说 - 这个是网站名 - 第2页`
-- **Keywords**:`玄幻小说, 男生小说, 连载小说, 这个是网站名, 免费小说, 在线阅读`
-- **Description**:`这个是网站名提供男生玄幻连载小说免费在线阅读,第2页精选热门作品,畅享这个是站点域名!`
-
-#### **3. 女生完结:`/shuku/nvsheng-xiaoshuo/yanqing/wanjie/page1`**
-- **Title**:`女生言情完结小说 - 这个是网站名`
-- **Keywords**:`言情小说, 女生小说, 完结小说, 这个是网站名, 免费小说, 在线阅读`
-- **Description**:`这个是网站名提供女生言情完结小说免费在线阅读,第1页精选热门作品,畅享这个是站点域名!`
-
----
-
-### **实现代码(伪代码)**
-```php
-public function getLibrary($strGender, $strCategory, $strStatus, $intPage) {
- $genderMap = [
- 'nansheng-xiaoshuo' => '男生',
- 'nvsheng-xiaoshuo' => '女生',
- 'all' => ''
- ];
- $categoryMap = [
- 'xuanhuan' => '玄幻',
- 'yanqing' => '言情',
- // 更多分类...
- ];
- $statusMap = [
- 'lianzai' => '连载',
- 'wanjie' => '完结',
- 'all' => ''
- ];
-
- $replacements = [
- '{strSiteName}' => '这个是网站名',
- '{strSiteDomain}' => '这个是站点域名',
- '{strSiteTitle}' => '这个是网站标题',
- '{strSiteKeywords}' => '这个是网站关键字',
- '{strNovelSex}' => $genderMap[$strGender] ?? '',
- '{strNovelCategoryName}' => $categoryMap[$strCategory] ?? $strCategory,
- '{strNovelStatus}' => $statusMap[$strStatus] ?? '',
- '{intPage}' => $intPage,
- '{strNovelName}' => '',
- '{strNovelChapterName}' => '',
- '{strNovelChapterSort}' => '',
- '{strNovelAuthor}' => '',
- '{strNovelDescription}' => '',
- '{strSearchKeywords}' => ''
- ];
-
- $pageStr = $intPage > 1 ? " - 第{intPage}页" : '';
- $title = "{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName}{$pageStr}";
- $keywords = "{strNovelCategoryName}小说, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费小说, 在线阅读";
- $description = "{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费在线阅读,第{intPage}页精选热门作品,畅享{strSiteDomain}!";
-
- foreach ($replacements as $key => $value) {
- $title = str_replace($key, $value, $title);
- $keywords = str_replace($key, $value, $keywords);
- $description = str_replace($key, $value, $description);
- }
-
- return view('library', [
- 'title' => $title,
- 'keywords' => $keywords,
- 'description' => $description,
- 'gender' => $strGender,
- 'category' => $strCategory,
- 'status' => $strStatus,
- 'page' => $intPage
- ]);
-}
-```
-
----
-
-### **SEO 优化亮点**
-1. **动态筛选**:`{strNovelSex}`、 `{strNovelCategoryName}`、 `{strNovelStatus}` 组合覆盖多种搜索意图(如“男生玄幻连载小说”)。
-2. **分页友好**:首页面简洁,后续页面自然融入 `{intPage}`,可配合 `rel="next/prev"`。
-3. **品牌强化**:`{strSiteName}` 和 `{strSiteDomain}` 提升网站辨识度。
-4. **行业词**:增加“免费小说”“在线阅读”,契合用户搜索习惯。
-
----
-
-### **与你的案例对比**
-- **Title**:保留你的结构,优化分页显示。
-- **Keywords**:增加“免费小说”“在线阅读”,提升覆盖。
-- **Description**:用“畅享”替代“欢迎体验”,更吸引人。
-
-这个 TKD 模板是书库页面的最优 SEO 方案。如果需要进一步调整(比如更短的 Title 或特定关键词),可以告诉我!
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/小说排行榜的Tkd.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/小说排行榜的Tkd.md
deleted file mode 100644
index a99a434..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/小说排行榜的Tkd.md
+++ /dev/null
@@ -1,180 +0,0 @@
-最牛的seo 优化大师
-这个是 替换标识 这个页面下面的标签都可以使用,{strSiteKeywords} 是全局公用关键词,你看看怎么使用
-'{strSiteName}' => '这个是网站名',
-'{strSiteDomain}' => '这个是站点域名',
-'{strSiteKeywords}' => '这个是网站全局通用关键字',
-'{intPage}' => '当前页面分页页码',
-
-这个是小说排行榜的路由,公用一套视图模板
-/paihang/all
-
-请根据路由和上面的替换标识,你帮忙设计100套最友好seo的 tkd 替换模板,字数要符合常规,不要超标也不要少,质量要保证
-返回格式:
-title :[
- '小说排行榜 - {strSiteName} - 第{intPage}页',
- ..
-]
-
-keywords: [
- '小说排行榜, 热门小说, 小说推荐, {strSiteKeywords}, {strSiteName}, 免费阅读',
- ..
- ]
-description: [
- '{strSiteName}提供小说排行榜,第{intPage}页精选热门小说免费阅读,最新排行一览无余,畅享{strSiteDomain}!',
- ..
- ]
-
-
-好的,我会根据你提供的小说排行榜路由 `/paihang/all` 和替换标识,设计一个最优的 SEO 友好的 TKD 模板。小说排行榜页面与分类页面不同,它展示的是热门或推荐的小说列表,通常不涉及具体的性别、分类或状态筛选,而是突出“排行榜”这一特性。以下是我的设计:
-
----
-
-### **分析**
-#### **路由特点**
-- **路由**:`/paihang/all`
- - `all`:表示全部排行榜(可能是默认或唯一的排行榜类型)。
- - 无显式分页参数,但可能通过视图逻辑支持分页(如 `?page=2`)。
-- **页面类型**:小说排行榜页面,展示热门小说列表,可能按点击量、更新时间等排序。
-- **SEO 目标**:
- - 突出“排行榜”特性,吸引搜索热门小说的用户。
- - 支持分页优化(如果有)。
- - 融入品牌词并提升点击率。
-
-#### **替换标识使用**
-- **核心字段**:
- - `{strSiteName}`、 `{strSiteDomain}`、 `{strSiteKeywords}`:品牌和公用关键词。
- - `{intPage}`:分页页码(若支持分页)。
-- **不适用字段**:
- - `{strNovelSex}`、 `{strNovelCategoryName}`、 `{strNovelStatus}`:排行榜页面不涉及具体筛选。
- - `{strNovelName}`、 `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strNovelAuthor}`、 `{strNovelDescription}`:不涉及单本小说。
- - `{strSearchKeywords}`:搜索页专用。
- - `{strIndexTitle}`、 `{strIndexKeywords}`、 `{strIndexDescription}`:首页专用。
-
-#### **SEO 优化原则**
-- **Title**:简洁(60 字符内),突出排行榜和品牌。
-- **Keywords**:覆盖排行榜相关词和网站公用关键词。
-- **Description**:吸引点击,强调热门小说和免费阅读。
-
----
-
-### **优化后的 TKD 模板**
-以下是专为小说排行榜页面设计的 TKD 模板:
-
-#### **1. Title**(控制在 60 字符以内)
-- **模板**:`小说排行榜 - {strSiteName} - 第{intPage}页`
-- **优化点**:
- - “小说排行榜”作为核心关键词,匹配用户搜索(如“小说排行榜”)。
- - `{strSiteName}` 强化品牌。
- - `{intPage}` 仅在大于 1 时显示,避免首页面冗余。
-- **示例**(`/paihang/all`,假设无分页或 `intPage = 1`):
- - `小说排行榜 - 这个是网站名`
-
-#### **2. Keywords**(5-10 个核心词)
-- **模板**:`小说排行榜, 热门小说, 小说推荐, {strSiteKeywords}, {strSiteName}, 免费阅读`
-- **优化点**:
- - “小说排行榜”、“热门小说”、“小说推荐”突出页面主题。
- - `{strSiteKeywords}` 复用网站公用关键词(如“这个是网站关键字”)。
- - `{strSiteName}` 作为品牌词。
- - “免费阅读”增加行业词覆盖。
-- **示例**(假设 `{strSiteKeywords}` = '小说, 免费小说, 在线阅读'):
- - `小说排行榜, 热门小说, 小说推荐, 小说, 免费小说, 在线阅读, 这个是网站名, 免费阅读`
-
-#### **3. Description**(150-160 字符)
-- **模板**:`{strSiteName}提供小说排行榜,第{intPage}页精选热门小说免费阅读,最新排行一览无余,畅享{strSiteDomain}!`
-- **优化点**:
- - 突出“排行榜”和“热门小说”,吸引用户。
- - “免费阅读”和“畅享”提升点击欲望。
- - `{strSiteName}` 和 `{strSiteDomain}` 强化品牌。
-- **示例**:
- - `这个是网站名提供小说排行榜,第1页精选热门小说免费阅读,最新排行一览无余,畅享这个是站点域名!`
-
----
-
-### **参数映射**
-- `{strSiteName}` → '这个是网站名'
-- `{strSiteDomain}` → '这个是站点域名'
-- `{strSiteKeywords}` → '这个是网站关键字'(假设为“小说, 免费小说, 在线阅读”)
-- `{intPage}` → 默认 '1'(若路由支持分页,则从参数获取,如 `?page=2`)
-- `{strNovelName}`、 `{strNovelSex}`、 `{strNovelCategoryName}`、 `{strNovelStatus}`、 `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strNovelAuthor}`、 `{strNovelDescription}`、 `{strSearchKeywords}` → 空
-
----
-
-### **完整拼接示例**
-#### **路由:`/paihang/all`(假设 intPage = 1)**
-- 假设:
- - `{strSiteKeywords}` = '小说, 免费小说, 在线阅读'
- - `{intPage}` = '1'
-- **Title**:
- - `小说排行榜 - 这个是网站名`
-- **Keywords**:
- - `小说排行榜, 热门小说, 小说推荐, 小说, 免费小说, 在线阅读, 这个是网站名, 免费阅读`
-- **Description**:
- - `这个是网站名提供小说排行榜,第1页精选热门小说免费阅读,最新排行一览无余,畅享这个是站点域名!`
-
-#### **路由:`/paihang/all?page=2`(假设支持分页)**
-- `{intPage}` = '2'
-- **Title**:
- - `小说排行榜 - 这个是网站名 - 第2页`
-- **Keywords**:
- - `小说排行榜, 热门小说, 小说推荐, 小说, 免费小说, 在线阅读, 这个是网站名, 免费阅读`
-- **Description**:
- - `这个是网站名提供小说排行榜,第2页精选热门小说免费阅读,最新排行一览无余,畅享这个是站点域名!`
-
----
-
-### **实现代码(伪代码)**
-```php
-public function getRanking() {
- $replacements = [
- '{strSiteName}' => '这个是网站名',
- '{strSiteDomain}' => '这个是站点域名',
- '{strSiteKeywords}' => '小说, 免费小说, 在线阅读', // 使用你配置的公用关键词
- '{strSiteDescription}' => '这个是网站描述',
- '{intPage}' => request()->input('page', 1), // 默认第1页,假设分页通过查询参数传入
- '{strNovelName}' => '',
- '{strNovelSex}' => '',
- '{strNovelCategoryName}' => '',
- '{strNovelStatus}' => '',
- '{strNovelChapterName}' => '',
- '{strNovelChapterSort}' => '',
- '{strNovelAuthor}' => '',
- '{strNovelDescription}' => '',
- '{strSearchKeywords}' => ''
- ];
-
- $pageStr = $replacements['{intPage}'] > 1 ? " - 第{intPage}页" : '';
- $title = "小说排行榜 - {strSiteName}{$pageStr}";
- $keywords = "小说排行榜, 热门小说, 小说推荐, {strSiteKeywords}, {strSiteName}, 免费阅读";
- $description = "{strSiteName}提供小说排行榜,第{intPage}页精选热门小说免费阅读,最新排行一览无余,畅享{strSiteDomain}!";
-
- foreach ($replacements as $key => $value) {
- $title = str_replace($key, $value, $title);
- $keywords = str_replace($key, $value, $keywords);
- $description = str_replace($key, $value, $description);
- }
-
- return view('ranking', [
- 'title' => $title,
- 'keywords' => $keywords,
- 'description' => $description,
- 'page' => $replacements['{intPage}']
- ]);
-}
-```
-
----
-
-### **SEO 优化亮点**
-1. **排行榜特性**:`小说排行榜` 匹配用户搜索(如“小说排行榜 2023”)。
-2. **公用关键词**:`{strSiteKeywords}` 融入 Keywords,提升网站整体相关性。
-3. **分页支持**:`{intPage}` 动态调整,首页面简洁,后续页面自然扩展。
-4. **品牌强化**:`{strSiteName}` 和 `{strSiteDomain}` 提升辨识度。
-5. **吸引点击**:突出“热门小说”和“免费阅读”,契合用户需求。
-
----
-
-### **与分类案例的区别**
-- **分类页**:聚焦筛选条件(如“男生玄幻连载小说”),多类别。
-- **排行榜页**:聚焦热门小说推荐(如“小说排行榜”),无具体筛选。
-
-这个 TKD 模板是小说排行榜页面的最优 SEO 方案。如果你的 `{strSiteKeywords}` 有具体值(而不是“这个是网站关键字”),或路由支持其他参数(比如不同排行榜类型),请告诉我,我再调整!你觉得如何?
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/小说章节目录页面TKD.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/小说章节目录页面TKD.md
deleted file mode 100644
index 2fac59f..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/小说章节目录页面TKD.md
+++ /dev/null
@@ -1,212 +0,0 @@
-最牛的seo 优化大师
-词量好像少了点,想无广告 最新章节 这些。。 你看看可以加多些词入取,你看看 顶级同行是咋做的,多收罗些数据
-这个是 替换标识 这个页面下面的标签都可以使用,{strSiteKeywords} 是全局公用关键词,你看看怎么使用
-'{strSiteName}' => '这个是网站名',
-'{strSiteDomain}' => '这个是站点域名',
-'{strSiteKeywords}' => '这个是网站全局通用关键字',
-'{strNovelName}' => '这个是当前页面小说名字',
-'{strNovelCategoryName}' => '当前页面小说分类名字',
-'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
-'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
-'{strNovelAuthor}' => '小说作者',
-'{strNovelDescription}' => '小说简介',
-'{intPage}' => '当前页面分页页码',
-
-这个是小说章节目录页面的路由
-/xiaoshuo/[小说拼音]-[小说id]/mulu/order/[page]
-
-请根据路由和上面的替换标识,你帮忙设计200套最友好seo的 tkd 替换模板,字数要符合常规,不要超标也不要少,质量要保证,不要重复
-返回格式:
-title :[
- '{strNovelName}章节目录 - {strSiteName} - 第{intPage}页',
- ..
-]
-
-keywords: [
- '{strNovelName}, {strNovelName}章节目录, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strSiteKeywords}, {strSiteName}',
- ..
- ]
-description: [
- '{strSiteName}提供{strNovelName}章节目录免费查看,第{intPage}页包含最新{strNovelStatus}章节,{strNovelAuthor}创作,畅享{strSiteDomain}!',
- ..
- ]
-
-
-好的,我会根据你提供的小说章节目录页面路由 `/xiaoshuo/[小说拼音]-[小说id]/mulu/order/[page]` 和替换标识,设计一个最优的 SEO 友好的 TKD 模板。小说章节目录页面与分类页面和章节页面不同,它展示的是某本小说的章节列表,通常按顺序排列并支持分页,因此需要突出小说名、目录特性以及分页信息。以下是我的设计:
-
----
-
-### **分析**
-#### **路由特点**
-- **路由**:`/xiaoshuo/[小说拼音]-[小说id]/mulu/order/[page]`
- - `[小说拼音]`:小说拼音(如 `douluodalu`)。
- - `[小说id]`:小说 ID(如 `123`)。
- - `/mulu/`:表示章节目录。
- - `order`:可能表示排序方式(假设为固定值,未明确变化)。
- - `[page]`:分页页码。
-- **页面类型**:小说章节目录页面,展示某本小说的所有章节列表,支持分页。
-- **SEO 目标**:
- - 突出小说名和“章节目录”特性,吸引搜索目录的用户。
- - 支持分页优化。
- - 融入品牌词并提升点击率。
-
-#### **替换标识使用**
-- **核心字段**:
- - `{strNovelName}`:小说标题。
- - `{intPage}`:分页页码。
- - `{strNovelAuthor}`:小说作者。
- - `{strNovelCategoryName}`:小说分类。
- - `{strNovelSex}`:男生/女生小说。
- - `{strNovelStatus}`:连载/完结。
- - `{strSiteName}`、 `{strSiteDomain}`、 `{strSiteKeywords}`:品牌和公用关键词。
-- **不适用字段**:
- - `{strNovelChapterName}`、 `{strNovelChapterSort}`:目录页不涉及具体章节。
- - `{strSearchKeywords}`:搜索页专用。
- - `{strIndexTitle}`、 `{strIndexKeywords}`、 `{strIndexDescription}`:首页专用。
-
-#### **SEO 优化原则**
-- **Title**:简洁(60 字符内),突出小说名和目录特性。
-- **Keywords**:覆盖小说名、目录、分类等高相关性词。
-- **Description**:吸引点击,强调章节目录和免费阅读。
-
----
-
-### **优化后的 TKD 模板**
-以下是专为小说章节目录页面设计的 TKD 模板:
-
-#### **1. Title**(控制在 60 字符以内)
-- **模板**:`{strNovelName}章节目录 - {strSiteName} - 第{intPage}页`
-- **优化点**:
- - `{strNovelName}` 放在首位,匹配用户搜索(如“斗罗大陆 章节目录”)。
- - “章节目录”明确页面类型。
- - `{strSiteName}` 强化品牌。
- - `{intPage}` 仅在大于 1 时显示,避免首页面冗余。
-- **示例**(`/xiaoshuo/douluodalu-123/mulu/order/2`):
- - `斗罗大陆章节目录 - 这个是网站名 - 第2页`
-
-#### **2. Keywords**(5-10 个核心词)
-- **模板**:`{strNovelName}, {strNovelName}章节目录, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strSiteKeywords}, {strSiteName}`
-- **优化点**:
- - `{strNovelName}` 和 `{strNovelName}章节目录` 是核心词。
- - `{strNovelAuthor}` 提升作者相关搜索。
- - `{strNovelCategoryName}小说` 和 `{strNovelSex}小说` 增加分类相关性。
- - `{strSiteKeywords}` 复用网站公用关键词(如“这个是网站关键字”)。
- - `{strSiteName}` 作为品牌词。
-- **示例**(假设 `{strSiteKeywords}` = '小说, 免费小说, 在线阅读'):
- - `斗罗大陆, 斗罗大陆章节目录, 唐家三少, 玄幻小说, 男生小说, 小说, 免费小说, 在线阅读, 这个是网站名`
-
-#### **3. Description**(150-160 字符)
-- **模板**:`{strSiteName}提供{strNovelName}章节目录免费查看,第{intPage}页包含最新{strNovelStatus}章节,{strNovelAuthor}创作,畅享{strSiteDomain}!`
-- **优化点**:
- - 突出“章节目录免费查看”,吸引用户。
- - `{strNovelStatus}` 体现小说状态。
- - `{strNovelAuthor}` 增加权威性。
- - “畅享”提升吸引力。
-- **示例**:
- - `这个是网站名提供斗罗大陆章节目录免费查看,第2页包含最新连载章节,唐家三少创作,畅享这个是站点域名!`
-
----
-
-### **参数映射**
-- `{strNovelName}`:从数据库根据 `[小说id]` 获取小说标题。
-- `{intPage}`:直接使用路由中的 `[page]`。
-- `{strNovelAuthor}`:从数据库获取作者名。
-- `{strNovelCategoryName}`:从数据库获取分类(如“玄幻”)。
-- `{strNovelSex}`:从数据库获取性别(如“男生”)。
-- `{strNovelStatus}`:从数据库获取状态(如“连载”)。
-- `{strSiteName}` → '这个是网站名'
-- `{strSiteDomain}` → '这个是站点域名'
-- `{strSiteKeywords}` → '这个是网站关键字'(假设为“小说, 免费小说, 在线阅读”)
-- `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strSearchKeywords}` → 空
-
----
-
-### **完整拼接示例**
-#### **路由:`/xiaoshuo/douluodalu-123/mulu/order/1`**
-- 假设:
- - `{strNovelName}` = '斗罗大陆'
- - `{intPage}` = '1'
- - `{strNovelAuthor}` = '唐家三少'
- - `{strNovelCategoryName}` = '玄幻'
- - `{strNovelSex}` = '男生'
- - `{strNovelStatus}` = '连载'
- - `{strSiteKeywords}` = '小说, 免费小说, 在线阅读'
-- **Title**:
- - `斗罗大陆章节目录 - 这个是网站名`
-- **Keywords**:
- - `斗罗大陆, 斗罗大陆章节目录, 唐家三少, 玄幻小说, 男生小说, 小说, 免费小说, 在线阅读, 这个是网站名`
-- **Description**:
- - `这个是网站名提供斗罗大陆章节目录免费查看,第1页包含最新连载章节,唐家三少创作,畅享这个是站点域名!`
-
-#### **路由:`/xiaoshuo/douluodalu-123/mulu/order/2`**
-- `{intPage}` = '2'
-- **Title**:
- - `斗罗大陆章节目录 - 这个是网站名 - 第2页`
-- **Keywords**:
- - `斗罗大陆, 斗罗大陆章节目录, 唐家三少, 玄幻小说, 男生小说, 小说, 免费小说, 在线阅读, 这个是网站名`
-- **Description**:
- - `这个是网站名提供斗罗大陆章节目录免费查看,第2页包含最新连载章节,唐家三少创作,畅享这个是站点域名!`
-
----
-
-### **实现代码(伪代码)**
-```php
-public function getChapterList($strPinYin, $intNId, $intPage) {
- // 假设从数据库获取小说信息
- $novel = Novel::find($intNId);
-
- $replacements = [
- '{strSiteName}' => '这个是网站名',
- '{strSiteDomain}' => '这个是站点域名',
- '{strSiteKeywords}' => '小说, 免费小说, 在线阅读', // 使用你配置的公用关键词
- '{strSiteDescription}' => '这个是网站描述',
- '{strNovelName}' => $novel->title ?? '',
- '{intPage}' => $intPage,
- '{strNovelAuthor}' => $novel->author ?? '',
- '{strNovelCategoryName}' => $novel->category ?? '',
- '{strNovelSex}' => $novel->sex === 'boys' ? '男生' : '女生',
- '{strNovelStatus}' => $novel->status === 'ongoing' ? '连载' : '完结',
- '{strNovelChapterName}' => '',
- '{strNovelChapterSort}' => '',
- '{strNovelDescription}' => $novel->description ?? '',
- '{strSearchKeywords}' => ''
- ];
-
- $pageStr = $intPage > 1 ? " - 第{intPage}页" : '';
- $title = "{strNovelName}章节目录 - {strSiteName}{$pageStr}";
- $keywords = "{strNovelName}, {strNovelName}章节目录, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strSiteKeywords}, {strSiteName}";
- $description = "{strSiteName}提供{strNovelName}章节目录免费查看,第{intPage}页包含最新{strNovelStatus}章节,{strNovelAuthor}创作,畅享{strSiteDomain}!";
-
- foreach ($replacements as $key => $value) {
- $title = str_replace($key, $value, $title);
- $keywords = str_replace($key, $value, $keywords);
- $description = str_replace($key, $value, $description);
- }
-
- return view('chapter_list', [
- 'title' => $title,
- 'keywords' => $keywords,
- 'description' => $description,
- 'novel' => $novel,
- 'page' => $intPage
- ]);
-}
-```
-
----
-
-### **SEO 优化亮点**
-1. **目录特性**:`{strNovelName}章节目录` 匹配用户搜索(如“斗罗大陆 目录”)。
-2. **公用关键词**:`{strSiteKeywords}` 融入 Keywords,提升网站整体相关性。
-3. **分页友好**:`{intPage}` 动态调整,首页面简洁,后续页面自然扩展。
-4. **品牌强化**:`{strSiteName}` 和 `{strSiteDomain}` 提升辨识度。
-5. **吸引点击**:突出“免费查看”和“最新章节”,契合用户需求。
-
----
-
-### **与分类案例的区别**
-- **分类页**:聚焦筛选条件(如“男生玄幻连载小说”),多类别。
-- **目录页**:聚焦单本小说的章节列表(如“斗罗大陆章节目录”),无具体章节内容。
-
-这个 TKD 模板是小说章节目录页的最优 SEO 方案。如果你的 `{strSiteKeywords}` 配置有具体值(而不是“这个是网站关键字”),请告诉我,我再调整!觉得如何?
-
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/小说章节页面TKD.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/小说章节页面TKD.md
deleted file mode 100644
index fb4ba1f..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/小说章节页面TKD.md
+++ /dev/null
@@ -1,215 +0,0 @@
-最牛的seo 优化大师
-词量好像少了点,想无广告 最新章节 这些。。 你看看可以加多些词入取,你看看 顶级同行是咋做的,多收罗些数据
-这个是 替换标识 这个页面下面的标签都可以使用,{strSiteKeywords} 是全局公用关键词,你看看怎么使用
-'{strSiteName}' => '这个是网站名',
-'{strSiteDomain}' => '这个是站点域名',
-'{strSiteKeywords}' => '这个是网站全局通用关键字',
-'{strNovelName}' => '这个是当前页面小说名字',
-'{strNovelChapterName}' => '当前页面小说章节名字',
-'{strNovelChapterSort}' => '当前页面小说章节排序号',
-'{strChapterDescription}' => '当前页面小说章节描述',
-'{strNovelCategoryName}' => '当前页面小说分类名字',
-'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
-'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
-'{strNovelAuthor}' => '小说作者',
-'{strNovelDescription}' => '小说简介',
-
-这个是小说章节页面的路由
-/xiaoshuo/小说拼音-小说id/zhang-章节排序/章节分页
-
-请根据路由和上面的替换标识,你帮忙设计200套最友好seo的 tkd 替换模板,字数要符合常规,不要超标也不要少,质量要保证,不要重复
-返回格式:
-title :[
- '{strNovelName} 第{strNovelChapterSort}章 - {strSiteName}',
- ..
-]
-
-keywords: [
- '{strNovelName}, 第{strNovelChapterSort}章, {strSiteKeywords}, {strSiteName}, 在线小说, {strNovelStatus}',
- ..
- ]
-description: [
- '{strSiteName}提供{strNovelName} {strNovelChapterName}免费阅读,{strNovelSex}小说{strNovelCategoryName},{strNovelStatus},畅享{strSiteDomain}!',
- ..
- ]
-
-
-
-好的,我会根据你提供的小说章节页面路由 `/xiaoshuo/小说拼音-小说id/zhang-章节排序/章节分页` 和替换标识,设计一个最优的 SEO 友好的 TKD 模板。小说章节页面与分类页面和详情页面不同,它聚焦于具体章节内容,因此需要突出小说名、章节名和排序,同时优化分页和搜索可见性。以下是我的设计:
-
----
-
-### **分析**
-#### **路由特点**
-- **路由**:`/xiaoshuo/{strPinYin}-{intNId}/zhang-{intChapterSort}/{intPage}`
- - `{strPinYin}`:小说拼音(如 `douluodalu`)。
- - `{intNId}`:小说 ID(如 `123`)。
- - `{intChapterSort}`:章节排序号(如 `5`,表示第 5 章)。
- - `{intPage}`:章节分页(如长章节可能分多页显示)。
-- **页面类型**:小说章节页面,展示具体章节内容,可能包含分页。
-- **SEO 目标**:
- - 突出小说名和章节信息,吸引搜索具体章节的用户。
- - 支持分页优化。
- - 融入品牌词并提升阅读吸引力。
-
-#### **替换标识使用**
-- **核心字段**:
- - `{strNovelName}`:小说标题。
- - `{strNovelChapterName}`:章节名字。
- - `{strNovelChapterSort}`:章节排序号。
- - `{intPage}`:章节分页页码。
- - `{strNovelAuthor}`:小说作者。
- - `{strNovelCategoryName}`:小说分类。
- - `{strNovelSex}`:男生/女生小说。
- - `{strNovelStatus}`:连载/完结。
- - `{strSiteName}`、 `{strSiteDomain}`:品牌词。
-- **不适用字段**:
- - `{strSearchKeywords}`:搜索页专用。
- - `{strSiteTitle}`、 `{strSiteKeywords}`、 `{strSiteDescription}`:更适合全局使用。
-
-#### **SEO 优化原则**
-- **Title**:简洁(60 字符内),包含小说名和章节信息。
-- **Keywords**:覆盖小说名、章节、分类等高相关性词。
-- **Description**:吸引点击,融入章节相关信息。
-
----
-
-### **优化后的 TKD 模板**
-以下是专为小说章节页面设计的 TKD 模板:
-
-#### **1. Title**(控制在 60 字符以内)
-- **模板**:`{strNovelName} 第{strNovelChapterSort}章 {strNovelChapterName} - {strSiteName}`
-- **优化点**:
- - `{strNovelName}` 和 `{strNovelChapterSort}` 突出具体章节,匹配用户搜索(如“斗罗大陆 第5章”)。
- - `{strNovelChapterName}` 增加可读性。
- - `{strSiteName}` 强化品牌。
- - 若 `{intPage}` > 1,可附加“- 第{intPage}页”,但需控制长度。
-- **示例**(`/xiaoshuo/douluodalu-123/zhang-5/1`):
- - `斗罗大陆 第5章 魂兽森林 - 这个是网站名`
-
-#### **2. Keywords**(5-10 个核心词)
-- **模板**:`{strNovelName}, 第{strNovelChapterSort}章, {strNovelChapterName}, {strNovelAuthor}, {strSiteKeywords}, {strSiteName}`
-- **优化点**:
- - `{strNovelName}` 和 `{strNovelChapterSort}` 是核心词。
- - `{strNovelChapterName}` 和 `{strNovelAuthor}` 提升具体性。
- - `{strNovelCategoryName}小说` 和 `{strNovelSex}小说` 增加分类相关性。
- - “免费阅读”吸引流量。
-- **示例**:
- - `斗罗大陆, 第5章, 魂兽森林, 唐家三少, 玄幻小说, 男生小说, 这个是网站名, 免费阅读`
-
-#### **3. Description**(150-160 字符)
-- **模板**:`{strSiteName}提供{strNovelName}第{strNovelChapterSort}章{strNovelChapterName}免费阅读,{strNovelAuthor}创作,畅享{strSiteDomain}!`
-- **优化点**:
- - 突出章节内容,吸引用户点击。
- - 融入 `{strNovelAuthor}` 和 `{strNovelCategoryName}`,提升相关性。
- - “畅享”更具吸引力。
- - 若有分页,可附加“第{intPage}页”,但需控制长度。
-- **示例**:
- - `这个是网站名提供斗罗大陆第5章魂兽森林免费阅读,唐家三少创作的玄幻小说,畅享这个是站点域名!`
-
----
-
-### **参数映射**
-- `{strNovelName}`:从数据库根据 `{intNId}` 获取小说标题。
-- `{strNovelChapterName}`:从数据库根据 `{intChapterSort}` 获取章节名。
-- `{strNovelChapterSort}`:直接使用路由中的 `{intChapterSort}`。
-- `{intPage}`:直接使用路由中的 `{intPage}`。
-- `{strNovelAuthor}`:从数据库获取作者名。
-- `{strNovelCategoryName}`:从数据库获取分类(如“玄幻”)。
-- `{strNovelSex}`:从数据库获取性别(如“男生”)。
-- `{strNovelStatus}`:从数据库获取状态(如“连载”)。
-- `{strSiteName}` → '这个是网站名'
-- `{strSiteDomain}` → '这个是站点域名'
-- `{strNovelDescription}`、 `{strSearchKeywords}` → 空(章节页不适用)
-
----
-
-### **完整拼接示例**
-#### **路由:`/xiaoshuo/douluodalu-123/zhang-5/1`**
-- 假设:
- - `{strNovelName}` = '斗罗大陆'
- - `{strNovelChapterSort}` = '5'
- - `{strNovelChapterName}` = '魂兽森林'
- - `{intPage}` = '1'
- - `{strNovelAuthor}` = '唐家三少'
- - `{strNovelCategoryName}` = '玄幻'
- - `{strNovelSex}` = '男生'
- - `{strNovelStatus}` = '连载'
-- **Title**:
- - `斗罗大陆 第5章 魂兽森林 - 这个是网站名`
-- **Keywords**:
- - `斗罗大陆, 第5章, 魂兽森林, 唐家三少, 玄幻小说, 男生小说, 这个是网站名, 免费阅读`
-- **Description**:
- - `这个是网站名提供斗罗大陆第5章魂兽森林免费阅读,唐家三少创作的玄幻小说,畅享这个是站点域名!`
-
-#### **路由:`/xiaoshuo/douluodalu-123/zhang-5/2`**
-- `{intPage}` = '2'
-- **Title**:
- - `斗罗大陆 第5章 魂兽森林 - 这个是网站名` (若需分页,可加“- 第2页”,但需截断)
-- **Keywords**:
- - `斗罗大陆, 第5章, 魂兽森林, 唐家三少, 玄幻小说, 男生小说, 这个是网站名, 免费阅读`
-- **Description**:
- - `这个是网站名提供斗罗大陆第5章魂兽森林免费阅读,唐家三少创作的玄幻小说,畅享这个是站点域名!`
-
----
-
-### **实现代码(伪代码)**
-```php
-public function getChapter($strPinYin, $intNId, $intChapterSort, $intPage) {
- // 假设从数据库获取小说和章节信息
- $novel = Novel::find($intNId);
- $chapter = Chapter::where('novel_id', $intNId)->where('sort', $intChapterSort)->first();
-
- $replacements = [
- '{strSiteName}' => '这个是网站名',
- '{strSiteDomain}' => '这个是站点域名',
- '{strSiteTitle}' => '这个是网站标题',
- '{strSiteKeywords}' => '这个是网站关键字',
- '{strNovelName}' => $novel->title ?? '',
- '{strNovelChapterName}' => $chapter->title ?? '',
- '{strNovelChapterSort}' => $intChapterSort,
- '{intPage}' => $intPage,
- '{strNovelAuthor}' => $novel->author ?? '',
- '{strNovelCategoryName}' => $novel->category ?? '',
- '{strNovelSex}' => $novel->sex === 'boys' ? '男生' : '女生',
- '{strNovelStatus}' => $novel->status === 'ongoing' ? '连载' : '完结',
- '{strNovelDescription}' => '',
- '{strSearchKeywords}' => ''
- ];
-
- $title = "{strNovelName} 第{strNovelChapterSort}章 {strNovelChapterName} - {strSiteName}";
- $keywords = "{strNovelName}, 第{strNovelChapterSort}章, {strNovelChapterName}, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strSiteName}, 免费阅读";
- $description = "{strSiteName}提供{strNovelName}第{strNovelChapterSort}章{strNovelChapterName}免费阅读,{strNovelAuthor}创作的{strNovelCategoryName}小说,畅享{strSiteDomain}!";
-
- foreach ($replacements as $key => $value) {
- $title = str_replace($key, $value, $title);
- $keywords = str_replace($key, $value, $keywords);
- $description = str_replace($key, $value, $description);
- }
-
- return view('chapter', [
- 'title' => $title,
- 'keywords' => $keywords,
- 'description' => $description,
- 'novel' => $novel,
- 'chapter' => $chapter
- ]);
-}
-```
-
----
-
-### **SEO 优化亮点**
-1. **章节精准**:`{strNovelName} 第{strNovelChapterSort}章 {strNovelChapterName}` 匹配用户搜索具体章节的习惯。
-2. **关键词丰富**:包含小说名、章节、作者、分类等多维度词。
-3. **分页支持**:`{intPage}` 可灵活扩展,若章节内容分多页,可在 Title 或 Description 中体现。
-4. **品牌融入**:`{strSiteName}` 和 `{strSiteDomain}` 提升网站辨识度。
-5. **吸引点击**:突出“免费阅读”和“畅享”,契合用户需求。
-
----
-
-### **与分类案例的区别**
-- **分类页**:聚焦筛选条件(如“男生玄幻连载小说”),多分页。
-- **章节页**:聚焦具体章节(如“斗罗大陆 第5章”),单章节内容。
-
-这个 TKD 模板是小说章节页的最优 SEO 方案。如果需要调整(比如更短的 Title 或分页处理),可以告诉我!
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/小说详情页TKD设计.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/小说详情页TKD设计.md
deleted file mode 100644
index 3aec202..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/小说详情页TKD设计.md
+++ /dev/null
@@ -1,195 +0,0 @@
-最牛的seo 优化大师
-词量好像少了点,想无广告 最新章节 这些。。 你看看可以加多些词入取,你看看 顶级同行是咋做的,多收罗些数据
-这个是 替换标识 这个页面下面的标签都可以使用,{strSiteKeywords} 是全局公用关键词,你看看怎么使用
-'{strSiteName}' => '这个是网站名',
-'{strSiteDomain}' => '这个是站点域名',
-'{strSiteKeywords}' => '这个是网站全局通用关键字',
-'{strNovelName}' => '这个是当前页面小说名字',
-'{strNovelCategoryName}' => '当前页面小说分类名字',
-'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
-'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
-'{strNovelAuthor}' => '小说作者',
-'{strNovelDescription}' => '小说简介',
-
-这个是小说详情页面的路由
-/xiaoshuo/{strPinYin}-{intNId}
-
-请根据路由和上面的替换标识,你帮忙设计200套最友好seo的 tkd 替换模板,字数要符合常规,不要超标也不要少,质量要保证,不要重复
-返回格式:
-title :[
- '{strNovelName} - {strNovelAuthor} - {strSiteName} - 免费阅读',
- ..
-]
-
-keywords: [
- '{strNovelName}, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读',
- ..
- ]
-description: [
- '{strSiteName}提供{strNovelName}免费在线阅读,{strNovelAuthor}创作的{strNovelCategoryName}{strNovelStatus}小说,{strNovelDescription},欢迎体验{strSiteDomain}!',
- ..
- ]
-
-
-好的,我会根据你提供的小说详情页面路由 `/xiaoshuo/{strPinYin}-{intNId}` 和替换标识,设计一个最优的 SEO 友好的 TKD 模板。小说详情页面与分类页面不同,它聚焦于具体的小说,因此需要突出小说的标题、作者、分类等信息,同时融入网站品牌和吸引点击的元素。以下是我的设计:
-
----
-
-### **分析**
-#### **路由特点**
-- **路由**:`/xiaoshuo/{strPinYin}-{intNId}`
- - `{strPinYin}`:小说的拼音(如小说名的拼音,用于 URL 可读性)。
- - `{intNId}`:小说 ID(唯一标识符)。
-- **页面类型**:小说详情页,通常展示小说标题、作者、简介、分类、状态等信息。
-- **SEO 目标**:
- - 突出具体小说(如 `{strNovelName}`)。
- - 融入分类、性别、状态等信息,提升相关性。
- - 吸引用户点击阅读。
-
-#### **替换标识使用**
-- **核心字段**:
- - `{strNovelName}`:小说标题。
- - `{strNovelAuthor}`:小说作者。
- - `{strNovelCategoryName}`:小说分类。
- - `{strNovelSex}`:男生/女生小说。
- - `{strNovelStatus}`:连载/完结。
- - `{strSiteName}`、 `{strSiteDomain}`:品牌词。
-- **不适用字段**:
- - `{intPage}`:详情页通常无分页,设为默认值 1 或留空。
- - `{strNovelChapterName}`、 `{strNovelChapterSort}`:更适合章节页面。
- - `{strSearchKeywords}`:搜索页专用。
-
-#### **SEO 优化原则**
-- **Title**:简洁(60 字符内),包含小说名和品牌词。
-- **Keywords**:覆盖小说名、分类、作者等高相关性词。
-- **Description**:吸引点击,融入简介和免费阅读亮点。
-
----
-
-### **优化后的 TKD 模板**
-以下是专为小说详情页面设计的 TKD 模板:
-
-#### **1. Title**(控制在 60 字符以内)
-- **模板**:`{strNovelName} - {strNovelAuthor} - {strSiteName} - 免费阅读`
-- **说明**:
- - `{strNovelName}`:核心关键词,放在首位吸引搜索。
- - `{strNovelAuthor}`:增加作者相关搜索的匹配度。
- - `{strSiteName}`:品牌词。
- - “免费阅读”:提升点击率。
-- **示例**(假设小说名为“斗罗大陆”,作者为“唐家三少”):
- - `斗罗大陆 - 唐家三少 - 这个是网站名 - 免费阅读`
-
-#### **2. Keywords**(5-10 个核心词)
-- **模板**:`{strNovelName}, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读`
-- **说明**:
- - `{strNovelName}` 和 `{strNovelAuthor}`:具体小说的核心词。
- - `{strNovelCategoryName}小说`、 `{strNovelSex}小说`、 `{strNovelStatus}小说`:分类相关词。
- - `{strSiteName}`:品牌词。
- - “免费阅读”:高频行业词。
-- **示例**:
- - `斗罗大陆, 唐家三少, 玄幻小说, 男生小说, 连载小说, 这个是网站名, 免费阅读`
-
-#### **3. Description**(150-160 字符)
-- **模板**:`{strSiteName}提供{strNovelName}免费在线阅读,{strNovelAuthor}创作的{strNovelCategoryName}{strNovelStatus}小说,{strNovelDescription},欢迎体验{strSiteDomain}!`
-- **说明**:
- - `{strSiteName}` 和 `{strSiteDomain}`:品牌露出。
- - `{strNovelName}` 和 `{strNovelAuthor}`:突出小说和作者。
- - `{strNovelCategoryName}{strNovelStatus}小说`:分类和状态信息。
- - `{strNovelDescription}`:简介吸引用户(需控制长度)。
-- **示例**(假设简介为“少年逆天崛起”):
- - `这个是网站名提供斗罗大陆免费在线阅读,唐家三少创作的玄幻连载小说,少年逆天崛起,欢迎体验这个是站点域名!`
-
----
-
-### **参数映射**
-- `{strNovelName}`:从数据库根据 `{intNId}` 获取小说标题。
-- `{strNovelAuthor}`:从数据库获取作者名。
-- `{strNovelCategoryName}`:从数据库获取分类(如“玄幻”)。
-- `{strNovelSex}`:从数据库获取性别(如“男生”)。
-- `{strNovelStatus}`:从数据库获取状态(如“连载”)。
-- `{strNovelDescription}`:从数据库获取简介(需截断至合适长度)。
-- `{strSiteName}` → '这个是网站名'
-- `{strSiteDomain}` → '这个是站点域名'
-- `{strSiteTitle}` → '这个是网站标题'
-- `{strSiteKeywords}` → '这个是网站关键字'
-- `{intPage}` → 1(详情页无分页)
-- `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strSearchKeywords}` → 空
-
----
-
-### **完整拼接示例**
-#### **路由:`/xiaoshuo/douluodalu-123`**
-- 假设:
- - `{strNovelName}` = '斗罗大陆'
- - `{strNovelAuthor}` = '唐家三少'
- - `{strNovelCategoryName}` = '玄幻'
- - `{strNovelSex}` = '男生'
- - `{strNovelStatus}` = '连载'
- - `{strNovelDescription}` = '少年逆天崛起,成就无上斗罗'
-- **Title**:
- - `斗罗大陆 - 唐家三少 - 这个是网站名 - 免费阅读`
-- **Keywords**:
- - `斗罗大陆, 唐家三少, 玄幻小说, 男生小说, 连载小说, 这个是网站名, 免费阅读`
-- **Description**:
- - `这个是网站名提供斗罗大陆免费在线阅读,唐家三少创作的玄幻连载小说,少年逆天崛起,成就无上斗罗,欢迎体验这个是站点域名!`
-
----
-
-### **实现代码(伪代码)**
-```php
-public function getNovelDetail($strPinYin, $intNId) {
- // 假设从数据库获取小说信息
- $novel = Novel::find($intNId); // 示例,需替换为实际逻辑
-
- $replacements = [
- '{strSiteName}' => '这个是网站名',
- '{strSiteDomain}' => '这个是站点域名',
- '{strSiteTitle}' => '这个是网站标题',
- '{strSiteKeywords}' => '这个是网站关键字',
- '{strNovelName}' => $novel->title ?? '',
- '{strNovelAuthor}' => $novel->author ?? '',
- '{strNovelCategoryName}' => $novel->category ?? '',
- '{strNovelSex}' => $novel->sex === 'boys' ? '男生' : '女生',
- '{strNovelStatus}' => $novel->status === 'ongoing' ? '连载' : '完结',
- '{strNovelDescription}' => substr($novel->description ?? '', 0, 50), // 截断简介
- '{intPage}' => 1, // 详情页无分页
- '{strNovelChapterName}' => '',
- '{strNovelChapterSort}' => '',
- '{strSearchKeywords}' => ''
- ];
-
- $title = "{strNovelName} - {strNovelAuthor} - {strSiteName} - 免费阅读";
- $keywords = "{strNovelName}, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读";
- $description = "{strSiteName}提供{strNovelName}免费在线阅读,{strNovelAuthor}创作的{strNovelCategoryName}{strNovelStatus}小说,{strNovelDescription},欢迎体验{strSiteDomain}!";
-
- foreach ($replacements as $key => $value) {
- $title = str_replace($key, $value, $title);
- $keywords = str_replace($key, $value, $keywords);
- $description = str_replace($key, $value, $description);
- }
-
- return view('novel_detail', [
- 'title' => $title,
- 'keywords' => $keywords,
- 'description' => $description,
- 'novel' => $novel
- ]);
-}
-```
-
----
-
-### **SEO 优化亮点**
-1. **小说名优先**:`{strNovelName}` 放在 Title 和 Keywords 首位,匹配用户搜索习惯(如“斗罗大陆 小说”)。
-2. **作者强化**:`{strNovelAuthor}` 提升作者粉丝的搜索命中率。
-3. **分类信息**:`{strNovelCategoryName}` 和 `{strNovelStatus}` 增加长尾词覆盖(如“玄幻连载小说”)。
-4. **简介吸引**:`{strNovelDescription}` 简短展示小说亮点,激发阅读兴趣。
-5. **品牌融入**:`{strSiteName}` 和 `{strSiteDomain}` 提升网站辨识度。
-
----
-
-### **与分类案例的区别**
-- **分类页**(你的案例):聚焦类别(如“男生玄幻连载小说”),分页较多。
-- **详情页**(此设计):聚焦具体小说(如“斗罗大陆”),无分页,突出标题和作者。
-
-这个 TKD 模板是小说详情页的最优 SEO 方案。如果需要调整(比如更短的 Description 或更多关键词),可以告诉我!
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/搜索页Tkd.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/搜索页Tkd.md
deleted file mode 100644
index a152b35..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/搜索页Tkd.md
+++ /dev/null
@@ -1,98 +0,0 @@
-最牛的seo 优化大师
-这个是 替换标识 这个页面下面的标签都可以使用,{strSiteKeywords} 是全局公用关键词,你看看怎么使用
-'{strSiteName}' => '这个是网站名',
-'{strSiteDomain}' => '这个是站点域名',
-'{strSiteKeywords}' => '这个是网站全局通用关键字',
-'{intPage}' => '当前页面分页页码',
-'{strSearchKeywords}' => '搜索关键词',
-
-这个是搜索页面的路由,公用一套视图模板
-/search?keyword=jj&page=1
-
-请根据路由和上面的替换标识,你帮忙设计100套最友好seo的 tkd 替换模板,字数要符合常规,不要超标也不要少,质量要保证
-返回格式:
-title :[
- '{strSearchKeywords} - {strSiteName}搜索 - 第{intPage}页',
- ..
-]
-
-keywords: [
- '{strSearchKeywords}, {strSiteName}, 免费阅读, 在线搜索, 第{intPage}页',
- ..
- ]
-description: [
- '{strSearchKeywords}搜索结果尽在{strSiteName},第{intPage}页提供免费阅读,访问{strSiteDomain}立即体验!',
- ..
- ]
-
-
-
-
-
-根据你提供的搜索页面路由 `/search?keyword=jj&page=1` 和替换标识,我将为你设计一个针对搜索页面的 **SEO 友好** 的 TKD(Title、Keywords、Description)替换模板。搜索页面的 TKD 需要兼顾搜索引擎的抓取规则和用户体验,突出搜索关键词、分页信息以及站点品牌,同时保持自然流畅的语言。
-
-以下是设计思路和最终模板:
-
-### 设计思路
-1. **Title(标题)**:
- - 突出 `{strSearchKeywords}`(搜索关键词),这是搜索页面的核心。
- - 加入 `{strSiteName}` 和 `{intPage}`,强化品牌和分页信息。
- - 保持标题长度在 60 个字符以内(中文算 2 个字符),避免被搜索引擎截断。
- - 使用分隔符(如 `-` 或 `|`)增强可读性。
-
-2. **Keywords(关键词)**:
- - 包含 `{strSearchKeywords}` 作为主关键词。
- - 搭配站点品牌 `{strSiteName}` 和通用修饰词(如“免费阅读”)。
- - 避免堆砌,保持 5-7 个核心词组,简洁且相关。
-
-3. **Description(描述)**:
- - 以 `{strSearchKeywords}` 开头,吸引用户点击。
- - 融入 `{strSiteName}`、 `{strSiteDomain}` 和 `{intPage}`,提升品牌曝光。
- - 控制在 150-160 个字符以内,确保完整显示在搜索结果中。
- - 添加号召性语言(如“立即体验”),提升点击率。
-
-### 搜索页面 TKD 替换模板
-基于以上思路,结合你的路由和替换标识,我设计如下模板:
-
-#### Title
-```
-'{strSearchKeywords} - {strSiteName}搜索 - 第{intPage}页'
-```
-- **示例**:输入 `keyword=jj&page=1` 时,生成:
- `jj - 这个是网站名搜索 - 第1页`
-- **解析**:标题简洁,直观展示搜索关键词,品牌名靠后,分页信息明确,适合搜索引擎和用户快速理解。
-
-#### Keywords
-```
-'{strSearchKeywords}, {strSiteName}, 免费阅读, 在线搜索, 第{intPage}页'
-```
-- **示例**:输入 `keyword=jj&page=1` 时,生成:
- `jj, 这个是网站名, 免费阅读, 在线搜索, 第1页`
-- **解析**:关键词覆盖搜索词、站点名和通用阅读相关词,分页信息作为辅助,简洁不冗余。
-
-#### Description
-```
-'{strSearchKeywords}搜索结果尽在{strSiteName},第{intPage}页提供免费阅读,访问{strSiteDomain}立即体验!'
-```
-- **示例**:输入 `keyword=jj&page=1` 时,生成:
- `jj搜索结果尽在这个是网站名,第1页提供免费阅读,访问这个是站点域名立即体验!`
-- **字符数**:约 50 个中文字符(100 字节),在搜索引擎显示范围内。
-- **解析**:描述以搜索关键词开头,融入品牌和域名,结尾有行动号召,兼顾 SEO 和用户吸引。
-
-### 优化后的特点
-1. **动态适配**:模板根据 `{strSearchKeywords}` 和 `{intPage}` 动态生成,确保每个搜索页面 TKD 唯一,避免重复内容。
-2. **SEO 友好**:标题和描述中关键词靠前,分页信息明确,符合搜索引擎对搜索结果页的偏好。
-3. **用户体验**:语言自然,突出免费阅读和品牌,吸引用户点击。
-4. **可扩展性**:如果未来需要调整(如加入小说分类或状态),模板可以轻松扩展。
-
-### 与分类页面案例的对比
-你的分类页面案例更偏向小说分类的结构化内容(包含 `{strNovelSex}`、 `{strNovelCategoryName}` 等),而搜索页面需要更灵活地围绕 `{strSearchKeywords}` 构建。搜索页面的 TKD 应尽量简洁,避免过多无关变量,确保聚焦用户输入的关键词。
-
-### 如果需要调整
-如果你希望在搜索页面加入更多变量(如 `{strNovelStatus}` 或 `{strNovelCategoryName}`),可以告诉我具体需求,我再帮你调整。例如:
-- 如果搜索结果只限于某分类,可以加入 `{strNovelCategoryName}`:
- ```
- Title: '{strSearchKeywords} - {strNovelCategoryName} - {strSiteName} - 第{intPage}页'
- ```
-
-请告诉我你的想法或具体需求,我可以进一步优化!
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/男生女生页面TKD设计.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/男生女生页面TKD设计.md
deleted file mode 100644
index 801a9af..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/男生女生页面TKD设计.md
+++ /dev/null
@@ -1,189 +0,0 @@
-最牛的seo 优化大师
-这个是 替换标识 这个页面下面的标签都可以使用 ,{strSiteKeywords} 是全局公用关键词,你看看怎么使用
-'{strSiteName}' => '这个是网站名',
-'{strSiteDomain}' => '这个是站点域名',
-'{strSiteKeywords}' => '这个是网站全局通用关键字',
-'{intPage}' => '当前页面分页页码',
-'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
-
-这个是男生和女生的路由,公用一套视图模板
-Route::get('/nansheng-xiaoshuo', [Novel::class, 'getNovelChannel'])->append(['boolIsMobile' => true, 'strChannel' => 'boys']);
-Route::get('/nvsheng-xiaoshuo', [Novel::class, 'getNovelChannel'])->append(['boolIsMobile' => true, 'strChannel' => 'girls']);
-
-请根据路由和上面的替换标识,你帮忙设计100套最友好seo的 tkd 替换模板,字数要符合常规,不要超标也不要少,质量要保证
-返回格式:
-title :[
- '{strNovelSex}小说 - {strSiteName} - 免费阅读 - 第{intPage}页',
- ..
-]
-
-keywords: [
- '{strNovelSex}小说, {strSiteKeywords}, 免费小说, 在线阅读, {strSiteName}',
- ..
- ]
-description: [
- '{strSiteName}提供{strNovelSex}小说免费在线阅读,第{intPage}页精选热门作品,畅享{strSiteDomain},{strNovelSex}小说迷必备',
- ..
- ]
-
-
-
-
-
-好的,我会根据你提供的路由和替换标识,设计一个最优的 SEO 友好的 TKD 模板,适用于男生和女生频道的公用视图模板(`/nansheng-xiaoshuo` 和 `/nvsheng-xiaoshuo`)。这个设计将结合你的案例,同时优化关键词密度、品牌曝光和用户吸引力。
-
----
-
-### **分析**
-#### **路由特点**
-- **路由**:
- - `/nansheng-xiaoshuo`:男生小说频道,`strChannel = 'boys'`。
- - `/nvsheng-xiaoshuo`:女生小说频道,`strChannel = 'girls'`。
-- **参数**:
- - `boolIsMobile = true`:适配移动端。
- - 无具体分类 (`strCategory`) 和状态 (`strStatus`) 参数,因此这是一个频道首页,展示男生或女生小说的概览。
- - `{intPage}` 在路由中未显式定义,但可能通过视图逻辑支持分页。
-
-#### **替换标识**
-- `{strNovelSex}`:从 `strChannel` 映射为“男生”或“女生”。
-- `{strNovelCategoryName}` 和 `{strNovelStatus}`:频道首页无具体分类和状态,需调整为通用描述。
-- `{strSiteName}`、 `{strSiteDomain}` 等:用于品牌强化。
-- `{strNovelName}`、 `{strNovelChapterName}` 等:频道首页不适用,留空。
-
-#### **SEO 目标**
-- 突出频道特性(男生/女生小说)。
-- 融入品牌词(网站名、域名)。
-- 适配分页(如果有)。
-- 吸引移动端用户(`boolIsMobile = true`)。
-
----
-
-### **优化后的 TKD 模板**
-以下是专为频道首页设计的 TKD 模板,基于你的案例并进一步优化:
-
-#### **1. Title**(控制在 60 字符以内)
-- **模板**:`{strNovelSex}小说 - {strSiteName} - 免费阅读 - 第{intPage}页`
-- **说明**:
- - `{strNovelSex}` 突出频道主题(男生/女生)。
- - `{strSiteName}` 强化品牌。
- - “免费阅读”吸引用户点击。
- - `{intPage}` 仅在大于 1 时显示,避免首页面冗余。
-
-#### **2. Keywords**(5-10 个核心词)
-- **模板**:`{strNovelSex}小说, {strSiteKeywords}, 免费小说, 在线阅读, {strSiteName}`
-- **说明**:
- - `{strNovelSex}小说` 是核心关键词。
- - `{strSiteKeywords}` 复用网站通用关键词。
- - 添加“免费小说”“在线阅读”提升搜索覆盖。
-
-#### **3. Description**(150-160 字符)
-- **模板**:`{strSiteName}提供{strNovelSex}小说免费在线阅读,第{intPage}页精选热门作品,畅享{strSiteDomain},{strNovelSex}小说迷必备!`
-- **说明**:
- - `{strSiteName}` 和 `{strSiteDomain}` 提升品牌认知。
- - “免费在线阅读”契合移动端用户习惯。
- - “{strNovelSex}小说迷必备”增加用户粘性。
-
----
-
-### **参数映射**
-- `{strNovelSex}`:
- - `strChannel = 'boys'` → '男生'
- - `strChannel = 'girls'` → '女生'
-- `{strSiteName}` → '这个是网站名'
-- `{strSiteDomain}` → '这个是站点域名'
-- `{strSiteTitle}` → '这个是网站标题'
-- `{strSiteKeywords}` → '这个是网站关键字'
-- `{strSiteDescription}` → '这个是网站描述'
-- `{intPage}` → 默认 1,若有分页逻辑则动态传入
-- `{strNovelCategoryName}` → 空(频道首页无具体分类)
-- `{strNovelStatus}` → 空(频道首页无状态筛选)
-- `{strNovelName}`、 `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strNovelAuthor}`、 `{strNovelDescription}`、 `{strSearchKeywords}` → 空(频道首页不适用)
-
----
-
-### **完整拼接示例**
-#### **1. 男生频道首页:`/nansheng-xiaoshuo`(假设 intPage = 1)**
-- **Title**: `男生小说 - 这个是网站名 - 免费阅读`
-- **Keywords**: `男生小说, 这个是网站关键字, 免费小说, 在线阅读, 这个是网站名`
-- **Description**: `这个是网站名提供男生小说免费在线阅读,第1页精选热门作品,畅享这个是站点域名,男生小说迷必备!`
-
-#### **2. 女生频道首页:`/nvsheng-xiaoshuo`(假设 intPage = 1)**
-- **Title**: `女生小说 - 这个是网站名 - 免费阅读`
-- **Keywords**: `女生小说, 这个是网站关键字, 免费小说, 在线阅读, 这个是网站名`
-- **Description**: `这个是网站名提供女生小说免费在线阅读,第1页精选热门作品,畅享这个是站点域名,女生小说迷必备!`
-
-#### **3. 男生频道分页:`/nansheng-xiaoshuo`(假设 intPage = 2)**
-- **Title**: `男生小说 - 这个是网站名 - 免费阅读 - 第2页`
-- **Keywords**: `男生小说, 这个是网站关键字, 免费小说, 在线阅读, 这个是网站名`
-- **Description**: `这个是网站名提供男生小说免费在线阅读,第2页精选热门作品,畅享这个是站点域名,男生小说迷必备!`
-
----
-
-### **实现代码(伪代码)**
-```php
-public function getNovelChannel($strChannel) {
- // 映射表
- $sexMap = [
- 'boys' => '男生',
- 'girls' => '女生'
- ];
-
- // 替换标识赋值
- $replacements = [
- '{strSiteName}' => '这个是网站名',
- '{strSiteDomain}' => '这个是站点域名',
- '{strSiteTitle}' => '这个是网站标题',
- '{strSiteKeywords}' => '这个是网站关键字',
- '{strSiteDescription}' => '这个是网站描述',
- '{strNovelSex}' => $sexMap[$strChannel] ?? '',
- '{strNovelCategoryName}' => '', // 频道首页无具体分类
- '{strNovelStatus}' => '', // 频道首页无状态
- '{intPage}' => request()->input('page', 1), // 默认第1页,假设分页通过查询参数传入
- '{strNovelName}' => '',
- '{strNovelChapterName}' => '',
- '{strNovelChapterSort}' => '',
- '{strNovelAuthor}' => '',
- '{strNovelDescription}' => '',
- '{strSearchKeywords}' => ''
- ];
-
- // 动态生成 TKD
- $pageStr = $replacements['{intPage}'] > 1 ? " - 第{intPage}页" : '';
- $title = "{strNovelSex}小说 - {strSiteName} - 免费阅读{$pageStr}";
- $keywords = "{strNovelSex}小说, {strSiteKeywords}, 免费小说, 在线阅读, {strSiteName}";
- $description = "{strSiteName}提供{strNovelSex}小说免费在线阅读,第{intPage}页精选热门作品,畅享{strSiteDomain},{strNovelSex}小说迷必备!";
-
- // 替换模板中的标识
- foreach ($replacements as $key => $value) {
- $title = str_replace($key, $value, $title);
- $keywords = str_replace($key, $value, $keywords);
- $description = str_replace($key, $value, $description);
- }
-
- // 返回视图
- return view('novel_channel', [
- 'title' => $title,
- 'keywords' => $keywords,
- 'description' => $description,
- 'channel' => $strChannel
- ]);
-}
-```
-
----
-
-### **SEO 优化亮点**
-1. **核心关键词靠前**:`{strNovelSex}小说` 放在 Title 和 Description 开头,提升相关性。
-2. **品牌强化**:`{strSiteName}` 和 `{strSiteDomain}` 融入 TKD,增加网站辨识度。
-3. **移动端适配**:突出“免费在线阅读”,契合 `boolIsMobile = true` 的用户习惯。
-4. **分页友好**:首页面简洁,后续页面自然融入 `{intPage}`,并可配合 `rel="next/prev"` 优化。
-5. **通用性**:模板适用于男生和女生频道,公用一套视图。
-
----
-
-### **扩展建议**
-- 如果频道首页支持分页,建议通过查询参数(如 `?page=2`)传入 `{intPage}`,并在代码中动态获取。
-- 如果需要加入热门分类(如玄幻、言情),可以在 Description 中扩展描述,例如“涵盖玄幻、武侠等热门类型”。
-- 若 `{strSiteKeywords}` 已包含“小说”相关词,可精简 Keywords,避免重复。
-
-这个 TKD 模板是目前最优的 SEO 方案,兼顾了搜索排名和用户体验。如果有其他需求(比如具体分类或搜索页面),可以告诉我,我再调整!
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/首页 文案.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/首页 文案.md
deleted file mode 100644
index 3e86eed..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/TKD/首页 文案.md
+++ /dev/null
@@ -1,23 +0,0 @@
-最牛的seo 优化大师
-词量好像少了点, 你看看可以加多些词入取,你看看 顶级同行是咋做的,多收罗些数据
-这个是 替换标识 这个页面下面的标签都可以使用,{strSiteKeywords} 是全局公用关键词,你看看怎么使用
-'{strSiteName}' => '这个是网站名',
-'{strSiteDomain}' => '这个是站点域名',
-'{strSiteKeywords}' => '这个是网站全局通用关键字',
-
-
-请根据路由和上面的替换标识,你帮忙设计200套最友好seo的 替换模板,字数要符合常规,不要超标也不要少,质量要保证,不要重复
-返回格式:
-首页-热门小说介绍文案 :[
- ''精选全网热评佳作,涵盖玄幻冒险、都市传奇、穿越重生等多种类型,带你领略最受欢迎的阅读热潮,快来发现你的下一本心动之作!',',
- ..
-]
-
-首页-最新小说介绍文案: [
- '每日更新最新章节,囊括玄幻修真、都市爽文、重生逆袭等热门题材,紧跟作者步伐,第一时间畅读新鲜故事!',
- ..
- ]
-首页-排行榜介绍文案: [
- '汇聚读者最爱的小说排行,日榜、周榜、月榜一网打尽,玄幻巅峰、都市热血、完结经典全都有,助你快速找到高人气好书!',
- ..
- ]
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/index.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/index.md
deleted file mode 100644
index 8585cfa..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
-# 狂雨小说模板
- 源地址: test.nove66.net , cms 模板部署在虚拟机
-
-# 是否带.html 后缀
- 根据ai 分析,不带 html 版本更具好, 第一版本不带 html
-
-# pc 和 h5端是否需要2个url?
- 根据ai 分析,2个url 使用js 区分跳转 ,不是最优方案,h5和pc 使用一个url 才是最优方案
-
-# 数据渲染
-PC
-公共数据
-底部 友情链接
-底部 每日热搜小说推荐: kan 数据列表随机展示20个
-pc-首页
- 1.首页第一板块:推荐等级为9的连载的 随机15个小说
- 2.首页第二板块:热门小说:推荐等级为9的完结的 随机12个小说
- 3.首页第三板块:男生频道,最新的 随机5个小说
- 男生频道,周排行榜 随机10个小说
- 男生频道,月排行榜 随机10个小说
- 男生频道,总排行榜 随机10个小说
- 4.首页第四板块:女生频道,最新的 随机5个小说
- 女生频道,周排行榜 随机10个小说
- 女生频道,月排行榜 随机10个小说
- 女生频道,总排行榜 随机10个小说
- 5.首页第五板块: 最近更新-随机50
-
-
-
-
-
-# 第一版本
- 1.设计好url 规则
- 2.设计好tdk模板
- 3.渲染好内容
- 4.干扰码优化:
- 4.1方案1: 每个列表里每个视频元素a标签前面 生成一个 干扰码
- 4.2方案2:
- 后面 随机 10-30个标签
- 前面面 随机 10-30个标签
- body 中间 选择 5-10行 , a 标签前面 生成一个干扰码
- 5.详情 title 模板 设置
-
-
-
-
-# 第二版本
- 1.增加广广告配置,(所有站点会放一些广告,广告内容是我们的视频站点,这个站点主要收集一些 香港片,目的是增加留存)
- 2.html 检查优化
- 3.地图生成
- 4.收录推送
- 5.友情链接
- 6.热搜词 顶部收索框下面展示,全站通用,每个站点随机展示10条
- 7.需要指定一个小说id 的内容页面 展示为首页,然后现在的首页路径改成 nindex
-
-
-
-
-
-# 第三版本
- 1.文章 板块
-
-
-
-# 替换模板 需要根据域名绑定的
-
-1.其他所有 替换模板分组 : 每个域名 随机绑定一个替换模板
-
-2.(特殊化)小说详情 title : 每个域名 / 每个小说 随机绑定一个 替换模板
-
-3.(特殊化) 页面url 配置 :
- 每个域名 绑定一个替换模板,但是这里有个特殊需求(
- 看下面,比喻第一组,详情页面选择了 xiaoshuo 这个 命名,那我希望 章节和目录也是选择这个 带有 xiaoshuo 的命名模板
- )
-```
- 1组
- 详情页url '/xiaoshuo/{strPinYin}-{intNId}/mulu/{strOrder}/{intPage}'
- 章节页url '/xiaoshuo/{strPinYin}-{intNId}/zhang-{intChapterSort}/{intChapterPage}',
- 目录页url '/xiaoshuo/{strPinYin}-{intNId}/mulu/{strOrder}/{intPage}',
- 其它页面。。。
-
- 2组
- 详情页url '/novel/{strPinYin}-{intNId}/mulu/{strOrder}/{intPage}'
- 章节页url '/ novel/{strPinYin}-{intNId}/zhang-{intChapterSort}/{intChapterPage}',
- 目录页url '/novel/{strPinYin}-{intNId}/mulu/{strOrder}/{intPage}',
- 其它页面。。。
-
- 3组
- 详情页url '/book/{strPinYin}-{intNId}/mulu/{strOrder}/{intPage}'
- 章节页url '/book/{strPinYin}-{intNId}/zhang-{intChapterSort}/{intChapterPage}',
- 目录页url '/book/{strPinYin}-{intNId}/mulu/{strOrder}/{intPage}',
- 其它页面。。。
-```
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/上线前数据准备.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/上线前数据准备.md
deleted file mode 100644
index 0c6bebf..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/上线前数据准备.md
+++ /dev/null
@@ -1,15 +0,0 @@
-首页-head
- 站点名字
- 站点域名
- 站点全局通用关键词
- 站点描述 丰富首页内容
- title
- keywords
- description
- 文字logo
- 模板 选择
-
-替换模板数据准备
- 首页-热门小说介绍文案
- 首页-最新小说介绍文案
- 首页-排行榜介绍文案
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/书库页面设计.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/书库页面设计.md
deleted file mode 100644
index e9f3d48..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/书库页面设计.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# 书库页面设计
-
-# grok 推荐
-``
- 推荐URL:{$strPcPath}/shuku/nansheng/dushixiuxian/lianzai/1
- 全部URL:{$strPcPath}/shuku/all/all/all/1
- 理由:
- all 提供语义支持,SEO友好。
- 拼音关键词(如 nansheng、lianzai)直接优化中文搜索。
- 多参数结构支持组合筛选,权重集中。
-``
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/小说目录页面.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/小说目录页面.md
deleted file mode 100644
index e9e8b3b..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/小说目录页面.md
+++ /dev/null
@@ -1,37 +0,0 @@
-
-```
- 最终推荐
- 推荐URL:/xiaoshuo/[name]-[novel-id]/mulu/[order]/[page]
- 示例:
- 正序:/xiaoshuo/doupo-123/mulu/zheng/1
- 倒序:/xiaoshuo/doupo-123/mulu/dao/1
- 长拼音名:/xiaoshuo/zhong-sheng-zhi-dao-zun-456/mulu/dao/1
- 理由:
- SEO最佳:
- xiaoshuo 和 mulu 保留核心关键词。
- zheng 和 dao 是拼音,匹配“正序目录”“倒序目录”搜索。
- 语义清晰:
- /mulu/zheng/1 直观表示“目录 正序 第1页”。
- 一致性:
- 与章节页(/xiaoshuo/doupo-123/zhang-45/1)的拼音风格统一。
- 分页和排序分离:
- [order] 和 [page] 分开,便于扩展其他筛选。
-```
-
-
-
-## SEO优化建议
-标题:
-斗破苍穹 章节目录 - 全集在线阅读 - 网站名
-元描述:
-
-H1标签:
-斗破苍穹 章节目录
-面包屑:
-首页 > 小说 > 斗破苍穹 > 章节目录
-内部链接:
-目录页链接到每个章节(如 /xiaoshuo/doupo-123/zhang-45/1),提升内链权重。
-Canonical标签:
-
-Sitemap:
-包含所有目录页URL(如 /xiaoshuo/doupo-123/mulu/1、/xiaoshuo/doupo-123/mulu/2),提交搜索引擎。
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/小说章节.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/小说章节.md
deleted file mode 100644
index 61d3ab6..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/小说章节.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# 小说章节页面 设计记录 grok反馈
-
-最终推荐
-推荐URL:/xiaoshuo/[name]-[novel-id]/zhang-[chapter-sort]/[page]
-示例:
-/xiaoshuo/doupo-123/zhang-45/1
-/xiaoshuo/zhong-sheng-zhi-dao-zun-456/zhang-45/1
-理由:
-SEO最佳:
-xiaoshuo 和 zhang 是高频搜索词,提升通用性。
-name(如 doupo)匹配小说名搜索。
-chapter-sort(如 45)匹配“第X章”。
-长拼音优化:
-zhong-sheng-zhi-dao-zun 已用 - 分割,语义清晰,匹配“重生 至尊”。
-统一性:
-PC和H5共用URL,通过 request()->isMobile() 动态渲染。
-简洁性:
-去掉 intChapterId,假设 chapterSort 足以标识章节。
-
-
-## SEO优化建议
-标题:斗破苍穹 第45章 - 小说在线阅读 - 网站名
-元描述:
-面包屑:首页 > 小说 > 斗破苍穹 > 第45章
-Canonical:
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/干扰吗设计.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/干扰吗设计.md
deleted file mode 100644
index 491b3d2..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/干扰吗设计.md
+++ /dev/null
@@ -1,38 +0,0 @@
-在讨论这个问题时,我们需要明确一点:向 HTML 中插入带有随机 ID、类名或隐藏内容的标签(如 ``、``、`
` 等 `style="display:none;"` 的元素),其目的是否是为了欺骗搜索引擎(如 Google 的爬虫/蜘蛛),让其认为页面内容是原创的,而不是伪原创或复制内容。
-
-### 这种做法的效果与风险
-1. **搜索引擎蜘蛛的判断机制**
- - 现代搜索引擎(如 Google、Bing)使用复杂的算法来判断页面内容的原创性。它们不仅分析可见内容,还会检查 HTML 结构、元数据、语义、链接模式,甚至用户行为信号(如停留时间、跳出率)。
- - 隐藏内容(`display:none;`)通常会被搜索引擎忽略,因为它们认为这些内容对用户无意义。如果大量使用隐藏标签填充无意义或随机字符串,反而可能被视为“内容填充”(keyword stuffing)或“隐藏文本”(hidden text),这是违反搜索引擎优化(SEO)规则的行为。
-
-2. **伪原创的检测**
- - 搜索引擎不会仅仅因为你添加了一些随机标签就认为内容是原创的。它们更关注文本的语义相似性、句子结构、词频分布等。
- - 如果你的页面主要内容(比如 `` 标签中的文章)是从其他地方复制的,即使插入了这些随机标签,搜索引擎依然可以通过比对主要内容判断出伪原创。
-
-3. **潜在风险**
- - **惩罚风险**:Google 的《网站管理员指南》中明确禁止使用“隐藏文本或链接”来操纵排名。如果被检测到这种行为,你的网站可能会被降权甚至从索引中移除。
- - **用户体验**:虽然这些标签对用户不可见,但如果代码过于冗余,可能增加页面加载时间,间接影响 SEO。
-
-### 这种做法是否“有助于”伪原创?
-- **短期效果**:理论上,插入随机标签可能会让页面的 HTML 结构看起来与原始页面有所不同,稍微增加伪原创的“伪装性”。但这只是表面功夫,搜索引擎的算法早已超越了简单对比 HTML 结构。
-- **长期效果**:几乎没有帮助,反而可能引发负面后果。搜索引擎更倾向于分析内容的实际价值,而不是这些“噪声”标签。
-
-### 更好的伪原创策略(合法且有效)
-如果你确实想通过修改内容来提高原创性,可以尝试以下方法:
-1. **重写文本**:用自己的语言重新组织句子,改变表达方式。
-2. **添加独特内容**:插入原创的评论、分析或数据。
-3. **优化结构**:调整标题、段落布局,添加图片或多媒体(配上原创描述)。
-4. **合法引用**:如果引用他人内容,标注来源,避免被视为抄袭。
-
-### 结论
-插入这些随机标签并不会真正帮助蜘蛛判断内容是伪原创,反而可能被视为作弊行为。如果你是为了 SEO 或内容优化,建议把精力放在提升内容的实际质量和独特性上,而不是依赖这种技术手段。有没有什么具体场景困扰着你?我可以进一步帮你分析优化方案!
-
-
-对比分析
-维度 格式 1(标准 HTML) 格式 2(自定义标签)
-结构复杂性 高(嵌套、多标签) 低(单一标签)
-伪装性 较强(像合法 HTML) 较弱(明显异常)
-独特性 高(多属性组合) 中等(依赖标签名和属性)
-生成难度 较高(需维护嵌套结构) 较低(简单随机生成)
-体积与性能 较大(可能影响加载) 较小(轻量)
-检测风险 中等(隐藏内容可能被怀疑) 较高(非标准标签易暴露)
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/推广SEO过程设计记录/男生女生页面设计.md b/code/app/home/view/kuangYu/推广SEO过程设计记录/男生女生页面设计.md
deleted file mode 100644
index 0be9c64..0000000
--- a/code/app/home/view/kuangYu/推广SEO过程设计记录/男生女生页面设计.md
+++ /dev/null
@@ -1,74 +0,0 @@
-# 男生女生页面 设计
-
-# grok 推荐
-
-## url 设计:
- 问 grok.com
- 我目前在做一个seo 小说站点。有 一个男生频道页面和一个女生频道页面,请问这个 url 怎么设计在最友好seo ,请你列出几个最优方案
-
-# grok 回复:
-在设计SEO友好的URL结构时,需要考虑清晰性、简洁性、关键词相关性以及对搜索引擎和用户的可读性。对于你的小说站点,有男生频道页面和女生频道页面,以下是一些设计URL的最佳实践和具体方案建议:
-
-### SEO友好URL设计的核心原则
-1. **简洁明了**:URL尽量短,避免冗余参数。
-2. **关键词优化**:包含目标关键词(如“男生小说”“女生小说”),帮助搜索引擎理解页面内容。
-3. **层次清晰**:反映网站结构,方便爬虫抓取和用户导航。
-4. **语言适配**:如果你面向中文用户,可以考虑用拼音或中文(视具体情况)。
-5. **避免动态参数**:尽量使用静态URL,而不是带有“?id=123”之类的内容。
-
-### 假设你的网站域名是 `www.example.com`
-以下是针对男生频道和女生频道的几个最优URL方案:
-
-#### 方案1:拼音关键词结构
-- 男生频道:`www.example.com/nansheng-xiaoshuo`
-- 女生频道:`www.example.com/nvsheng-xiaoshuo`
-- **优点**:
- - 使用拼音(如“nansheng”“nvsheng”)清晰表明性别分类,便于中文用户理解。
- - “xiaoshuo”作为关键词,直接指向小说内容,有助于SEO。
- - 简洁且层次分明。
-- **适用场景**:面向中文用户,注重拼音搜索习惯的场景。
-
-#### 方案2:英文关键词结构
-- 男生频道:`www.example.com/boys-novels`
-- 女生频道:`www.example.com/girls-novels`
-- **优点**:
- - 国际化设计,适合英文搜索引擎优化。
- - “boys”“girls”和“novels”都是高相关性关键词。
- - URL简短易读。
-- **适用场景**:如果你的站点有国际化需求,或者目标用户可能用英文搜索。
-
-#### 方案3:分类目录结构
-- 男生频道:`www.example.com/xiaoshuo/nansheng`
-- 女生频道:`www.example.com/xiaoshuo/nvsheng`
-- **优点**:
- - “xiaoshuo”作为一级目录,表明这是小说类别的主分类。
- - “nansheng”“nvsheng”作为子分类,结构清晰,方便扩展其他类别(如“玄幻”“言情”)。
- - 层次感强,利于搜索引擎理解网站架构。
-- **适用场景**:网站规模较大,计划增加更多分类时。
-
-#### 方案4:中文关键词结构
-- 男生频道:`www.example.com/男生小说`
-- 女生频道:`www.example.com/女生小说`
-- **优点**:
- - 直接使用中文关键词,非常直观,符合中文用户的搜索习惯。
- - 如果你的目标搜索引擎(如百度)支持中文URL,会有很好的效果。
-- **缺点**:
- - 在某些国际搜索引擎中,中文URL可能需要转码(如`%E7%94%B7%E7%94%9F%E5%B0%8F%E8%AF%B4`),不够美观。
-- **适用场景**:完全面向中文市场,且技术支持中文URL优化。
-
-### 推荐选择
-- **首选方案**:**方案1(拼音关键词结构)**
- - 理由:拼音URL既保留了中文用户的可读性,又能在大多数搜索引擎中被很好地解析和优化,同时避免了中文转码问题。`www.example.com/nansheng-xiaoshuo` 和 `www.example.com/nvsheng-xiaoshuo` 是兼顾SEO和用户体验的最佳选择。
-- **备选方案**:**方案3(分类目录结构)**
- - 理由:如果你的网站未来会扩展更多分类,目录结构更具灵活性,且层次清晰。
-
-### 额外建议
-1. **统一URL格式**:无论选择哪种方案,确保全站URL风格一致。
-2. **面包屑导航**:在页面上配合使用面包屑导航(如“首页 > 男生小说”),强化SEO效果。
-3. **301重定向**:如果用户可能通过其他路径访问(如`www.example.com/male`),设置重定向到主URL。
-4. **提交Sitemap**:将最终URL提交到搜索引擎(如百度站长工具或Google Search Console),加速收录。
-
-如果你有更具体的网站定位或技术限制,可以告诉我,我再帮你进一步优化!
-
-##
-根据上面第一版本使用 方案1
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Index/index.html b/code/app/home/view/xiongMao/Index/index.html
deleted file mode 100644
index a28f1f0..0000000
--- a/code/app/home/view/xiongMao/Index/index.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}index{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name='body-class'}index_xs{/block}
-
-
-{block name="main"}
-
-
-
- 完结小说推荐
- www.xmttxs.com
-
- {foreach $arrRecommendNovel as $category}
- {include file="Public/novelListH" /}
- {/foreach}
-
-
-
-
www.xmttxs.com
-
新书推荐
-
- {foreach $arrRecommendNovel as $category}
- {include file="Public/novelText" /}
- {/foreach}
-
-
-
www.xmttxs.com
-
热门连载
-
- {foreach $arrRecommendNovel as $category}
- {include file="Public/novelText" /}
- {/foreach}
-
-
-
www.xmttxs.com
-
热门收藏
-
- {foreach $arrRecommendNovel as $category}
- {include file="Public/novelText" /}
- {/foreach}
-
-
-
www.xmttxs.com
-
最新更新
-
- {foreach $arrRecommendNovel as $category}
- {include file="Public/updateNovelList" /}
- {/foreach}
-
-
-
-
-{/block} {block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Novel/getArticleInfo.html b/code/app/home/view/xiongMao/Novel/getArticleInfo.html
deleted file mode 100644
index 990ea64..0000000
--- a/code/app/home/view/xiongMao/Novel/getArticleInfo.html
+++ /dev/null
@@ -1,18 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-article.........
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Novel/getArticleList.html b/code/app/home/view/xiongMao/Novel/getArticleList.html
deleted file mode 100644
index 272e206..0000000
--- a/code/app/home/view/xiongMao/Novel/getArticleList.html
+++ /dev/null
@@ -1,46 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="logo-html"}
-
-{/block}
-
-{block name="main"}
-
-
-
-
-
-
-
深度解说列表
-
-
-
- {foreach $arrNewsNovel as $key => $vo}
- {include file="Public/articleList" /}
-
- {/foreach}
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Novel/getNovelCategory.html b/code/app/home/view/xiongMao/Novel/getNovelCategory.html
deleted file mode 100644
index 4739a02..0000000
--- a/code/app/home/view/xiongMao/Novel/getNovelCategory.html
+++ /dev/null
@@ -1,80 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name='body-class'}top_xs{/block}
-
-{block name="main"}
-
-
-
- {foreach $arrRecommendSerializationNovel as $category}
- {include file="Public/novelCategoryList" /}
- {/foreach}
-
-
-
首 页
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
下一页
-
-
-
-
-
- 完结小说推荐
- www.xmttxs.com
-
-
- {foreach $arrRecommendSerializationNovel as $category}
- {include file="Public/novelListH" /}
- {/foreach}
-
-
-
-
-
-
-
-{/block} {block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Novel/getNovelChapter.html b/code/app/home/view/xiongMao/Novel/getNovelChapter.html
deleted file mode 100644
index 19db0d1..0000000
--- a/code/app/home/view/xiongMao/Novel/getNovelChapter.html
+++ /dev/null
@@ -1,81 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name='body-class'}chapterlist_xs{/block}
-{block name='body-id'}chapterbody{/block}
-
-{block name="main"}
-
-
-
-
第7章 终章 上古真神07(第1页)
-
-
-
第7章终章·上古真神07
-
停歇了两日后再次远行,这次目的地繁华的城市,比起偏远的古镇这里更加喧嚣,空气都变得稀薄。
-
他双腿翘在小茶桌上,仰面朝天懒散靠在沙发背上,一眼不眨地盯着说话的小扁盒。
-
不得不说现在的人类真的很厉害,上次来还是个大黑盒,现在这么薄看的更加清楚。
-
“你又翘桌上!放下去,放下去!”
-
白色小身影扑棱着翅膀在他眼前不断晃悠。
-
“小鸭子别挡道。”
-
白玄飞的更欢了,仰着尖嘴,“不要不要!”
-
“你再不放下来,等主人回来让他收拾你!”
-
嘿,他的暴脾气!
-
他眉眼含笑,语调拉长,“你主人不在,等会就把你炖了!”
-
“坏天时!臭天时!丑天时!。。。。。。”
-
“你讨厌!。。。。”
-
叽叽喳喳地吵死了,楚时红唇拉直,眉宇间透露着一丝烦躁。
-
小盒子里的画面变黑,白玄又飞在他旁边没完没了。
-
他起身向门外走去,却引来小鸟的阻拦。
-
小喙一张一合的,很是滑稽,“你干嘛去!”
-
“主人说了,让我看着你。”
-
轻啧一声,神情有些不耐,“你好好在家吧。”
-
他抬手虚空轻点,整个房间似乎亮了一下化为平静。
-
肉眼看不出来的东西却在小白玄黑色眼里映出,一个白色的大网笼罩在整个屋内。
-
这是单独针对它的!
-
白玄气的在半空中跳脚,“砰”地一声门被关上了,哪里还有天时那家伙地身影。
-
此时的楚时漫无目的走在大街上,晚霞红艳洒在大地上,来往的人群似乎变多了。
-
侧肩而过的人忍不住侧目投来惊艳的目光。
-
楚时站在红绿灯处,凝望着川流不息的车辆,总觉得有些熟悉,眉头不自觉的皱紧。
-
这时,三个女孩你推我挤的走过来。
-
其中一个脸颊通红,“帅。。。帅哥你好!”
-
楚时垂眸,轻声道,“你在和我说话?”
-
她慌张地不敢直视,低着头手里手机被紧紧握着,羞红脸结巴道,“是。。是的,能不。。。。能不。。。。”
-
-
-
-
-
-
-
-{/block}
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Novel/getNovelChapterAll.html b/code/app/home/view/xiongMao/Novel/getNovelChapterAll.html
deleted file mode 100644
index 0c73bf9..0000000
--- a/code/app/home/view/xiongMao/Novel/getNovelChapterAll.html
+++ /dev/null
@@ -1,85 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name='body-class'}chapterlist_xs{/block}
-
-{block name="main"}
-
-
-
-
-
-
- {eq name="strSort" value="asc"}
-
当前正序排列
- {else}
-
当前倒叙序排列
- {/eq}
-
-
-
-
- {foreach $arrNovelChapterAll as $category}
- {include file="Public/chapterTable" /}
- {/foreach}
-
-
-
-
-
-
完结小说推荐www.xmttxs.com
- {foreach $arrNovelChapterAll as $category}
- {include file="Public/novelListH" /}
- {/foreach}
-
-
-www.xmttxs.com
-
最新更新
-
- {foreach $arrNovelChapterAll as $category}
- {include file="Public/updateNovelList" /}
- {/foreach}
-
-
-
-
-
-
-
-
-
-
-
-
-
-{/block}
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Novel/getNovelInfo.html b/code/app/home/view/xiongMao/Novel/getNovelInfo.html
deleted file mode 100644
index 73304e2..0000000
--- a/code/app/home/view/xiongMao/Novel/getNovelInfo.html
+++ /dev/null
@@ -1,84 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name='body-class'}info_xs{/block}
-
-{block name="main"}
-
-
-
-
-
- {foreach $arrRecommendNovel as $category}
- {include file="Public/seoNovelList" /}
- {/foreach}
-
-
-
-
-
-
- {foreach $arrRecommendNovel as $category}
- {include file="Public/chapterTable" /}
- {/foreach}
-
-
-
-
-
-
-
-
- {foreach $arrRecommendNovel as $category}
- {include file="Public/chapterTable" /}
- {/foreach}
-
-
查看更多章节...
-
-
-
-
完结小说推荐www.xmttxs.com
- {foreach $arrRecommendNovel as $category}
- {include file="Public/novelListH" /}
- {/foreach}
-
-
-www.xmttxs.com
-
最新更新
-
- {foreach $arrRecommendNovel as $category}
- {include file="Public/updateNovelList" /}
- {/foreach}
-
-
-
-
-
-
-
-
-
-
-{/block}
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Novel/getSearchNovel.html b/code/app/home/view/xiongMao/Novel/getSearchNovel.html
deleted file mode 100644
index 4cec32a..0000000
--- a/code/app/home/view/xiongMao/Novel/getSearchNovel.html
+++ /dev/null
@@ -1,38 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name='body-class'}top_xs{/block}
-
-{block name="main"}
-
-
-
-
-
- “1”相关结果:
-
- {foreach $arrSearchNovel as $category}
- {include file="Public/novelListH" /}
- {/foreach}
-
-
-
-
-
首 页
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
下一页
-
-
-
-{/block} {block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/Public/articleList.html b/code/app/home/view/xiongMao/Pc/Public/articleList.html
deleted file mode 100644
index 3a6a22b..0000000
--- a/code/app/home/view/xiongMao/Pc/Public/articleList.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/Public/chapterTableAll.html b/code/app/home/view/xiongMao/Pc/Public/chapterTableAll.html
deleted file mode 100644
index 6ae6421..0000000
--- a/code/app/home/view/xiongMao/Pc/Public/chapterTableAll.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
- 第245章 全文完
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/Public/endNovelList.html b/code/app/home/view/xiongMao/Pc/Public/endNovelList.html
deleted file mode 100644
index cb851c3..0000000
--- a/code/app/home/view/xiongMao/Pc/Public/endNovelList.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/Public/footer.html b/code/app/home/view/xiongMao/Pc/Public/footer.html
deleted file mode 100644
index adc12bf..0000000
--- a/code/app/home/view/xiongMao/Pc/Public/footer.html
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/Public/historyNovelList.html b/code/app/home/view/xiongMao/Pc/Public/historyNovelList.html
deleted file mode 100644
index fd4ea96..0000000
--- a/code/app/home/view/xiongMao/Pc/Public/historyNovelList.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
- 抗战之血肉丛林
-
- 疙瘩
- 第七百二十九章 死神来了
-
-
-
- 继续阅读
-
-
-
- 云端保存
-
- 删除
-
-
diff --git a/code/app/home/view/xiongMao/Pc/Public/hostListImg.html b/code/app/home/view/xiongMao/Pc/Public/hostListImg.html
deleted file mode 100644
index 73da104..0000000
--- a/code/app/home/view/xiongMao/Pc/Public/hostListImg.html
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
一朝穿越七十年代,成为了一个将要遭受迫害,面临下乡窘境的物理教授的女儿林听绾,无奈之下被迫相亲!据说那人比她大八岁带三个娃,还不能生育!别人避之不及,林...
-
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/Public/hostListText.html b/code/app/home/view/xiongMao/Pc/Public/hostListText.html
deleted file mode 100644
index 0af65c5..0000000
--- a/code/app/home/view/xiongMao/Pc/Public/hostListText.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
- 我本无意成仙
- 金色茉莉花
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/Public/indexNewsUpdateList.html b/code/app/home/view/xiongMao/Pc/Public/indexNewsUpdateList.html
deleted file mode 100644
index ca29f9a..0000000
--- a/code/app/home/view/xiongMao/Pc/Public/indexNewsUpdateList.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
- [灵异小说]
-
- 一万个我同时穿越
-
- 搓个大丸子
- 03-20
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/User/getBookShelf.html b/code/app/home/view/xiongMao/Pc/User/getBookShelf.html
deleted file mode 100644
index b4a7a05..0000000
--- a/code/app/home/view/xiongMao/Pc/User/getBookShelf.html
+++ /dev/null
@@ -1,38 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name='body-class'}novel_tmpbook{/block}
-
-
-{block name="main"}
-
-
我的书架
-
- -
- 小说名称
- 作者
- 最后阅读章节
- 操作
-
-
- {foreach $arrNewsNovel as $category}
- {include file="/Pc/Public/historyNovelList" /}
- {/foreach}
-
-
-
-
-
-
热门小说推荐
- {foreach $arrNewsNovel as $category}
- {include file="/Pc/Public/hostListImg" /}
- {/foreach}
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/User/getHistory.html b/code/app/home/view/xiongMao/Pc/User/getHistory.html
deleted file mode 100644
index 7c1f497..0000000
--- a/code/app/home/view/xiongMao/Pc/User/getHistory.html
+++ /dev/null
@@ -1,38 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name='body-class'}novel_tmpbook{/block}
-
-
-{block name="main"}
-
-
阅读记录
-
- -
- 小说名称
- 作者
- 最后阅读章节
- 操作
-
-
- {foreach $arrNewsNovel as $category}
- {include file="/Pc/Public/historyNovelList" /}
- {/foreach}
-
-
-
-
-
-
热门小说推荐
- {foreach $arrNewsNovel as $category}
- {include file="/Pc/Public/hostListImg" /}
- {/foreach}
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/getArticleInfo.html b/code/app/home/view/xiongMao/Pc/getArticleInfo.html
deleted file mode 100644
index 5c10385..0000000
--- a/code/app/home/view/xiongMao/Pc/getArticleInfo.html
+++ /dev/null
@@ -1,14 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-
-{block name="main"}
-
-article.......
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/getArticleList.html b/code/app/home/view/xiongMao/Pc/getArticleList.html
deleted file mode 100644
index 0c385c6..0000000
--- a/code/app/home/view/xiongMao/Pc/getArticleList.html
+++ /dev/null
@@ -1,88 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
-
-
-
-
-
-
-
-
- -
-
- - 分类
- - 书名
- - 描述
- - 作者
- - 更新时间
-
-
- {foreach $arrNewsNovel as $key=>$Novel}
- {include file="Pc/Public/articleList" /}
- {/foreach}
-
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/getNovelCategory.html b/code/app/home/view/xiongMao/Pc/getNovelCategory.html
deleted file mode 100644
index 5d31367..0000000
--- a/code/app/home/view/xiongMao/Pc/getNovelCategory.html
+++ /dev/null
@@ -1,58 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
- 热门小说推荐
-
- {foreach $arrRecommendSerializationNovel as $category}
- {include file="/Pc/Public/hostListImg" /}
- {/foreach}
-
-
-
-
-
- 小说列表
-
-
- {foreach $arrRecommendSerializationNovel as $category}
- {include file="/Pc/Public/indexNewsUpdateList" /}
- {/foreach}
-
-
-
-
- 新书入库
-
-
- {foreach $arrRecommendSerializationNovel as $category}
- {include file="/Pc/Public/hostListText" /}
- {/foreach}
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/getNovelChapter.html b/code/app/home/view/xiongMao/Pc/getNovelChapter.html
deleted file mode 100644
index 90a5b86..0000000
--- a/code/app/home/view/xiongMao/Pc/getNovelChapter.html
+++ /dev/null
@@ -1,118 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name='body-class'}novel_chapter{/block}
-{block name="main"}
-
-
-
-
-
第113章 尴尬的张启灵饵(第1页)
-
-
黑瞎子敏锐的捕捉到秦泽口中的关键字“青铜门”,微微蹙起眉头,他问道:“小泽,你是跟哑巴张在青铜门里遇到了什么吗?”
-
秦泽点点头,又摇摇头:“是遇到了一些事情,但我不知道能不能说,还是等小哥醒来之后再告诉你们吧。”
-
说着,他看向了另一张病床上昏迷不醒的张启灵。
-
心中不免有些担心,他不知道张启灵是什么时候昏迷的,想来跟他昏迷的时间也差不了多少。
-
他现在醒过来了,而对方还处于昏迷状态中。
-
【瓶崽的身体比我还要好,他一定会没事儿的】秦泽在心里面安慰着自己。
-
胖子站起身去问医生,秦泽现在的身体情况能不能进食,得到肯定的答复之后,快乐的去给他买粥喝。
-
秦泽喝着胖妈妈买来的粥,一边喝一边有些心不在焉的时不时瞅向,另一张病床上,躺着的张启灵。
-
终于在他第17次看向对方的时候,无邪无奈的叹口气,把他脑袋移过来,道:“认真喝粥,小心点别撒身上了。”
-
“哦。”
-
秦泽乖乖把粥喝完了,他醒来之后又被重新检查一遍身体,确认没有任何问题。
-
医生摇着头,大呼奇怪,但秦泽的身体确实挺健康,看不出有毛病。在秦泽强烈的要求下,同意其出院请求。
-
换下身上穿着的病号服,秦泽和哥几个一起,在病房内盯着张启灵,时时不时聊上几句,气氛异常融洽。
-
确实挺融洽的,毕竟某人头上的表情包有意思的很,都冲淡些许的压抑之感。
-
【瓶崽他睡着之后的样子,看上去好乖呀,可惜哥几个都在我周围,不然我早就上手揉了】
-
【嘿嘿嘿,肯定手感很好】
-
秦泽的话让黑花邪胖额头上齐齐划过黑线。
-
解语臣无奈的叹口气,看来把孩子性取向扳过来的道路,任重而道远啊。
-
黑瞎子抬眼就看到了秦泽头顶的大猫撸瓶猫表情包,不知为何,竟感觉有些心梗。
-
而病床上静静躺着的张启灵略微皱了一下眉头,动静很小,却还是被一直盯着他的秦泽发现了。
-
“小哥他刚刚皱眉头了。”秦泽手指着张起灵说道。
-
“还真是。”胖子凑过去一看,果不其然看到张启灵轻微皱起的眉头。
-
“估计小哥要醒了吧。”无邪道。
-
在五个人的齐注视之下,张启灵缓缓睁开双眼,他的眼神中带着些许的迷茫。
-
“小哥喝口水。”秦泽给张启灵倒了满满一大杯的温水递到他的嘴边。
-
张启灵没有说话,却低下头咕噜噜的喝起来。
-
【猫崽儿喝水,真可爱~】
-
张起灵喝水的动作一僵,口中含着水咽也不是,不咽也不是。
-
解语臣嘴角扬起笑意,很快又压了下来。
-
病人尴尬着呢,不能嘲笑。
-
-
-
- 美人赠我暗妖娆/媚杀+番外 腹黑在手,天下我有/狐狸在手,天下我有(出书版) 大国院士 [原神]穿越到提瓦特我靠卖帝君手办崛起 校花骗我,冷艳老师独宠我一人! (综漫同人)请外援吗?带挂 (原神同人)我在提瓦特当CP记录员 重生长公主 离婚后的我开始转运了 山神圣母守则 我靠吃瓜在年代文暴富 从时间停止开始纵横诸天 瘾诱/破烂事儿+番外 有人说我克夫 公侯庶女 圆满+番外 掌上明珠+番外 娱乐圈小人物史+番外 (综同人)弓弦响彻之时+番外 悍匪掠夺,掠天、掠地、掠众生
-
-
-
-
-
-
- 热门小说推荐
-
- {foreach $arrNewsNovel as $category}
- {include file="/Pc/Public/hostListImg" /}
- {/foreach}
-
-
-
-{/block}
-
-{block name="customize"}
-
-{/block}
-
-{block name="footer-js"}
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/getNovelChapterAll.html b/code/app/home/view/xiongMao/Pc/getNovelChapterAll.html
deleted file mode 100644
index 99ed85d..0000000
--- a/code/app/home/view/xiongMao/Pc/getNovelChapterAll.html
+++ /dev/null
@@ -1,110 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name='body-class'}novel_info{/block}
-{block name="main"}
-
-
-
-
-
-

-
-
-
凝脂美人随军后,最强军爷急红眼
-
-
- 作者:凉城喵
-
- 更新时间:2024-07-01 05:20:19
-
-
- 一朝穿越七十年代,成为了一个将要遭受迫害,面临下乡窘境的物理教授的女儿林听绾,无奈之下被迫相亲!据说那人比她大八岁带三个娃,还不能生育!别人避之不及,林听绾见之却眼前一亮,宽肩窄腰大长腿,一身正气不说,还是个妥妥的纯情小狼狗!结婚后,众人八卦的DNA启动!“听说了吗?陆云铮带回来一个漂亮媳妇,可这后妈不好当啊……”...
- 凝脂美人随军后,最强军爷急红眼
-
-
-
-
-
![]()
-
手机浏览器扫描二维码访问
-
-
-
-
-
《盗墓,被偷听心声后我暴露了》章节列表(第2页)
切换倒序/正序:当前正序
-
-
上一页下一页
-
- {foreach $arrNovelChapterAll as $category}
- {include file="/Pc/Public/chapterTableAll" /}
- {/foreach}
-
-
上一页下一页
-
-
-
-
- 热门小说推荐
-
- {foreach $arrNovelChapterAll as $category}
- {include file="/Pc/Public/hostListImg" /}
- {/foreach}
-
-
-
-{/block}
-
-{block name="customize"}
-
-{/block}
-
-{block name="footer-js"}
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/getNovelInfo.html b/code/app/home/view/xiongMao/Pc/getNovelInfo.html
deleted file mode 100644
index 4881859..0000000
--- a/code/app/home/view/xiongMao/Pc/getNovelInfo.html
+++ /dev/null
@@ -1,158 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name='body-class'}novel_info{/block}
-{block name="main"}
-
-
-
-
-
-

-
-
-
凝脂美人随军后,最强军爷急红眼
-
-
- 作者:凉城喵
-
- 更新时间:2024-07-01 05:20:19
-
-
- 一朝穿越七十年代,成为了一个将要遭受迫害,面临下乡窘境的物理教授的女儿林听绾,无奈之下被迫相亲!据说那人比她大八岁带三个娃,还不能生育!别人避之不及,林听绾见之却眼前一亮,宽肩窄腰大长腿,一身正气不说,还是个妥妥的纯情小狼狗!结婚后,众人八卦的DNA启动!“听说了吗?陆云铮带回来一个漂亮媳妇,可这后妈不好当啊……”...
- 凝脂美人随军后,最强军爷急红眼
-
-
-
-
-
![]()
-
手机浏览器扫描二维码访问
-
-
-
-
-
《凝脂美人随军后,最强军爷急红眼》第245章 全文完
-
-
-
-
《凝脂美人随军后,最强军爷急红眼》最新章节
-
- {foreach $arrRecommendNovel as $category}
- {include file="/Pc/Public/chapterTableAll" /}
- {/foreach}
-
-
-
-
《凝脂美人随军后,最强军爷急红眼》章节列表
-
- {foreach $arrRecommendNovel as $category}
- {include file="/Pc/Public/chapterTableAll" /}
- {/foreach}
-
-
查看更多章节...
-
-
-
- 热门小说推荐
-
- {foreach $arrRecommendNovel as $category}
- {include file="/Pc/Public/hostListImg" /}
- {/foreach}
-
-
-
-{/block}
-
-{block name="customize"}
-
-{/block}
-
-{block name="footer-js"}
-
-{/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/getSearchNovel.html b/code/app/home/view/xiongMao/Pc/getSearchNovel.html
deleted file mode 100644
index e5a3892..0000000
--- a/code/app/home/view/xiongMao/Pc/getSearchNovel.html
+++ /dev/null
@@ -1,68 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
-
-
-
-
-
- {foreach $arrSearchNovel as $key=>$Novel}
- -
-
-
-
-
-
-
- 作者:青城老鬼
- 分类:
- 状态:已完结
- 总字数:38.00万字+
-
-
- 标签:
-
-
-
最近更新:第190章 武破虚空,新的开始
-
深海中潜藏的巨兽掀起灭世海啸!山间凶兽朝着钢铁巨城露出凶猛的獠牙。 即将参加高考的武道学生徐天觉醒深红系统。却没想觉醒日被未婚妻强行退婚,面对众人诋毁,未婚妻的鄙视。
- 地阶天赋又如何,深红,给我加点!
- 本站提示:各位书友要是觉得《1秒1技能点,你说我凡阶天赋修炼慢?》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!
-
-
-
更新时间:2025-03-20 23:57
-
立即阅读
-
-
- {/foreach}
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/getUserIndex.html b/code/app/home/view/xiongMao/Pc/getUserIndex.html
deleted file mode 100644
index 198f188..0000000
--- a/code/app/home/view/xiongMao/Pc/getUserIndex.html
+++ /dev/null
@@ -1,143 +0,0 @@
-{extend name="basePcUser" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
-
-
-
-
-
-
-
- {foreach $arrNewsNovel as $key=>$Novel}
-
- {/foreach}
-
-
-
-
-
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Pc/index.html b/code/app/home/view/xiongMao/Pc/index.html
deleted file mode 100644
index 48293aa..0000000
--- a/code/app/home/view/xiongMao/Pc/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-{extend name="basePc" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-
-{block name="main"}
-
-
-
- 已完结小说推荐
-
- {foreach $arrRecommendSerializationNovel as $category}
- {include file="/Pc/Public/hostListImg" /}
- {/foreach}
-
-
-
- 热门小说
-
-
- {foreach $arrRecommendSerializationNovel as $category}
- {include file="/Pc/Public/hostListText" /}
- {/foreach}
-
-
-
-
-
-
- 最新更新
-
-
- {foreach $arrRecommendSerializationNovel as $category}
- {include file="/Pc/Public/indexNewsUpdateList" /}
- {/foreach}
-
-
-
-
- 新书入库
-
-
- {foreach $arrRecommendSerializationNovel as $category}
- {include file="/Pc/Public/hostListText" /}
- {/foreach}
-
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Public/articleList.html b/code/app/home/view/xiongMao/Public/articleList.html
deleted file mode 100644
index 4946aeb..0000000
--- a/code/app/home/view/xiongMao/Public/articleList.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
- {$key+=1}
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Public/chapterTable.html b/code/app/home/view/xiongMao/Public/chapterTable.html
deleted file mode 100644
index 251cf3a..0000000
--- a/code/app/home/view/xiongMao/Public/chapterTable.html
+++ /dev/null
@@ -1,2 +0,0 @@
-
-第13章 终章 上古真神13
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Public/chapterTableAll.html b/code/app/home/view/xiongMao/Public/chapterTableAll.html
deleted file mode 100644
index ec3a545..0000000
--- a/code/app/home/view/xiongMao/Public/chapterTableAll.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- 01 天龙问世
-
-
-
-
- 02 沧武的小霸王
-
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Public/footer.html b/code/app/home/view/xiongMao/Public/footer.html
deleted file mode 100644
index 385093d..0000000
--- a/code/app/home/view/xiongMao/Public/footer.html
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
www.xmttxs.com 熊猫小说网
畅快阅读 永久免费
请注意适当休息 保护好您的眼睛
-
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Public/historyNovelList.html b/code/app/home/view/xiongMao/Public/historyNovelList.html
deleted file mode 100644
index aa9c8c7..0000000
--- a/code/app/home/view/xiongMao/Public/historyNovelList.html
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
小说作者:卿君好
-
上次阅读:第11章 终章 上古真神11
-
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Public/novelCategoryList.html b/code/app/home/view/xiongMao/Public/novelCategoryList.html
deleted file mode 100644
index 1efdcb6..0000000
--- a/code/app/home/view/xiongMao/Public/novelCategoryList.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
HP屑巫师
-
- 女主无CP。斯莱特林女主,黑巫师,很颠很屑,混邪乐子人,GGAD狂热粉头,子世代。一家三口轻松搞笑文,格林德沃,邓布利多带熊孩子身为邓布利多和格林德沃血盟瓶,艾莉森格林德沃今天也在试图撮合双亲。曾经困在自己电脑里的几个游戏世界,在等...
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Public/novelListH.html b/code/app/home/view/xiongMao/Public/novelListH.html
deleted file mode 100644
index 397b7d0..0000000
--- a/code/app/home/view/xiongMao/Public/novelListH.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-

-
-
-
万人迷C总想暴走【无限】
-
这是一朵表面白莲内心食人花受与疯批切片老攻相爱相杀的故事。演员楚时意外进入了无限世界,与新人玩家不同就算了,居...
-
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Public/novelText.html b/code/app/home/view/xiongMao/Public/novelText.html
deleted file mode 100644
index ef01136..0000000
--- a/code/app/home/view/xiongMao/Public/novelText.html
+++ /dev/null
@@ -1 +0,0 @@
-[重生]侠骨温敛
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Public/seoNovelList.html b/code/app/home/view/xiongMao/Public/seoNovelList.html
deleted file mode 100644
index 916e2b2..0000000
--- a/code/app/home/view/xiongMao/Public/seoNovelList.html
+++ /dev/null
@@ -1 +0,0 @@
-万人迷总在崩人设全文
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/Public/updateNovelList.html b/code/app/home/view/xiongMao/Public/updateNovelList.html
deleted file mode 100644
index 49863b3..0000000
--- a/code/app/home/view/xiongMao/Public/updateNovelList.html
+++ /dev/null
@@ -1,4 +0,0 @@
-心之怪盗!但柯南
- 六日四尘
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/User/getBookShelf.html b/code/app/home/view/xiongMao/User/getBookShelf.html
deleted file mode 100644
index efd9fef..0000000
--- a/code/app/home/view/xiongMao/User/getBookShelf.html
+++ /dev/null
@@ -1,50 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name='body-class'}top_xs{/block}
-
-{block name="main"}
-
-
-
我的书架
- {foreach $arrNewsNovel as $category}
- {include file="Public/historyNovelList" /}
- {/foreach}
-
-
-
-
完结小说推荐www.xmttxs.com
-
-
- {foreach $arrNewsNovel as $category}
- {include file="Public/novelListH" /}
- {/foreach}
-
-
-
-
-
-
-
-
-
-
-
-{/block} {block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/User/getHistory.html b/code/app/home/view/xiongMao/User/getHistory.html
deleted file mode 100644
index 846da4d..0000000
--- a/code/app/home/view/xiongMao/User/getHistory.html
+++ /dev/null
@@ -1,50 +0,0 @@
-{extend name="baseH5" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name='body-class'}top_xs{/block}
-
-{block name="main"}
-
-
-
阅读历史(浏览器储存记录)
- {foreach $arrNewsNovel as $category}
- {include file="Public/historyNovelList" /}
- {/foreach}
-
-
-
-
完结小说推荐www.xmttxs.com
-
-
- {foreach $arrNewsNovel as $category}
- {include file="Public/novelListH" /}
- {/foreach}
-
-
-
-
-
-
-
-
-
-
-
-{/block} {block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/User/index.html b/code/app/home/view/xiongMao/User/index.html
deleted file mode 100644
index e37fe98..0000000
--- a/code/app/home/view/xiongMao/User/index.html
+++ /dev/null
@@ -1,60 +0,0 @@
-{extend name="baseH5User" /}
-{block name='nav-active-class'}home{/block}
-{block name="title"}{/block}
-{block name="head-js"}{/block}
-
-{block name="head-name"}用户中心{/block}
-{block name="main"}
-
-
-{/block}
-
-{block name="customize"} {/block}
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/baseH5.html b/code/app/home/view/xiongMao/baseH5.html
deleted file mode 100644
index 7854754..0000000
--- a/code/app/home/view/xiongMao/baseH5.html
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- 熊猫小说网_书友最值得收藏的网络小说阅读网
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {block name="main"} {/block}
-
- {include file="/Public/footer" /}
-
- {block name="customize"}{/block}
-
-
-
- {block name="footer-js"}{/block}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/code/app/home/view/xiongMao/basePc.html b/code/app/home/view/xiongMao/basePc.html
deleted file mode 100644
index cc0e942..0000000
--- a/code/app/home/view/xiongMao/basePc.html
+++ /dev/null
@@ -1,213 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- 熊猫小说网_书友最值得收藏的网络小说阅读网
-
-
-
-
-
-
-
-
-
-
- {block name="main"} {/block}
-
-
-
-
-
-
-
-
diff --git a/code/app/home/view/xiongMao/index.md b/code/app/home/view/xiongMao/index.md
deleted file mode 100644
index 59e3437..0000000
--- a/code/app/home/view/xiongMao/index.md
+++ /dev/null
@@ -1,79 +0,0 @@
-熊猫小说模板
-源地址: (https://www.xmttxs.com)
-
-H5
-H5-首页:
- 1.首页第一板块:热门小说推荐,取推荐等级为9的,完结的,随机6个小说
- 2.首页第二板块:最新小说,随机取最新入库的 10个小说
- 3.首页第三板块:连载小说推荐,取推荐等级为9的,连载的,随机10个小说
- 4.首页第四板块:热门收藏,增加收藏统计和api,根据收藏排序,随机10个小说
- 5.首页第五板块:最近更新,根据最近更新的排序,随机30个小说
-H5-分类页面:
- 1.分类页面第一板块:根据分类id,提取最新的 随机20个小说
- 2.分类页面第一板块:完结小说推荐,取推荐等级为9的,完结的,随机6个小说
- 3.分页
-
-H5-阅读记录页面:
- 1.第二板块:完结小说推荐,取推荐等级为9的,完结的,随机6个小说
-
-H5-我的书架页面:
- 1.第二板块:完结小说推荐,取推荐等级为9的,完结的,随机6个小说
-
-
-H5-详情页面:
- 1.小说详情信息
- 2.小说 kan 相关信息
- 3.最新章节获取 5章节
- 4.小说 1-100章节
- 5.根据当前小说分类,获取完结的,随机6个小说
- 6.根据当前小说分类最近更新,随机10个小说
-
-H5-目录页面:
- 1.小说章节列表,根据分页,倒叙或者正序, 获取对应分页的 章节列表 100章节/页
- 2.小说章节分页下拉列表,和上一页和下一页
- 3.根据当前小说分类,获取完结的,随机6个小说
- 4.根据当前小说分类最近更新,随机10个小说
-
-H5-章节页面:
- 1.小说章节信息,上一章和下一章节
- -----------------------------------------------------------------------------------
-
-PC
-公共数据
-底部 友情链接
-底部 每日热搜小说推荐: kan 数据列表随机展示20个
-pc-首页
- 1.首页第一板块:已完结小说推荐: 取推荐等级为9的,完结的,随机9个小说
- 2.首页第二板块:热门小说:取推荐等级为9的 ,连载的,随机取最新入库的 13个小说
- 3.首页第三板块:最近更新,根据最近更新的排序,随机30个小说
- 4.首页第三板块:新书入库,随机取最新入库的 随机30个小说
-
-pc-分类
- 1.第一板块:热门推荐小说:取推荐等级为9的 ,随机取最新入库的 6个小说
- 2.第二板块:小说列表,当前分类 随机30个小说
- 3.第三板块:新书入库,随机取最新入库的 随机30个小说
- 4. 分页
-
-pc-阅读记录页面:
- 1.第二板块:热门小说推荐,取推荐等级为9的,随机12个小说
-
-pc-我的书架页面:
- 1.第二板块:热门小说推荐,取推荐等级为9的,随机12个小说
-
-pc-详情页面:
- 1.小说详情信息
- 2.小说 kan 相关信息
- 3.最新章节获取 16章节
- 4.小说 1-100章节
- 5.根据当前小说分类,获取完结的,推荐等级倒叙 ,随机6个小说
- 6.根据当前小说分类 ,随机10个小说
-
-pc-目录页面:
- 1.小说详情信息
- 2.小说章节列表,根据分页,倒叙或者正序, 获取对应分页的 章节列表 100章节/页
- 3.小说章节分页下拉列表,和上一页和下一页
- 4.根据当前小说分类,获取完结的,推荐等级倒叙 ,随机6个小说
-
-pc-章节页面:
- 1.小说章节信息,上一章和下一章节
- 2.根据当前小说分类,获取完结的,推荐等级倒叙 ,随机6个小说
diff --git a/code/app/middleware.php b/code/app/middleware.php
deleted file mode 100644
index d2c3fda..0000000
--- a/code/app/middleware.php
+++ /dev/null
@@ -1,10 +0,0 @@
-alias('arn')
- ->field('an.an_url')
- ->leftjoin('admin_node an','an.an_id=arn.an_id');
-
- if($intArId>0)
- {
- $AdminRoleNodeModel = $AdminRoleNodeModel->where('arn.ar_id',$intArId);
- }
-
- $arrRoleNode = $AdminRoleNodeModel
- ->select()
- ->toArray();
-
- $arrRoleNode = array_column($arrRoleNode, 'an_url');
-
- // Cache::set($strCacheKey,$arrRoleNode);
- }
-
- return $arrRoleNode;
- }
-}
diff --git a/code/app/model/AdminRoleNodeModel.php b/code/app/model/AdminRoleNodeModel.php
deleted file mode 100644
index f4325fc..0000000
--- a/code/app/model/AdminRoleNodeModel.php
+++ /dev/null
@@ -1,15 +0,0 @@
-token = $strToken;
-
- $AdminUserModel->refreshToken();
-
- return $AdminUserModel;
- }
-
- public function checkRole()
- {
- return true;
- }
-
-
- public function createToken()
- {
- $this->token = Str::random(32);
-
- $this->refreshToken();
-
- return $this->token;
- }
-
- public function refreshToken()
- {
- Cache::set("AdminToken:" . $this->token, $this->au_id, 3600);
- }
-
- static public function getAdminUserModelByCache($intAuId, $boolForceUpdate = false)
- {
- $strKey = "AdminUser:Id:" . $intAuId;
-
- $AdminUserModel = Cache::get($strKey);
-
- if (empty($AdminUserModel) || $boolForceUpdate == true) {
- $AdminUserModel = self::where('au_id', $intAuId)->find();
-
- if (empty($AdminUserModel)) {
- throw new \Exception("用户不存在", 9999);
- }
- $AdminUserModel->au_pwd = "";
-
- Cache::set($strKey, $AdminUserModel);
- }
-
- return $AdminUserModel;
- }
-}
diff --git a/code/app/model/BaseModel.php b/code/app/model/BaseModel.php
deleted file mode 100644
index a4073ef..0000000
--- a/code/app/model/BaseModel.php
+++ /dev/null
@@ -1,21 +0,0 @@
- $strVal) {
- $this->$strKey = $strVal;
- }
- }
-}
diff --git a/code/app/model/CaiJiPeiZhiModel.php b/code/app/model/CaiJiPeiZhiModel.php
deleted file mode 100644
index 4d56c22..0000000
--- a/code/app/model/CaiJiPeiZhiModel.php
+++ /dev/null
@@ -1,39 +0,0 @@
-set('CaiJiPeiZhi', $arrCaiJiPeiZhi);
- }
-}
diff --git a/code/app/model/CategoryModel.php b/code/app/model/CategoryModel.php
deleted file mode 100644
index 08da1b3..0000000
--- a/code/app/model/CategoryModel.php
+++ /dev/null
@@ -1,202 +0,0 @@
- '玄幻修真',
- 2 => '军史小说',
- 3 => '网游小说',
- 4 => '科幻小说',
- 5 => '重生穿越',
- 6 => '都市小说',
- 7 => '灵异小说',
- 8 => '言情小说',
- 9 => '其他小说',
- ];
-
- static $arrCategoryAll = [
- 'man' => [
- 'xuanhuan-xiuzhen' => '玄幻修真',
- 'junshi-xiaoshuo' => '军史小说',
- 'wangyou-xiaoshuo' => '网游小说',
- 'kehuan-xiaoshuo' => '科幻小说',
- ],
- 'women' => [
- 'zhongsheng-chuanyue' => '重生穿越',
- 'dushi-xiaoshuo' => '都市小说',
- 'lingyi-xiaoshuo' => '灵异小说',
- 'yanqing-xiaoshuo' => '言情小说',
- 'qita-xiaoshuo' => '其他小说',
- ]
- ];
-
- static $arrCategoryPinYin = [
- 1 => 'xuanhuan-xiuzhen', // 玄幻-修真
- 2 => 'junshi-xiaoshuo', // 军史-小说
- 3 => 'wangyou-xiaoshuo', // 网游-小说
- 4 => 'kehuan-xiaoshuo', // 科幻-小说
- 5 => 'zhongsheng-chuanyue', // 重生-穿越
- 6 => 'dushi-xiaoshuo', // 都市-小说
- 7 => 'lingyi-xiaoshuo', // 灵异-小说
- 8 => 'yanqing-xiaoshuo', // 言情-小说
- 9 => 'qita-xiaoshuo', // 其他-小说
- ];
-
- static $arrMan = [
- 1 => '玄幻修真',
- 2 => '军史小说',
- 3 => '网游小说',
- 4 => '科幻小说',
- ];
-
- static $arrWomen = [
- 5 => '重生穿越',
- 6 => '都市小说',
- 7 => '灵异小说',
- 8 => '言情小说',
- 9 => '其他小说',
- ];
-
-
- /**
- * get category of the novels
- *
- * @return array
- */
- static public function getCategory(): array
- {
- return self::$arrCategory;
- }
-
-
- /**
- * Undocumented function
- *
- * @param integer $intType
- * @param boolean $boolOnlyValue
- * @return array
- */
- static public function getCategoryByType(int $intType, bool $boolOnlyValue = true): array
- {
- $arrCategory = [];
- switch ($intType) {
- case 1:
- if ($boolOnlyValue) {
- $arrCategory = array_values(CategoryModel::getManCategory());
- } else {
- $arrCategory = CategoryModel::getManCategory();
- }
-
-
- break;
- case 2:
- if ($boolOnlyValue) {
- $arrCategory = array_values(CategoryModel::getWomenCategory());
- } else {
- $arrCategory = CategoryModel::getWomenCategory();
- }
- break;
- }
- return $arrCategory;
- }
-
- /**
- * get a category of man's novels
- *
- * @return array
- */
- static public function getManCategory(): array
- {
- return self::$arrMan;
- }
-
- /**
- * get a category of the woman novels
- *
- * @return array
- */
- static public function getWomenCategory(): array
- {
- return self::$arrWomen;
- }
-
- /**
- * get pinyin based on chinese characters
- *
- * @param string $strZh
- * @return string
- */
- static public function getPinYin(string $strZh)
- {
- $intKey = array_search($strZh, self::$arrCategory);
- return self::$arrCategoryPinYin[$intKey];
- }
-
-
- /**
- * get chinese characters based on pinyin
- *
- * @param string $strPinYin
- * @return string|null
- */
- static public function getZhByPinYin(string $strPinYin): string|null
- {
- $strZh = NULL;
- $intKey = array_search($strPinYin, self::$arrCategoryPinYin);
- if (is_numeric($intKey)) {
- $strZh = self::$arrCategory[$intKey];
- }
- return $strZh;
- }
-
- /**
- * determine the gender of the novel category
- *
- * @param string $strName
- * @return string
- */
- static public function getSexEn(string $strName): string
- {
- return in_array($strName, self::$arrMan) ? 'man' : 'women';
- }
-
- /**
- * determine the gender of the novel category
- *
- * @param string $strName
- * @return string
- */
- static public function getSexZh(string $strName): string
- {
- return in_array($strName, self::$arrMan) ? '男生' : '女生';
- }
-}
diff --git a/code/app/model/ChapterModel.php b/code/app/model/ChapterModel.php
deleted file mode 100644
index f6b557f..0000000
--- a/code/app/model/ChapterModel.php
+++ /dev/null
@@ -1,319 +0,0 @@
- [
- 'root' => 'array',
- 'document' => 'array',
- 'array' => 'array',
- ],
- 'projection' => [
- '_id' => 0,
- 'c_source_id' => 0,
- 'c_site_code' => 0,
- 'c_source_uuid' => 0,
-
- ],
- ];
-
- /**
- * Undocumented function
- *
- * @param array $arrFilter
- * @param integer $intPage
- * @param integer $intLimit
- * @param array $arrSort
- * @param string $strKey
- * @param integer $intLifeTime
- * @return array
- */
- public function findPaginatedWithCache(
- array $arrFilter,
- int $intPage = 1,
- int $intLimit = 20,
- array $arrSort = ['c_sort_num' => 1],
- string $strKey = '',
- int $intLifeTime = 24 * 3600,
- ): array {
- try {
-
- $arrResult = $this->checkCacheByKey($strKey);
- if ($arrResult !== NULL) {
- return $arrResult;
- }
-
- $arrOptions = self::$arrChapterOptions;
-
- $arrOptions = array_merge($arrOptions, [
- 'sort' => $arrSort,
- 'skip' => ($intPage - 1) * $intLimit,
- 'limit' => $intLimit,
- ]);
-
-
- $Cursor = $this->getCol()->find($arrFilter, $arrOptions);
-
- $intTotal = $this->getCol()->countDocuments($arrFilter);
-
- $arrResult = iterator_to_array($Cursor);
-
- if (!empty($arrResult)) {
- foreach ($arrResult as &$arrChapter) {
- applyToKeys($arrChapter, ['created_at', 'updated_at'], 'formatMongoDate');
- }
- }
-
- $arrResult = [
- 'data' => $arrResult,
- 'total' => $intTotal,
- 'page' => $intPage,
- 'limit' => $intLimit,
- 'pages' => ceil($intTotal / $intLimit)
- ];
-
- $this->setCacheByKey($strKey, $arrResult, $intLifeTime);
-
- return $arrResult;
- } catch (\Exception $e) {
- return [];
- }
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrFilter
- * @return null|array
- */
- public function findOne(array $arrFilter, array $arrOptions = [], bool $boolReadContent = true): null|array
- {
- if (empty($arrOptions)) {
- $arrOptions = self::$arrChapterOptions;
- }
-
- $arrChapter = $this->getOne($arrFilter, $arrOptions);
-
- if (!empty($arrChapter)) {
- try {
- applyToKeys($arrChapter, ['created_at', 'updated_at'], 'formatMongoDate');
- } catch (\Exception $e) {
- var_dump($arrChapter);
- throw $e;
- }
-
-
- if ($boolReadContent) {
- $arrChapter['c_content'] = StorageCore::getInstance()->read($arrChapter['c_content_path']);
- } else {
- $arrChapter['c_content'] = '';
- }
- }
-
- return $arrChapter;
- }
-
- /**
- * Undocumented function
- *
- * @param integer $intNId
- * @return null|array
- */
- public function getLatestChapterByNId(int $intNId, bool $boolReadContent = true): null|array
- {
- $arrFilter = ['n_id' => $intNId, 'c_page' => 0];
-
- $arrOptions = self::$arrChapterOptions;
-
- $arrOptions['sort'] = ['c_sort_num' => -1];
-
- return $this->findOne($arrFilter, $arrOptions, $boolReadContent);
- }
-
- /**
- * Undocumented function
- *
- * @param integer $intNId
- * @return null|array
- */
- public function getFirstChapterByNId(int $intNId, bool $boolReadContent = true): null|array
- {
- $arrFilter = ['n_id' => $intNId, 'c_page' => 0];
-
- $arrOptions = self::$arrChapterOptions;
-
- $arrOptions['sort'] = ['c_sort_num' => 1];
-
- return $this->findOne($arrFilter, $arrOptions, $boolReadContent);
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrFilter
- * @param integer $intCount
- * @param array $arrSort
- * @param array $arrOptions
- * @param boolean $boolReadContent
- * @return null|array
- */
- public function findMany(array $arrFilter, int $intCount = 0, array $arrSort = ['c_sort_num' => -1], array $arrOptions = [], bool $boolReadContent = false): null|array
- {
- if (empty($arrOptions)) {
- $arrOptions = self::$arrChapterOptions;
- }
-
- $arrOptions['sort'] = $arrSort;
-
- if ($intCount > 0) {
- $arrOptions['limit'] = $intCount;
- }
-
- $Cursor = $this->getCol()->find($arrFilter, $arrOptions);
-
- $arrResult = iterator_to_array($Cursor);
-
- foreach ($arrResult as &$arrItem) {
- applyToKeys($arrItem, ['created_at', 'updated_at'], 'formatMongoDate');
- $arrItem['c_content'] = '';
- if ($boolReadContent) {
- $arrItem['c_content'] = StorageCore::getInstance()->read($arrItem['c_content_path']);
- }
- }
-
- return $arrResult;
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrFilter
- * @param integer $intCount
- * @param array $arrSort
- * @param array $arrOptions
- * @param boolean $boolReadContent
- * @return null|array
- */
- public function findManyShuffledWithCache(
- array $arrFilter,
- int $intCount = 0,
- array $arrSort = ['c_sort_num' => -1],
- string $strKey = '',
- int $intLifeTime = 24 * 3600,
- bool $boolReadContent = false
- ): null|array {
- $arrResult = $this->checkCacheByKey($strKey);
- if ($arrResult !== NULL) {
- return $arrResult;
- }
-
- if (empty($arrOptions)) {
- $arrOptions = self::$arrChapterOptions;
- }
-
- $arrResult = $this->findMany($arrFilter, $intCount, $arrSort, [], $boolReadContent);
-
- $this->setCacheByKey($strKey, $arrResult, $intLifeTime);
-
- return $arrResult;
- }
-
- /**
- * Undocumented function
- *
- * @param integer $intNId
- * @param integer $intCSortNum
- * @param integer $intCPage
- * @return null|array
- */
- public function getPreChapter(int $intNId, int $intCSortNum, int $intCPage): null|array
- {
- $arrFilter = [
- '$and' => [
- [
- '$or' => [
- ['c_sort_num' => ['$lt' => $intCSortNum]],
- [
- '$and' => [
- ['c_sort_num' => ['$eq' => $intCSortNum]],
- ['c_page' => ['$lt' => $intCPage]]
- ]
- ]
- ]
- ],
- ['n_id' => $intNId]
- ]
- ];
-
-
- $arrSort = [
- 'c_sort_num' => -1,
- 'c_page' => -1,
- ];
-
- $arrChapterAll = $this->findMany($arrFilter, 1, $arrSort);
- return $arrChapterAll[0] ?? [];
- }
-
- /**
- * Undocumented function
- *
- * @param integer $intNId
- * @param integer $intCSortNum
- * @param integer $intCPage
- * @return null|array
- */
- public function getNextChapter(int $intNId, int $intCSortNum, int $intCPage): null|array
- {
- $arrFilter = [
- '$and' => [
- [
- '$or' => [
- ['c_sort_num' => ['$gt' => $intCSortNum]],
- [
- '$and' => [
- ['c_sort_num' => ['$eq' => $intCSortNum]],
- ['c_page' => ['$gt' => $intCPage]]
- ]
- ]
- ]
- ],
- ['n_id' => $intNId]
- ]
- ];
-
-
- $arrSort = [
- 'c_sort_num' => 1,
- 'c_page' => 1,
- ];
-
- $arrChapterAll = $this->findMany($arrFilter, 1, $arrSort);
- return $arrChapterAll[0] ?? [];
- }
-}
diff --git a/code/app/model/ConfigSubjectFomartModel.php b/code/app/model/ConfigSubjectFomartModel.php
deleted file mode 100644
index 03f9426..0000000
--- a/code/app/model/ConfigSubjectFomartModel.php
+++ /dev/null
@@ -1,146 +0,0 @@
- [
- 'root' => 'array',
- 'document' => 'array',
- 'array' => 'array',
- ],
- 'projection' => [
- '_id' => 0,
- ],
- ];
-
-
- /**
- * 直接读库查询大量小说
- *
- * @param integer $intNId
- * @return null|array
- */
- public function findMany(array $arrFilter, int $intCount = 10, array $arrSort = [], array $arrOptions = []): null|array
- {
- if (empty($arrOptions)) {
- $arrOptions = self::$arrOptions;
- }
-
- if ($intCount > 0) {
- $arrOptions['limit'] = $intCount;
- }
-
- if (empty($arrSort)) {
- $arrOptions['sort'] = $arrSort;
- }
-
- $Cursor = $this->getCol()->find($arrFilter, $arrOptions);
-
- $arrResult = iterator_to_array($Cursor);
-
- return $arrResult;
- }
-
-
- /**
- * 查询多条数据并缓存
- *
- * @param array $arrFilter
- * @param integer $intCount
- * @param array $arrSort
- * @param array $arrOptions
- * @param string $strKey
- * @param integer $intLifeTime
- * @return null|array
- */
- public function findManyWithCache(
- array $arrFilter,
- int $intCount = 0,
- array $arrSort = [],
- array $arrOptions = [],
- string $strKey = '',
- int $intLifeTime = 24 * 3600,
- ): null|array {
- try {
-
- $arrResult = $this->checkCacheByKey($strKey);
- if ($arrResult !== NULL) {
- return $arrResult;
- }
-
- $arrResult = $this->findMany($arrFilter, $intCount, $arrSort, $arrOptions);
-
- $this->setCacheByKey($strKey, $arrResult, $intLifeTime);
-
- return $arrResult;
- } catch (\Exception $e) {
- return [];
- }
- }
-
-
- /**
- * find one novel
- *
- * @param array $arrFilter
- * @param array $arrOptions
- * @return null|array
- */
- public function findOne(array $arrFilter, array $arrOptions = []): null|array
- {
- if (empty($arrOptions)) {
- $arrOptions = self::$arrOptions;
- }
-
- $arrNovel = $this->getOne($arrFilter, $arrOptions);
-
- return $arrNovel;
- }
-
- /**
- * 根据小说ID查询指定小说
- *
- * @param integer $intNId
- * @return array
- */
- public function getConfigSubjectFomartByCsfKey(string $intNId): null|array
- {
- $arrFilter = ['csf_key' => $intNId];
- return $this->findOne($arrFilter);
- }
-
-
-}
diff --git a/code/app/model/ConverterMovel.php b/code/app/model/ConverterMovel.php
deleted file mode 100644
index 21e5875..0000000
--- a/code/app/model/ConverterMovel.php
+++ /dev/null
@@ -1,108 +0,0 @@
- '',
- '{strSiteDomain}' => '',
- '{strSiteKeywords}' => '',
- '{strSiteDescription}' => '',
- '{strIndexTitle}' => '',
- '{strIndexKeywords}' => '',
- '{strIndexDescription}' => '',
- '{strNovelName}' => '',
- '{strNovelChapterName}' => '',
- '{strNovelChapterSort}' => '',
- '{strChapterDescription}' => '',
- '{strNovelCategoryName}' => '',
- '{strNovelSex}' => '',
- '{strNovelStatus}' => '',
- '{intPage}' => '',
- '{strNovelAuthor}' => '',
- '{strNovelDescription}' => '',
- '{strSearchKeywords}' => '',
-
- ];
-
- static public $arrDescription = [
- '{strSiteName}' => '这个是网站名',
- '{strSiteDomain}' => '这个是站点域名',
- '{strSiteKeywords}' => '这个是网站关键字',
- '{strSiteDescription}' => '这个是网站描述',
- '{strIndexTitle}' => '这个是首页Title',
- '{strIndexKeywords}' => '这个是首页Keywords',
- '{strIndexDescription}' => '这个是首页Description',
- '{strNovelName}' => '这个是当前页面小说名字',
- '{strNovelChapterName}' => '当前页面小说章节名字',
- '{strNovelChapterSort}' => '当前页面小说章节排序号',
- '{strChapterDescription}' => '当前页面小说章节描述',
- '{strNovelCategoryName}' => '当前页面小说分类名字',
- '{strNovelSex}' => '当前页面小说是男生还是女生 小说',
- '{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
- '{intPage}' => '当前页面分页页码',
- '{strNovelAuthor}' => '小说作者',
- '{strNovelDescription}' => '小说简介',
- '{strSearchKeywords}' => '搜索关键词',
- ];
-
- static private function getKey($strKey): string
- {
- return '{' . $strKey . '}';
- }
-
-
- /**
- * Undocumented function
- *
- * @param string|array $mixedKey 全局动态变量键或者数组
- * @param string $strVal 全局动态变量值
- * @return void
- */
- static public function setVal(string | array $mixedKey, $strVal = NULL)
- {
- if (is_string($mixedKey)) {
- self::$arrMap[self::getKey($mixedKey)] = $strVal;
- } else if (is_array($mixedKey)) {
- foreach ($mixedKey as $strKey => $strVal) {
- if (key_exists(self::getKey($strKey), self::$arrMap)) {
- self::$arrMap[self::getKey($strKey)] = $strVal;
- }
- }
- }
- }
-
- /**
- * Undocumented function
- *
- * @param string $strKey
- * @return void
- */
- static public function getVal(string $strKey)
- {
- return self::$arrMap[self::getKey($strKey)];
- }
-
- /**
- * Undocumented function
- *
- * @param string $strSubject
- * @return string
- */
- static public function convert(string $strSubject): string
- {
- $strSubject = str_replace(array_keys(self::$arrMap), array_values(self::$arrMap), $strSubject);
-
- return str_replace(array_keys(self::$arrMap), array_values(self::$arrMap), $strSubject);
- }
-}
diff --git a/code/app/model/CountersModel.php b/code/app/model/CountersModel.php
deleted file mode 100644
index fdd707d..0000000
--- a/code/app/model/CountersModel.php
+++ /dev/null
@@ -1,63 +0,0 @@
- [
- 'root' => 'array',
- 'document' => 'array',
- 'array' => 'array',
- ],
- 'projection' => [
- '_id' => 0,
- ],
- ];
-
- /**
- * 获取下一个自增序列值
- * @param string $strSequenceName 序列名称
- * @return int 自增 ID
- */
- public function getNextSequence(string $strSequenceName): int
- {
- $Result = $this->getCol()->findOneAndUpdate(
- ['_id' => $strSequenceName],
- ['$inc' => ['sequence_value' => 1]],
- [
- 'upsert' => true,
- 'returnDocument' => \MongoDB\Operation\FindOneAndUpdate::RETURN_DOCUMENT_AFTER
- ]
- );
- return $Result->sequence_value ?? 1;
- }
-}
diff --git a/code/app/model/DomainModel.php b/code/app/model/DomainModel.php
deleted file mode 100644
index 0e6f32b..0000000
--- a/code/app/model/DomainModel.php
+++ /dev/null
@@ -1,148 +0,0 @@
-d_domain] = $DomainModel;
- }
-
- return Cache::set($strKey, self::$arrAllDomain);
- }
-
- /**
- * Undocumented function
- *
- * @param string $strDomain
- * @return DomainModel|NULL
- */
- static public function getDomainOnCacheByDomain($strDomain): DomainModel|NULL
- {
- if (key_exists($strDomain, self::getAllDomainOnCache())) {
- return self::getAllDomainOnCache()[$strDomain];
- }
-
- return NULL;
- }
-
- /**
- * Undocumented function
- *
- * @param string $strWords
- * @return string
- */
- static public function wordsEncode($strWords): string
- {
- $Request = request();
- $intEncode = $Request->DomainModel->d_content_encode;
-
- if ($intEncode == 1) {
- $strWords = customEntities($strWords);
- }
-
- return $strWords;
- }
-
-
- /**
- * Undocumented function
- *
- * @param string $strKey
- * @return string
- */
- public function getFomartSubject($strKey, $strDiff = '', bool $boolJoin = true)
- {
- $intSfgId = $this->t_cfg->{$strKey}['sfg_id'];
- $SubjectFomartModel = NULL;
-
- $arrAllSubjectFomartModel = SubjectFomartModel::getAllSubjectFomartOnCacheBySfgId($intSfgId);
- if (empty($arrAllSubjectFomartModel)) {
- return '';
- }
-
- $strDomain = request()->DomainModel->d_domain;
- $strController = request()->controller();
- $strAction = request()->action();
-
- if ($boolJoin) {
- $strUUId = sprintf('%s-%s-%s-%s-%s', $strDomain, $strController, $strAction, $strKey, $strDiff);
- } else {
- $strUUId = sprintf('%s-%s-%s', $strDomain, $strKey, $strDiff);
- }
-
- $arrConfigSubjectFomart = ConfigSubjectFomartModel::getInstance()->getConfigSubjectFomartByCsfKey($strUUId);
-
- if (empty($arrConfigSubjectFomart)) {
-
- $intKey = array_rand($arrAllSubjectFomartModel);
-
- $SubjectFomartModel = $arrAllSubjectFomartModel[$intKey];
-
- ConfigSubjectFomartModel::getInstance()->insert([
- 'csf_key' => $strUUId,
- 'sf_id' => $SubjectFomartModel->sf_id,
- ]);
-
-
- } else {
- $intSfId = $arrConfigSubjectFomart['sf_id'];
-
- foreach ($arrAllSubjectFomartModel as $objTemp) {
- if ($objTemp->sf_id == $intSfId) {
- $SubjectFomartModel = $objTemp;
- break;
- }
- }
-
- }
-
- return $SubjectFomartModel->sf_val ?? '';
-
- }
-
-
-}
diff --git a/code/app/model/FenLeiModel.php b/code/app/model/FenLeiModel.php
deleted file mode 100644
index 0805f57..0000000
--- a/code/app/model/FenLeiModel.php
+++ /dev/null
@@ -1,133 +0,0 @@
-where('fl_mingzi',$strFlMingzi)->find();
-
- if ($FenLeiModel) {
- return $FenLeiModel;
- }
-
- $FenLeiModel = new self;
- // $FenLeiModel->fl_id = $intFlId;
- $FenLeiModel->fl_leixing = 0;
- $FenLeiModel->fl_pid = $intFlPId;
- $FenLeiModel->fl_mingzi = $strFlMingzi;
- $FenLeiModel->save();
- return $FenLeiModel;
- } catch (\Throwable $T) {
- }
-
- if ($T->getCode() == 10501) {
- return self::addFenlei($intFlId, $intFlPId, $strFlMingzi);
- }
- throw $T;
- }
-
- static public function getAllFenLei()
- {
- if (self::$arrFenLei == []) {
- self::$arrFenLei = Cache::get('SHI_PIN_FEN_LEI');
-
- if (empty(self::$arrFenLei)) {
- self::flushCache();
- self::$arrFenLei = Cache::get('SHI_PIN_FEN_LEI');
- }
- }
-
-
- return self::$arrFenLei;
- }
-
-
- static public function getFenLeiByFlId($intFlId)
- {
- if (self::$arrFenLei == []) {
- self::$arrFenLei = Cache::get('SHI_PIN_FEN_LEI');
-
- if (empty(self::$arrFenLei)) {
- self::flushCache();
- self::$arrFenLei = Cache::get('SHI_PIN_FEN_LEI');
- }
- }
-
-
- return self::$arrFenLei[$intFlId] ?? "";
- }
-
- static public function getFenLeiMingZiByFlId($intFlId, $intZiFlId)
- {
- if (empty(self::$arrFenLei)) {
- self::$arrFenLei = Cache::get('SHI_PIN_FEN_LEI');
-
- if (empty(self::$arrFenLei)) {
- self::flushCache();
- self::$arrFenLei = Cache::get('SHI_PIN_FEN_LEI');
- }
- }
-
- if ($intZiFlId == 0) {
- return self::$arrFenLei[$intFlId]['fl_mingzi'] ?? '';
- } else {
- $arrFenLeiChild = self::$arrFenLei[$intFlId]['child'] ?? [];
- foreach ($arrFenLeiChild as $item) {
- if ($item['fl_id'] == $intZiFlId) {
- return $item['fl_mingzi'];
- }
- }
- }
-
- return '';
- }
-
-
- static public function flushCache()
- {
- // $arrFenLei = self::select()->toArray();
- $arrFenLei = self::order('fl_sort', 'desc')->select()->toArray();
-
- $arrFenLei = static::buildTree($arrFenLei);
-
- Cache::tag('SHI_PIN_FEN_LEI')->set('SHI_PIN_FEN_LEI', $arrFenLei);
- }
-
- static public function buildTree(array $elements, $parentId = 0)
- {
- $branch = [];
-
- foreach ($elements as $element) {
- if ($element['fl_pid'] == $parentId) {
- $children = static::buildTree($elements, $element['fl_id']);
- if ($children) {
- $element['child'] = $children;
- }
- $branch[$element['fl_id']] = $element;
- }
- }
-
- return $branch;
- }
-}
diff --git a/code/app/model/GanRaoMaModel.php b/code/app/model/GanRaoMaModel.php
deleted file mode 100644
index 18720ae..0000000
--- a/code/app/model/GanRaoMaModel.php
+++ /dev/null
@@ -1,260 +0,0 @@
- [
- 'root' => 'array',
- 'document' => 'array',
- 'array' => 'array',
- ],
- 'projection' => [
- '_id' => 0,
- ],
- ];
-
-
- /**
- * 可选属性
- */
- const POSSIBLE_ATTRIBUTES = [
- 'draggable',
- 'date-time',
- 'lang',
- 'id',
- 'dir',
- 'class'
- ];
-
- /**
- * 配置常量
- */
- const TAG_MAX_LENGTH = 8;
- const ATTR_VALUE_MAX_LENGTH = 10;
- const ATTR_MIN_COUNT = 1;
- const ATTR_MAX_COUNT = 3;
-
- /**
- * Undocumented variable
- *
- * @var array
- */
- static public $arrSelfClosing = [
- '',
- '',
- '',
- '',
- '',
- '',
- '',
- '%s',
- '%s
',
- '%s
',
- '%s',
- '%s',
-
- '<%s id="%s"> %s>',
- ];
-
- const LETTERS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
-
- const CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
-
- public static function generateRandomStrings(int $count): array
- {
- static $lettersLength = null;
- static $charsLength = null;
-
- if ($lettersLength === null) {
- $lettersLength = strlen(self::LETTERS) - 1;
- $charsLength = strlen(self::CHARS) - 1;
- }
-
-
- $result = array_fill(0, $count, '');
-
- array_walk($result, function (&$value) use ($lettersLength, $charsLength) {
- $length = random_int(5, 10);
- $value = self::LETTERS[random_int(0, $lettersLength)];
- $i = 1;
- while ($i < $length) {
- $value .= self::CHARS[random_int(0, $charsLength)];
- $i++;
- }
- });
-
- return $result;
- }
-
- /**
- * Undocumented function
- * 随机生成自定义标签-干扰码
- *
- * @param integer $intMinTags
- * @param integer $intMaxTags
- * @return string
- */
- static public function generateRandomCustomizeHtml(int $intMinTags = 5, int $intMaxTags = 20): string
- {
-
- // 随机标签数量
- $intNumTags = rand($intMinTags, $intMaxTags);
- $strHtmlResult = '';
-
- for ($i = 0; $i < $intNumTags; $i++) {
- // 生成随机标签名
- $strTagName = self::generateRandomString(rand(3, self::TAG_MAX_LENGTH), self::LETTERS);
-
- // 随机属性数量
- $intNumAttributes = rand(self::ATTR_MIN_COUNT, self::ATTR_MAX_COUNT);
- $strAttributes = self::generateAttributes($intNumAttributes);
-
- // 拼接标签
- $strHtmlResult .= "<{$strTagName}{$strAttributes}>{$strTagName}>\n";
- }
-
- return $strHtmlResult;
- }
-
- /**
- * Undocumented function
- * 生成自定义属性
- *
- * @param integer $intTotal
- * @return string
- */
- static public function generateAttributes(int $intTotal): string
- {
- $strAttributes = '';
- $arrUsedAttributes = array_rand(array_flip(self::POSSIBLE_ATTRIBUTES), $intTotal);
-
- foreach ((array) $arrUsedAttributes as $strAttrName) {
- $strAttrValue = self::generateRandomString(
- rand(3, self::ATTR_VALUE_MAX_LENGTH),
- self::CHARS
- );
- $strAttributes .= " {$strAttrName}=\"{$strAttrValue}\"";
- }
-
- return $strAttributes;
- }
-
- /**
- * Undocumented function
- * 生成随机字符串
- *
- * @param integer $length
- * @param string $strCharset
- * @return string
- */
- static public function generateRandomString(int $length, string $strCharset): string
- {
- $intCharsetLength = strlen($strCharset);
- $strRandomString = '';
-
- for ($i = 0; $i < $length; $i++) {
- $strRandomString .= $strCharset[rand(0, $intCharsetLength - 1)];
- }
-
- return $strRandomString;
- }
-
-
-
- /**
- * Undocumented function
- *
- * @param string $strDomain 域名
- * @param string $strPageCode 视图编码
- * @param string $strDifference 差异
- * @param int $intNum 生成数量
- * @return array
- */
- static public function getGrmCode($strDomain, $strPageCode, $strDifference, $intNum)
- {
-
- $arrFilter = [
- 'grm_domain' => (string) $strDomain,
- 'grm_page_code' => (string) $strPageCode,
- 'grm_page_diff' => (string) $strDifference,
- ];
- $arrResult = self::getInstance()->getOne($arrFilter, self::$arrOptions);
-
- if (empty($arrResult)) {
-
- // $intNum = mt_rand($intStartNumber, $intEndNumber);
- // $arrGrmCode = self::$arrSelfClosing;
- // shuffle($arrGrmCode);
- // $arrGrmCode = array_slice($arrGrmCode, 0, $intNum);
- // $strGrmCode = implode('', $arrGrmCode);
- // $intRandNum = substr_count($strGrmCode, '%s');
- // $arrRandStr = self::generateRandomStrings($intRandNum);
- // $strGrmCode = sprintf($strGrmCode, ...$arrRandStr);
-
- $arrGrmCode = [];
- while ($intNum-- > 0) {
- // $arrGrmCode[] = self::generateRandomCustomizeHtml(mt_rand(1, 3), mt_rand(3, 6));
- $arrGrmCode[] = self::generateRandomCustomizeHtml(1, 1);
- }
-
- $arrData = $arrFilter;
- $arrData['grm_code'] = $arrGrmCode;
-
- self::getInstance()->insert($arrData);
- } else {
- $arrGrmCode = $arrResult['grm_code'];
- }
-
- return $arrGrmCode;
- }
-
- static public function splitTagsToArray(string $htmlTags): array
- {
- // 按换行符分割,兼容不同系统
- $tagsArray = preg_split('/\r\n|\n|\r/', $htmlTags);
-
- // 去除空白行并清理首尾空格
- $tagsArray = array_filter(array_map('trim', $tagsArray), function ($tag) {
- return !empty($tag);
- });
-
- // 重置索引
- return array_values($tagsArray);
- }
-}
diff --git a/code/app/model/MongoModel.php b/code/app/model/MongoModel.php
deleted file mode 100644
index 5c30baf..0000000
--- a/code/app/model/MongoModel.php
+++ /dev/null
@@ -1,147 +0,0 @@
-MongoBase = MongoBase::getInstance();
- }
-
- /**
- * Undocumented function
- *
- * @return MongoBase
- */
- public function getMongoBase(): MongoBase
- {
- return $this->MongoBase;
- }
-
- /**
- * Undocumented function
- *
- * @return Collection
- */
- public function getCol(): Collection
- {
- return $this->getMongoBase()->getDb()->selectCollection($this->getCollectionName());
- }
-
- /**
- * Undocumented function
- *
- * @return string
- */
- public function getCollectionName(): string
- {
- return $this->strCollection;
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrFilter
- * @return array|object|null
- */
- public function getOne(array $arrFilter = [], array $arrOptions = []): array|object|null
- {
- return $this->getCol()->findOne($arrFilter, $arrOptions);
- }
-
- /**
- * Undocumented function
- *
- * @param string $strKey
- * @return array|object|NULL
- */
- public function checkCacheByKey(string $strKey): array|object|NULL
- {
-
- if (config('view.view_data_cache') == false) {
- return NULL;
- }
-
- if (!empty($strKey)) {
- $arrResult = Cache::get($strKey);
- if (!empty($arrResult)) {
- return $arrResult;
- }
- }
- return NULL;
- }
-
- /**
- * Undocumented function
- *
- * @param string $strKey
- * @param mixed $mixedData
- * @param integer $intLifeTime
- * @return void
- */
- public function setCacheByKey(string $strKey, mixed $mixedData, int $intLifeTime)
- {
- if (!empty($strKey) && !empty($mixedData)) {
- Cache::set($strKey, $mixedData, $intLifeTime);
- }
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrData
- * @return mixed
- */
- public function insert(array $arrData, array $arrOptions = []): mixed
- {
- $Result = $this->getCol()->insertOne($arrData);
- return $Result->getInsertedId();
- }
-
-
- /**
- * 更新单条数据
- * @param string $strColName 集合名称
- * @param array $arrFilter 查询条件
- * @param array $arrUpdate 更新内容
- * @param array $arrOptions 更新选项
- * @return int 受影响的文档数
- */
- public function updateOne(array $arrFilter, array $arrUpdate, array $arrOptions = []): int
- {
- $Result = $this->getCol()->updateOne($arrFilter, $arrUpdate, $arrOptions);
- return $Result->getModifiedCount();
- }
-}
diff --git a/code/app/model/NovelClicksModel.php b/code/app/model/NovelClicksModel.php
deleted file mode 100644
index 663c11f..0000000
--- a/code/app/model/NovelClicksModel.php
+++ /dev/null
@@ -1,118 +0,0 @@
-getCol()->findOne([
- "n_id" => $intNId,
- ]);
-
- if (empty($Novel)) {
- return false;
- }
-
- $Now = new DateTime();
-
- $strDailyDate = $Now->format('Y-m-d');
- $strWeeklyDate = $Now->modify('monday this week')->format('Y-m-d');
- $MonthlyDate = $Now->format('Y-m-01');
-
- $arrClickTypes = [
- 'daily' => $strDailyDate,
- 'weekly' => $strWeeklyDate,
- 'monthly' => $MonthlyDate,
- 'total' => null,
- ];
-
- foreach ($arrClickTypes as $strType => $strDate) {
- $this->getCol()->updateOne(
- [
- 'n_id' => $intNId,
- 'nc_date' => $strDate,
- 'nc_type' => $strType,
- ],
- [
- '$inc' => ['nc_clicks' => 1],
- '$set' => ['n_category' => $Novel->n_category]
- ],
- [
- 'upsert' => true
- ]
- );
- }
- return true;
- }
-
- public function getStats(int $intNId): array
- {
- $Now = new DateTime();
- $strDailyDate = $Now->format('Y-m-d');
- $strWeeklyDate = $Now->modify('monday this week')->format('Y-m-d');
- $strMonthlyDate = $Now->format('Y-m-01');
-
- $query = [
- 'n_id' => $intNId,
- '$or' => [
- ['nc_type' => 'daily', 'nc_date' => $strDailyDate],
- ['nc_type' => 'weekly', 'nc_date' => $strWeeklyDate],
- ['nc_type' => 'monthly', 'nc_date' => $strMonthlyDate],
- ['nc_type' => 'total', 'nc_date' => null]
- ]
- ];
- $arrOptions = [
- 'projection' => ['nc_type' => 1, 'nc_clicks' => 1, '_id' => 0],
- 'typeMap' => ['root' => 'array', 'document' => 'array', 'array' => 'array']
- ];
-
- $arrResults = $this->getCol()->find($query, $arrOptions)->toArray();
-
- $arrStats = array_column($arrResults, 'nc_clicks', 'nc_type');
-
- $defaultStats = [
- 'daily' => 0,
- 'weekly' => 0,
- 'monthly' => 0,
- 'total' => 0
- ];
- $arrStats = array_merge($defaultStats, $arrStats);
-
- return $arrStats;
- }
-}
diff --git a/code/app/model/NovelModel.php b/code/app/model/NovelModel.php
deleted file mode 100644
index efdf686..0000000
--- a/code/app/model/NovelModel.php
+++ /dev/null
@@ -1,486 +0,0 @@
- [
- 'root' => 'array',
- 'document' => 'array',
- 'array' => 'array',
- ],
- 'projection' => [
- '_id' => 0,
- 'n_site_code' => 0,
- 'n_source_uuid' => 0,
- 'n_source_id' => 0,
- ],
- ];
-
- /**
- * 根据关键词数组更新小说推荐等级
- * @param array $arrKeywords 关键词数组,例如 ["斗罗", "遮天", "凡人"]
- * @param int $intLevel 推荐等级1~9,例如 3
- * @return array 更新结果
- */
- public function updateByKeywords(array $arrKeywords, int $intLevel)
- {
- if (empty($arrKeywords)) {
- return false;
- }
-
- try {
- $arrConditions = array_map(function ($strKeyword) {
- return ['n_name' => ['$regex' => trim($strKeyword), '$options' => 'i']];
- }, $arrKeywords);
-
- $UpdateResult = $this->getCol()->updateMany(
- ['$or' => $arrConditions],
- ['$set' => ['n_level' => $intLevel]]
- );
-
- $UpdateResult->getModifiedCount();
- } catch (Exception $e) {
- return false;
- }
-
- return true;
- }
-
- /**
- * 直接读库查询大量小说
- *
- * @param integer $intNId
- * @return null|array
- */
- public function findMany(array $arrFilter, int $intCount = 10, array $arrSort = [], array $arrOptions = []): null|array
- {
- if (empty($arrOptions)) {
- $arrOptions = self::$arrOptions;
- }
-
- if ($intCount > 0) {
- $arrOptions['limit'] = $intCount;
- }
-
- if (empty($arrSort)) {
- $arrOptions['sort'] = $arrSort;
- }
-
- $arrFilter['n_have_chapter'] = 1;
-
- $Cursor = $this->getCol()->find($arrFilter, $arrOptions);
-
- $arrResult = iterator_to_array($Cursor);
-
- foreach ($arrResult as &$arrItem) {
- applyToKeys($arrItem, ['created_at', 'updated_at'], 'formatMongoDate');
- }
-
- return $arrResult;
- }
-
-
- /**
- * 查询多条数据并缓存
- *
- * @param array $arrFilter
- * @param integer $intCount
- * @param array $arrSort
- * @param array $arrOptions
- * @param string $strKey
- * @param integer $intLifeTime
- * @return null|array
- */
- public function findManyWithCache(
- array $arrFilter,
- int $intCount = 0,
- array $arrSort = [],
- array $arrOptions = [],
- string $strKey = '',
- int $intLifeTime = 24 * 3600,
- ): null|array {
- try {
-
- $arrResult = $this->checkCacheByKey($strKey);
- if ($arrResult !== NULL) {
- return $arrResult;
- }
-
- $arrResult = $this->findMany($arrFilter, $intCount, $arrSort, $arrOptions);
-
- $this->setCacheByKey($strKey, $arrResult, $intLifeTime);
-
- return $arrResult;
- } catch (\Exception $e) {
- return [];
- }
- }
-
- /**
- * find one novel
- *
- * @param array $arrFilter
- * @param array $arrOptions
- * @return null|array
- */
- public function findOne(array $arrFilter, array $arrOptions = []): null|array
- {
- if (empty($arrOptions)) {
- $arrOptions = self::$arrOptions;
- }
-
- $arrNovel = $this->getOne($arrFilter, $arrOptions);
-
- if (!empty($arrNovel)) {
- applyToKeys($arrNovel, ['created_at', 'updated_at'], 'formatMongoDate');
- }
-
- return $arrNovel;
- }
-
- /**
- * 根据小说ID查询指定小说
- *
- * @param integer $intNId
- * @return array
- */
- public function getNovelByNId(int $intNId): null|array
- {
- $arrFilter = ['n_id' => $intNId, 'n_have_chapter' => 1];
- return $this->findOne($arrFilter);
- }
-
-
- /**
- * 查询符合条件的随机多条小说
- *
- * @param string $strKey
- * @param array $arrFilter
- * @param integer $intCount
- * @param integer $intLifeTime
- * @return array
- */
- public function getRandNovelWithCache(array $arrFilter = [], int $intCount = 10, string $strKey = '', int $intLifeTime = 24 * 3600,): array
- {
- try {
-
- $arrResult = $this->checkCacheByKey($strKey);
- if ($arrResult !== NULL) {
- return $arrResult;
- }
-
- $arrFilter['n_have_chapter'] = 1;
-
- $arrPipeline = [
- ['$match' => $arrFilter],
- ['$sample' => ['size' => $intCount]]
- ];
-
- $Novel = $this->getCol()->aggregate($arrPipeline);
-
- $arrResult = iterator_to_array($Novel);
-
- $this->setCacheByKey($strKey, $arrResult, $intLifeTime);
-
- return $arrResult;
- } catch (\Exception $e) {
- return [];
- }
- }
-
- /**
- * 通用小说分页
- *
- * @param array $arrFilter
- * @param integer $intPage
- * @param integer $intLimit
- * @param array $arrSort
- * @param string $strKey
- * @param int $intLifeTime
- * @return array
- */
- public function findPaginatedWithCache(
- array $arrFilter,
- int $intPage = 1,
- int $intLimit = 20,
- array $arrSort = ['n_level' => -1],
- string $strKey = '',
- int $intLifeTime = 24 * 3600,
- ): array {
- try {
- $arrFilter['n_have_chapter'] = 1;
-
- $arrResult = $this->checkCacheByKey($strKey);
- if ($arrResult !== NULL) {
- return $arrResult;
- }
- $arrOptions = self::$arrOptions;
- $arrOptions['sort'] = $arrSort;
- $arrOptions['skip'] = ($intPage - 1) * $intLimit;
- $arrOptions['limit'] = $intLimit;
- unset($arrOptions['typeMap']);
- $Cursor = $this->getCol()->find($arrFilter, $arrOptions);
- $intTotal = $this->getCol()->countDocuments($arrFilter);
-
- $arrResult = iterator_to_array($Cursor);
-
- shuffle($arrResult);
-
- $arrResult = [
- 'data' => $arrResult,
- 'total' => $intTotal,
- 'page' => $intPage,
- 'limit' => $intLimit,
- 'pages' => ceil($intTotal / $intLimit)
- ];
-
- $this->setCacheByKey($strKey, $arrResult, $intLifeTime);
-
- return $arrResult;
- } catch (\Exception $e) {
- return [];
- }
- }
-
-
- /**
- * 用于Home下的书库分页
- *
- * @param string $strKey
- * @param integer $intPage
- * @param integer $intLimit
- * @param int $intLifeTime
- * @param integer $intType
- * @param string $strStatus
- * @param array $arrSort
- * @return array
- */
- public function getCustomPage01(
- string $strKey,
- int $intPage = 1,
- int $intLimit = 20,
- int $intLifeTime = 24 * 3600,
- int $intType = 0,
- $strStatus = NULL,
- array $arrSort = ['n_level' => -1]
- ): array {
- $arrFilter = ['n_have_chapter' => 1,];
-
- switch ($intType) {
- case 1:
- $arrCategory = array_values(CategoryModel::getManCategory());
- $arrFilter['n_category'] = ['$in' => $arrCategory];
- break;
- case 2:
- $arrCategory = array_values(CategoryModel::getWomenCategory());
- $arrFilter['n_category'] = ['$in' => $arrCategory];
- break;
- }
-
- if ($strStatus !== NULL) {
- $arrFilter['n_status'] = $strStatus;
- }
- return $this->findPaginatedWithCache($arrFilter, $intPage, $intLimit, $arrSort, $strKey, $intLifeTime,);
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrFilter
- * @param integer $intCount
- * @param array $arrSort
- * @param string $strKey
- * @param integer $intLifeTime
- * @return array
- */
- public function findManyShuffledWithCache(
- array $arrFilter,
- int $intCount = 10,
- array $arrSort = [],
- string $strKey = '',
- int $intLifeTime = 24 * 3600,
- ): array {
- try {
-
- $arrResult = $this->checkCacheByKey($strKey);
- if ($arrResult !== NULL) {
- return $arrResult;
- }
-
- $arrFilter['n_have_chapter'] = 1;
-
- $arrOptions = self::$arrOptions;
-
- if (!empty($arrSort)) {
- $arrOptions['sort'] = $arrSort;
- }
-
- $arrOptions['limit'] = $intCount * 3;
-
- unset($arrOptions['typeMap']);
-
- $Cursor = $this->getCol()->find($arrFilter, $arrOptions);
-
- $arrResult = iterator_to_array($Cursor);
-
- shuffle($arrResult);
-
- $arrResult = array_slice($arrResult, 0, $intCount);
-
- $this->setCacheByKey($strKey, $arrResult, $intLifeTime);
-
- return $arrResult;
- } catch (\Exception $e) {
- return [];
- }
- }
-
- /**
- * Undocumented function
- *
- * @param string $strKey
- * @param int $intLifeTime
- * @param integer $intCount
- * @param integer $intType
- * @param string $strStatus
- * @param array $arrSort
- * @return array
- */
- public function getCommonNovelOnCache(
- string $strKey,
- int $intLifeTime = 24 * 3600,
- int $intCount = 10,
- int $intType = 0,
- $strStatus = NULL,
- array $arrSort = ['n_level' => -1]
- ): array {
- try {
- $arrFilter = [];
-
- if (in_array($intType, [1, 2])) {
- $arrFilter['n_category'] = ['$in' => CategoryModel::getCategoryByType($intType)];
- }
-
- if ($strStatus !== NULL) {
- $arrFilter['n_status'] = $strStatus;
- }
-
- return $this->findManyShuffledWithCache($arrFilter, $intCount, $arrSort, $strKey, $intLifeTime);
- } catch (\Exception $e) {
- return [];
- }
- }
-
- /**
- * Undocumented function
- *
- * @param string $strSign
- * @param integer $intCount
- * @param integer $intType
- * @param string strDateType
- * * daily 天
- * * weekly 周
- * * monthly 月
- * * total 总
- * @return array
- */
- public function getRankNovelOnCache(
- string $strKey,
- int $intCount = 10,
- int $intType = 0,
- $strDateType = 'daily',
- $strStatus = NULL,
- $intLifeTime = 24 * 3600,
- ): array {
- try {
-
-
- $arrResult = $this->checkCacheByKey($strKey);
- if ($arrResult !== NULL) {
- return $arrResult;
- }
- $arrFilter = [
- 'nc_type' => $strDateType,
- ];
-
- if ($strStatus !== NULL) {
- $arrFilter['n_status'] = $strStatus;
- }
-
- if (in_array($intType, [1, 2])) {
- $arrFilter['n_category'] = ['$in' => CategoryModel::getCategoryByType($intType)];
- }
-
- $arrOptions = [
- 'sort' => ['nc_clicks' => -1],
- 'limit' => $intCount * 3,
- 'projection' => [
- 'n_id' => 1,
- ],
- ];
-
- $NovelClicksModel = NovelClicksModel::getInstance();
-
- $Cursor = $NovelClicksModel->getCol()->find($arrFilter, $arrOptions);
-
- $arrNId = [];
- foreach ($Cursor as $Doc) {
- $arrNId[] = $Doc['n_id'];
- }
-
- $arrFilter = ['n_id' => ['$in' => $arrNId]];
- $arrOptions = self::$arrOptions;
- unset($arrOptions['typeMap']);
-
- $Cursor = $this->getCol()->find(
- $arrFilter,
- $arrOptions
- );
-
- $arrResult = iterator_to_array($Cursor);
-
- shuffle($arrResult);
-
- $arrResult = array_slice($arrResult, 0, $intCount);
-
- $this->setCacheByKey($strKey, $arrResult, $intLifeTime);
-
- return $arrResult;
- } catch (\Exception $e) {
- return [];
- }
- }
-}
diff --git a/code/app/model/PlanTaskModel.php b/code/app/model/PlanTaskModel.php
deleted file mode 100644
index 61ff6e5..0000000
--- a/code/app/model/PlanTaskModel.php
+++ /dev/null
@@ -1,17 +0,0 @@
-sfg_id][] = $SubjectFomartModel;
- }
-
- return Cache::set($strKey, self::$arrAllSubjectFomart);
- }
-
-}
diff --git a/code/app/model/SystemConfigModel.php b/code/app/model/SystemConfigModel.php
deleted file mode 100644
index 92819bb..0000000
--- a/code/app/model/SystemConfigModel.php
+++ /dev/null
@@ -1,39 +0,0 @@
-set('Config', $arrSystemConfig);
- }
-}
diff --git a/code/app/model/TemplatesModel.php b/code/app/model/TemplatesModel.php
deleted file mode 100644
index a562fd6..0000000
--- a/code/app/model/TemplatesModel.php
+++ /dev/null
@@ -1,86 +0,0 @@
-t_id] = $TemplateModel;
- }
-
- return Cache::set($strKey, self::$arrAllTemplate);
- }
-
- /**
- * Undocumented function
- *
- * @param int $intTId
- * @return TemplatesModel|NULL
- */
- static public function getTemplateOnCacheByTId(int $intTId): TemplatesModel|NULL
- {
- if (key_exists($intTId, self::getAllTemplateOnCache())) {
- return self::getAllTemplateOnCache()[$intTId];
- }
-
- return NULL;
- }
-}
diff --git a/code/app/model/VideoClicksModel.php b/code/app/model/VideoClicksModel.php
deleted file mode 100644
index 06984f4..0000000
--- a/code/app/model/VideoClicksModel.php
+++ /dev/null
@@ -1,124 +0,0 @@
-getCol()->findOne([
- "v_id" => $intVId,
- ]);
-
- if (empty($Novel)) {
- return false;
- }
-
- $Now = new DateTime();
-
- $strDailyDate = $Now->format('Y-m-d');
- $strWeeklyDate = $Now->modify('monday this week')->format('Y-m-d');
- $MonthlyDate = $Now->format('Y-m-01');
-
- $arrClickTypes = [
- 'daily' => $strDailyDate,
- 'weekly' => $strWeeklyDate,
- 'monthly' => $MonthlyDate,
- 'total' => null,
- ];
-
- foreach ($arrClickTypes as $strType => $strDate) {
- $this->getCol()->updateOne(
- [
- 'v_id' => $intVId,
- 'vc_date' => $strDate,
- 'vc_type' => $strType,
- ],
- [
- '$inc' => ['vc_clicks' => 1],
- '$set' => ['v_category_id' => $Novel->v_category_id]
- ],
- [
- 'upsert' => true
- ]
- );
- }
- return true;
- }
-
- /**
- * GetStats
- *
- * @param integer $intVId
- * @return array
- */
- public function getStats(int $intVId): array
- {
- $Now = new DateTime();
- $strDailyDate = $Now->format('Y-m-d');
- $strWeeklyDate = $Now->modify('monday this week')->format('Y-m-d');
- $strMonthlyDate = $Now->format('Y-m-01');
-
- $query = [
- 'v_id' => $intVId,
- '$or' => [
- ['vc_type' => 'daily', 'vc_date' => $strDailyDate],
- ['vc_type' => 'weekly', 'vc_date' => $strWeeklyDate],
- ['vc_type' => 'monthly', 'vc_date' => $strMonthlyDate],
- ['vc_type' => 'total', 'vc_date' => null]
- ]
- ];
- $arrOptions = [
- 'projection' => ['vc_type' => 1, 'vc_clicks' => 1, '_id' => 0],
- 'typeMap' => ['root' => 'array', 'document' => 'array', 'array' => 'array']
- ];
-
- $arrResults = $this->getCol()->find($query, $arrOptions)->toArray();
-
- $arrStats = array_column($arrResults, 'vc_clicks', 'vc_type');
-
- $defaultStats = [
- 'daily' => 0,
- 'weekly' => 0,
- 'monthly' => 0,
- 'total' => 0
- ];
- $arrStats = array_merge($defaultStats, $arrStats);
-
- return $arrStats;
- }
-}
diff --git a/code/app/model/VideoModel.php b/code/app/model/VideoModel.php
deleted file mode 100644
index 33bcd7d..0000000
--- a/code/app/model/VideoModel.php
+++ /dev/null
@@ -1,484 +0,0 @@
- [
- 'root' => 'array',
- 'document' => 'array',
- 'array' => 'array',
- ],
- 'projection' => [
- '_id' => 0,
- 'n_site_code' => 0,
- 'n_source_uuid' => 0,
- 'n_source_id' => 0,
- ],
- ];
-
- /**
- * 根据关键词数组更新小说推荐等级
- * @param array $arrKeywords 关键词数组,例如 ["斗罗", "遮天", "凡人"]
- * @param int $intLevel 推荐等级1~9,例如 3
- * @return array 更新结果
- */
- public function updateByKeywords(array $arrKeywords, int $intLevel)
- {
- if (empty($arrKeywords)) {
- return false;
- }
-
- try {
- $arrConditions = array_map(function ($strKeyword) {
- return ['n_name' => ['$regex' => trim($strKeyword), '$options' => 'i']];
- }, $arrKeywords);
-
- $UpdateResult = $this->getCol()->updateMany(
- ['$or' => $arrConditions],
- ['$set' => ['n_level' => $intLevel]]
- );
-
- $UpdateResult->getModifiedCount();
- } catch (Exception $e) {
- return false;
- }
-
- return true;
- }
-
- /**
- * 直接读库查询大量小说
- *
- * @param integer $intNId
- * @return null|array
- */
- public function findMany(array $arrFilter, int $intCount = 10, array $arrSort = [], array $arrOptions = []): null|array
- {
- if (empty($arrOptions)) {
- $arrOptions = self::$arrOptions;
- }
-
- if ($intCount > 0) {
- $arrOptions['limit'] = $intCount;
- }
-
- if (empty($arrSort)) {
- $arrOptions['sort'] = $arrSort;
- }
-
- $arrFilter['n_have_chapter'] = 1;
-
- $Cursor = $this->getCol()->find($arrFilter, $arrOptions);
-
- $arrResult = iterator_to_array($Cursor);
-
- foreach ($arrResult as &$arrItem) {
- applyToKeys($arrItem, ['created_at', 'updated_at'], 'formatMongoDate');
- }
-
- return $arrResult;
- }
-
-
- /**
- * 查询多条数据并缓存
- *
- * @param array $arrFilter
- * @param integer $intCount
- * @param array $arrSort
- * @param array $arrOptions
- * @param string $strKey
- * @param integer $intLifeTime
- * @return null|array
- */
- public function findManyWithCache(
- array $arrFilter,
- int $intCount = 0,
- array $arrSort = [],
- array $arrOptions = [],
- string $strKey = '',
- int $intLifeTime = 24 * 3600,
- ): null|array {
- try {
-
- $arrResult = $this->checkCacheByKey($strKey);
- if ($arrResult !== NULL) {
- return $arrResult;
- }
-
- $arrResult = $this->findMany($arrFilter, $intCount, $arrSort, $arrOptions);
-
- $this->setCacheByKey($strKey, $arrResult, $intLifeTime);
-
- return $arrResult;
- } catch (\Exception $e) {
- return [];
- }
- }
-
- /**
- * find one Video
- *
- * @param array $arrFilter
- * @param array $arrOptions
- * @return null|array
- */
- public function findOne(array $arrFilter, array $arrOptions = []): null|array
- {
- if (empty($arrOptions)) {
- $arrOptions = self::$arrOptions;
- }
-
- $arrVideo = $this->getOne($arrFilter, $arrOptions);
-
- if (!empty($arrVideo)) {
- applyToKeys($arrVideo, ['created_at', 'updated_at'], 'formatMongoDate');
- }
-
- return $arrVideo;
- }
-
- /**
- * 根据小说ID查询指定小说
- *
- * @param integer $intNId
- * @return array
- */
- public function getVideoByNId(int $intNId): null|array
- {
- $arrFilter = ['n_id' => $intNId, 'n_have_chapter' => 1];
- return $this->findOne($arrFilter);
- }
-
-
- /**
- * 查询符合条件的随机多条小说
- *
- * @param string $strKey
- * @param array $arrFilter
- * @param integer $intCount
- * @param integer $intLifeTime
- * @return array
- */
- public function getRandVideoWithCache(array $arrFilter = [], int $intCount = 10, string $strKey = '', int $intLifeTime = 24 * 3600,): array
- {
- try {
-
- $arrResult = $this->checkCacheByKey($strKey);
- if ($arrResult !== NULL) {
- return $arrResult;
- }
-
- $arrFilter['n_have_chapter'] = 1;
-
- $arrPipeline = [
- ['$match' => $arrFilter],
- ['$sample' => ['size' => $intCount]]
- ];
-
- $Video = $this->getCol()->aggregate($arrPipeline);
-
- $arrResult = iterator_to_array($Video);
-
- $this->setCacheByKey($strKey, $arrResult, $intLifeTime);
-
- return $arrResult;
- } catch (\Exception $e) {
- return [];
- }
- }
-
- /**
- * 通用小说分页
- *
- * @param array $arrFilter
- * @param integer $intPage
- * @param integer $intLimit
- * @param array $arrSort
- * @param string $strKey
- * @param int $intLifeTime
- * @return array
- */
- public function findPaginatedWithCache(
- array $arrFilter,
- int $intPage = 1,
- int $intLimit = 20,
- array $arrSort = ['n_level' => -1],
- string $strKey = '',
- int $intLifeTime = 24 * 3600,
- ): array {
- try {
- $arrFilter['n_have_chapter'] = 1;
-
- $arrResult = $this->checkCacheByKey($strKey);
- if ($arrResult !== NULL) {
- return $arrResult;
- }
- $arrOptions = self::$arrOptions;
- $arrOptions['sort'] = $arrSort;
- $arrOptions['skip'] = ($intPage - 1) * $intLimit;
- $arrOptions['limit'] = $intLimit;
- unset($arrOptions['typeMap']);
- $Cursor = $this->getCol()->find($arrFilter, $arrOptions);
- $intTotal = $this->getCol()->countDocuments($arrFilter);
-
- $arrResult = iterator_to_array($Cursor);
-
- shuffle($arrResult);
-
- $arrResult = [
- 'data' => $arrResult,
- 'total' => $intTotal,
- 'page' => $intPage,
- 'limit' => $intLimit,
- 'pages' => ceil($intTotal / $intLimit)
- ];
-
- $this->setCacheByKey($strKey, $arrResult, $intLifeTime);
-
- return $arrResult;
- } catch (\Exception $e) {
- return [];
- }
- }
-
-
- /**
- * 用于Home下的书库分页
- *
- * @param string $strKey
- * @param integer $intPage
- * @param integer $intLimit
- * @param int $intLifeTime
- * @param integer $intType
- * @param string $strStatus
- * @param array $arrSort
- * @return array
- */
- public function getCustomPage01(
- string $strKey,
- int $intPage = 1,
- int $intLimit = 20,
- int $intLifeTime = 24 * 3600,
- int $intType = 0,
- $strStatus = NULL,
- array $arrSort = ['n_level' => -1]
- ): array {
- $arrFilter = ['n_have_chapter' => 1,];
-
- switch ($intType) {
- case 1:
- $arrCategory = array_values(CategoryModel::getManCategory());
- $arrFilter['n_category'] = ['$in' => $arrCategory];
- break;
- case 2:
- $arrCategory = array_values(CategoryModel::getWomenCategory());
- $arrFilter['n_category'] = ['$in' => $arrCategory];
- break;
- }
-
- if ($strStatus !== NULL) {
- $arrFilter['n_status'] = $strStatus;
- }
- return $this->findPaginatedWithCache($arrFilter, $intPage, $intLimit, $arrSort, $strKey, $intLifeTime,);
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrFilter
- * @param integer $intCount
- * @param array $arrSort
- * @param string $strKey
- * @param integer $intLifeTime
- * @return array
- */
- public function findManyShuffledWithCache(
- array $arrFilter,
- int $intCount = 10,
- array $arrSort = [],
- string $strKey = '',
- int $intLifeTime = 24 * 3600,
- ): array {
- try {
-
- $arrResult = $this->checkCacheByKey($strKey);
- if ($arrResult !== NULL) {
- return $arrResult;
- }
-
- $arrFilter['n_have_chapter'] = 1;
-
- $arrOptions = self::$arrOptions;
-
- if (!empty($arrSort)) {
- $arrOptions['sort'] = $arrSort;
- }
-
- $arrOptions['limit'] = $intCount * 3;
-
- unset($arrOptions['typeMap']);
-
- $Cursor = $this->getCol()->find($arrFilter, $arrOptions);
-
- $arrResult = iterator_to_array($Cursor);
-
- shuffle($arrResult);
-
- $arrResult = array_slice($arrResult, 0, $intCount);
-
- $this->setCacheByKey($strKey, $arrResult, $intLifeTime);
-
- return $arrResult;
- } catch (\Exception $e) {
- return [];
- }
- }
-
- /**
- * Undocumented function
- *
- * @param string $strKey
- * @param int $intLifeTime
- * @param integer $intCount
- * @param integer $intType
- * @param string $strStatus
- * @param array $arrSort
- * @return array
- */
- public function getCommonVideoOnCache(
- string $strKey,
- int $intLifeTime = 24 * 3600,
- int $intCount = 10,
- int $intType = 0,
- $strStatus = NULL,
- array $arrSort = ['n_level' => -1]
- ): array {
- try {
- $arrFilter = [];
-
- if (in_array($intType, [1, 2])) {
- $arrFilter['n_category'] = ['$in' => CategoryModel::getCategoryByType($intType)];
- }
-
- if ($strStatus !== NULL) {
- $arrFilter['n_status'] = $strStatus;
- }
-
- return $this->findManyShuffledWithCache($arrFilter, $intCount, $arrSort, $strKey, $intLifeTime);
- } catch (\Exception $e) {
- return [];
- }
- }
-
- /**
- * Undocumented function
- *
- * @param string $strSign
- * @param integer $intCount
- * @param integer $intType
- * @param string strDateType
- * * daily 天
- * * weekly 周
- * * monthly 月
- * * total 总
- * @return array
- */
- public function getRankVideoOnCache(string $strKey, int $intCount = 10, int $intType = 0, $strDateType = 'daily', $strStatus = NULL): array
- {
- try {
- $intLifeTime = 24 * 3600;
-
- $arrResult = $this->checkCacheByKey($strKey);
- if ($arrResult !== NULL) {
- return $arrResult;
- }
- $arrFilter = [
- 'nc_type' => $strDateType,
- ];
-
- if ($strStatus !== NULL) {
- $arrFilter['n_status'] = $strStatus;
- }
-
- if (in_array($intType, [1, 2])) {
- $arrFilter['n_category'] = ['$in' => CategoryModel::getCategoryByType($intType)];
- }
-
- $arrOptions = [
- 'sort' => ['nc_clicks' => -1],
- 'limit' => $intCount * 3,
- 'projection' => [
- 'n_id' => 1,
- ],
- ];
-
- $VideoClicksModel = VideoClicksModel::getInstance();
-
- $Cursor = $VideoClicksModel->getCol()->find($arrFilter, $arrOptions);
-
- $arrNId = [];
- foreach ($Cursor as $Doc) {
- $arrNId[] = $Doc['n_id'];
- }
-
- $arrFilter = ['n_id' => ['$in' => $arrNId]];
- $arrOptions = self::$arrOptions;
- unset($arrOptions['typeMap']);
-
- $Cursor = $this->getCol()->find(
- $arrFilter,
- $arrOptions
- );
-
- $arrResult = iterator_to_array($Cursor);
-
- shuffle($arrResult);
-
- $arrResult = array_slice($arrResult, 0, $intCount);
-
- $this->setCacheByKey($strKey, $arrResult, $intLifeTime);
-
- return $arrResult;
- } catch (\Exception $e) {
- return [];
- }
- }
-
-
-
-
-}
diff --git a/code/app/model/ZiYuanDuanDianModel.php b/code/app/model/ZiYuanDuanDianModel.php
deleted file mode 100644
index e07890d..0000000
--- a/code/app/model/ZiYuanDuanDianModel.php
+++ /dev/null
@@ -1,40 +0,0 @@
-set('Zydd', $arrZiYuanDuanDian);
- }
-}
diff --git a/code/app/provider.php b/code/app/provider.php
deleted file mode 100644
index 73d99fa..0000000
--- a/code/app/provider.php
+++ /dev/null
@@ -1,9 +0,0 @@
- Request::class,
- 'think\exception\Handle' => ExceptionHandle::class,
-];
diff --git a/code/app/service.php b/code/app/service.php
deleted file mode 100644
index d820878..0000000
--- a/code/app/service.php
+++ /dev/null
@@ -1,11 +0,0 @@
-SiteContext = $SiteContext;
- $this->CategoryModel = CategoryModel::getInstance();
- }
-}
diff --git a/code/app/services/ChapterService.php b/code/app/services/ChapterService.php
deleted file mode 100644
index 5ff8c52..0000000
--- a/code/app/services/ChapterService.php
+++ /dev/null
@@ -1,291 +0,0 @@
-SiteContext = $SiteContext;
- $this->NovelModel = NovelModel::getInstance();
- $this->ChapterModel = ChapterModel::getInstance();
- }
-
- public $arrSortType = [
- 'zheng' => '正序',
- 'dao' => '倒叙',
- ];
-
-
- /**
- * 获取小说数据
- *
- * @param array $arrParams
- * @return array
- */
- public function getChapterList(array $arrParams): array
- {
- $intCount = (int)$arrParams['count'] ?? 10;
- $intNId = (int)$arrParams['n_id'] ?? 0;
- $strSortType = (string)$arrParams['sort_type'] ?? '';
- $strDiffKey = (string) $arrParams['diff_key'] ?? '';
- $intCacheLifeTime = (int)$arrParams['cache_life'] ?? 0;
-
- $arrFilter = [
- 'n_id' => $intNId,
- 'c_page' => 0,
- ];
-
- $arrFilter['n_id'] = $intNId;
-
- $arrSort = [];
-
- # sort filter
- if (!empty($strSortType)) {
- switch ($strSortType) {
- case 'zheng':
- $arrSort['c_sort_num'] = 1;
- break;
- case 'dao':
- $arrSort['c_sort_num'] = -1;
- break;
- }
- }
-
- $strCacheKey = '';
- $intLifeTime = 0;
-
- # cache filter
- if ($intCacheLifeTime > 0) {
- $strCacheKey = sprintf(
- 'ChapterService:getChapterList:%s:%s:%s:%s:%s',
- $this->SiteContext->DomainModel->d_domain,
- md5(serialize($arrFilter)),
- md5(serialize($arrSort)),
- $intCount,
- $strDiffKey,
- );
-
- $intLifeTime = $intLifeTime;
- }
-
- $arrChapter = $this->ChapterModel->findManyShuffledWithCache(
- $arrFilter,
- $intCount,
- $arrSort,
- $strCacheKey,
- $intLifeTime,
- );
-
- return $arrChapter;
- }
-
-
- /**
- * 获取小说章节分页数据
- *
- * @param array $arrParams
- * @return array
- */
- public function getNovelPager(array $arrParams): array
- {
-
- $arrParams = [
- 'page' => max((int)($arrParams['page'] ?? 1), 1),
- 'limit' => (int)($arrParams['limit'] ?? 10),
- 'n_id' => (int)($arrParams['n_id'] ?? 0),
- 'button_num' => (int)($arrParams['button_num'] ?? 0),
- 'sort_type' => (string)($arrParams['sort_type'] ?? ''),
- 'diff_key' => (string)($arrParams['diff_key'] ?? ''),
- 'key' => (string)($arrParams['key'] ?? ''),
- 'cache_life' => (int)($arrParams['cache_life'] ?? 0),
- 'func' => (string)($arrParams['func']),
- ];
-
- if (!in_array($arrParams['sort_type'], array_keys($this->arrSortType))) {
- $arrParams['sort_type'] = 'zheng';
- }
-
- $intPage = $arrParams['page'];
- $intLimit = $arrParams['limit'];
- $intNId = $arrParams['n_id'];
-
- $strSortType = $arrParams['sort_type'];
- $strDiffKey = $arrParams['diff_key'];
- $intCacheLifeTime = $arrParams['cache_life'];
- $Func = $arrParams['func'];
-
- if ($intPage <= 0) {
- $intPage = 1;
- }
-
- $arrFilter = [
- '$and' => [],
- ];
-
- $arrFilter['$and'][] = ['n_id' => $intNId];
- $arrFilter['$and'][] = ['c_page' => 0];
-
- $arrSort = [];
-
- # sort filter
- if (!empty($strSortType)) {
- switch ($strSortType) {
- case 'zheng':
- $arrSort['c_sort_num'] = 1;
- break;
- case 'dao':
- $arrSort['c_sort_num'] = -1;
- break;
- }
- }
-
- $strCacheKey = '';
- $intLifeTime = 0;
-
- if (empty($arrFilter['$and'])) {
- $arrFilter = [];
- }
-
- # cache filter
- if ($intCacheLifeTime > 0) {
- $strCacheKey = sprintf(
- 'Service:getNovelList:%s:%s:%s:%s:%s:%s',
- $this->SiteContext->DomainModel->d_domain,
- md5(serialize($arrFilter)),
- md5(serialize($arrSort)),
- $intPage,
- $intLimit,
- $strDiffKey,
- );
-
- $intLifeTime = $intLifeTime;
- }
-
- $arrChapter = $this->ChapterModel->findPaginatedWithCache(
- $arrFilter,
- $intPage,
- $intLimit,
- $arrSort,
- $strCacheKey,
- $intLifeTime,
- );
-
- $arrPager = call_user_func([$this, $Func], $arrParams, $arrSort, $arrChapter);
-
- $arrPager = $arrChapter;
- unset($arrPager['data']);
- $arrPager['pager'] = call_user_func([$this, $Func], $arrParams, $arrSort, $arrChapter);
-
- $arrResult = [
- 'data' => $arrChapter['data'],
- 'p_data' => $arrPager,
- ];
-
- return $arrResult;
- }
-
-
- /**
- * 根据NId获取小说详情
- *
- * @param integer $intNId
- * @return void
- */
- public function getChapterInfo(int $intNId, int $intCSortNum, int $intCPage)
- {
- // 小说详情
- $arrNovel = $this->NovelModel->getNovelByNId($intNId);
-
- // 章节
- $ChapterModel = ChapterModel::getInstance();
- $arrFilter = ['n_id' => $intNId, 'c_sort_num' => $intCSortNum, 'c_page' => $intCPage];
-
-
- $arrChapter = $ChapterModel->findOne($arrFilter);
- $strChapterDescription = '';
-
- // 上一章节和下一章节
- $arrPreChapter = $arrNextChapter = [];
-
- if ($arrChapter) {
- $arrPreChapter = $ChapterModel->getPreChapter($arrChapter['n_id'], $arrChapter['c_sort_num'], $arrChapter['c_page']);
- $arrNextChapter = $ChapterModel->getNextChapter($arrChapter['n_id'], $arrChapter['c_sort_num'], $arrChapter['c_page']);
-
- // 要点-先从章节随机截取,后面如果用上ai,看看使用ai 提炼 精简内容
- $strChapterDescription = strip_tags($arrChapter['c_content']);
- $intCount = mb_strlen($strChapterDescription);
- $strChapterDescription = ($intCount > 50) ? mb_substr($strChapterDescription, 0, 50) : $strChapterDescription;
-
- $arrChapter['c_content'] = base64_encode($arrChapter['c_content']);
- }
-
- $arrChapter['pre_chapter'] = $arrPreChapter;
- $arrChapter['next_chapter'] = $arrNextChapter;
- // var_dump($arrChapter['c_name']);exit;
- // 更新值
- ConverterMovel::setVal([
- 'intPage' => 1,
- 'strNovelName' => $arrNovel['n_name'],
- 'strNovelAuthor' => $arrNovel['n_author'],
- 'strNovelCategoryName' => $arrNovel['n_category'],
- 'strNovelStatus' => $arrNovel['n_status'],
- 'strNovelDescription' => $arrNovel['n_description'],
- 'strChapterDescription' => $strChapterDescription,
- 'strNovelChapterName' => $arrChapter['c_name'],
- 'strNovelChapterSort' => $arrChapter['c_sort_num'],
- ]);
-
- return $arrChapter;
- }
-
-
- /**
- * 搜索定制分页
- *
- * @param array $arrFilter 查询条件字段
- * @param array $arrSort 查询排序字段
- * @param array $arrChapter 查询出来的数据
- * @return array
- */
- public function generateChapterPager(array $arrParams, array $arrSort, array $arrChapter): array
- {
-
- $arrNovel = $this->NovelModel->getNovelByNId($arrParams['n_id']);
- $intButtonNum = $arrParams['button_num'];
- $intPage = $arrChapter['page'];
- $intLimit = $arrChapter['limit'];
-
- $strBaseUrl = app(NovelService::class)->getNovelCatalogUrl($arrParams['n_id'], $arrNovel['n_name_pinyin'], $arrParams['sort_type'], '{page}');
- $arrPaginator = CusteomPage02::generate($intPage, $arrChapter['total'], $intLimit, $strBaseUrl, $intButtonNum);
-
- return $arrPaginator;
- }
-}
diff --git a/code/app/services/NovelService.php b/code/app/services/NovelService.php
deleted file mode 100644
index dd8db5b..0000000
--- a/code/app/services/NovelService.php
+++ /dev/null
@@ -1,722 +0,0 @@
-SiteContext = $SiteContext;
- $this->NovelModel = NovelModel::getInstance();
- $this->ChapterModel = ChapterModel::getInstance();
- $this->NovelClicksModel = NovelClicksModel::getInstance();
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrArgs
- * @return string
- */
- public function getPageUrl($strKey, array $arrArgs,): string
- {
- $strSfVal = $this->SiteContext->DomainModel->getFomartSubject($strKey, '', false);
- $arrKeys = [];
- $arrVals = [];
- foreach ($arrArgs as $strKey => $strVal) {
- $arrKeys[] = '{' . $strKey . '}';
- $arrVals[] = $strVal;
- }
-
- return str_replace($arrKeys, $arrVals, $strSfVal);
- }
-
-
- /**
- * Undocumented function
- *
- * @param int $intNId
- * @param string $intPinYin
- * @return string
- */
- public function getNovelInfoUrl($intNId, $intPinYin): string
- {
- $strKey = 'NOVEL_INFO_URL';
- $strUrl = $this->getPageUrl($strKey, [
- 'intNId' => $intNId,
- 'strPinYin' => $intPinYin
- ]);
- return (string)$strUrl;
- }
-
- /**
- * Undocumented function
- * 伪造小说
- * @param int $intNId
- * @param string $intPinYin
- * @return string
- */
- public function getForgeNovelInfoUrl($intNId, $intPinYin, $intNForgeId): string
- {
- $strKey = 'KAN_NOVEL_INFO_URL';
- $strUrl = $this->getPageUrl($strKey, [
- 'intNId' => $intNId,
- 'strPinYin' => $intPinYin,
- 'intNForgeId' => $intNForgeId,
- ]);
- return (string)$strUrl;
- }
-
-
- /**
- * Undocumented function
- *
- * @param int $intNId
- * @param int $intPinYin
- * @param int $intChapterSort
- * @param integer $intChapterPage
- * @return string
- */
- public function getNovelChapterUrl(int $intNId, $intPinYin, $intChapterSort, $intChapterPage = 0): string
- {
- $strKey = 'CONTENT_INFO_URL';
- $strUrl = $this->getPageUrl($strKey, [
- 'intNId' => $intNId,
- 'strPinYin' => $intPinYin,
- 'intChapterSort' => $intChapterSort,
- 'intChapterPage' => $intChapterPage,
- ]);
- return (string)$strUrl;
- }
-
- /**
- * Undocumented function
- *
- * @param int $intNId
- * @param string $intPinYin
- * @return string
- *
- */
- public function getNovelLasterChapterUrl($intNId, $intPinYin): string
- {
- $strKey = 'NEWS_CONTENT_INFO_URL';
- $strUrl = $this->getPageUrl($strKey, [
- 'intNId' => $intNId,
- 'strPinYin' => $intPinYin,
- ]);
- return (string)$strUrl;
- }
-
- /**
- * 小说分类/书库
- * Undocumented function
- *
- * @param [type] $strGender
- * @param [type] $strCategory
- * @param [type] $strStatus
- * @param [type] $strOrder
- * @param [type] $intPage
- * @return string
- */
- public function getNovelCategoryUrl($strGender, $strCategory, $strStatus, $strOrder, $intPage): string
- {
- $strKey = 'CATEGORY_INFO_URL';
- $strUrl = $this->getPageUrl($strKey, [
- 'strGender' => $strGender ?? 'all',
- 'strCategory' => $strCategory ?? 'all',
- 'strStatus' => $strStatus ?? 'all',
- 'strOrder' => $strOrder ?? 'all',
- 'intPage' => $intPage ?? 1,
- ]);
- $strUrl = preg_replace('#/{2,}#', '/', $strUrl);
- return (string)$strUrl;
- }
-
-
-
- /**
- * Undocumented function
- * 小说目录
- * @param int $intNId
- * @param string $intPinYin
- * @return string
- *
- */
- public function getNovelCatalogUrl($intNId, $intPinYin, $strOrder, $intPage = 1): string
- {
- $strKey = 'NOVEL_CATALOG_URL';
- $strUrl = $this->getPageUrl($strKey, [
- 'intNId' => $intNId,
- 'strPinYin' => $intPinYin,
- 'strOrder' => $strOrder,
- 'intPage' => $intPage,
- ]);
- return (string)$strUrl;
- }
-
-
- /**
- * Undocumented function
- *
- * @param int $intPage
- * @param string $strKeyWords
- * @return string
- */
- public function getNovelSearchUrl($strKeyWords, $intPage = 1): string
- {
- $strKey = 'SEARCH_INFO_URL';
- $strUrl = $this->getPageUrl($strKey, [
- 'intPage' => $intPage,
- 'strSearchKeywords' => $strKeyWords
- ]);
- return (string)$strUrl;
- }
-
-
- public $arrSortType = [
- 'all' => '全部排序',
- 'news' => '最新入库',
- 'tuijian' => '推荐',
- 'update' => '最新更新',
- ];
-
- public $arrRankSortType = [
- 'daily' => '天',
- 'weekly' => '周',
- 'monthly' => '月',
- 'total' => '总',
- ];
-
- public $arrStatus = [
- 'all' => '所有',
- 'lianzai' => '连载中',
- 'wanjie' => '已完结',
- ];
-
- public $arrSex = [
- 'all' => '所有',
- 'man' => '男生',
- 'women' => '女生',
- ];
-
-
- /**
- * GetCategoryFilter
- *
- * @return array
- */
- public function getCategoryFilter(string $strNSex = ''): array
- {
- if ($strNSex == 'man') {
- return CategoryModel::$arrCategoryAll['man'];
- } else if ($strNSex == 'women') {
- return CategoryModel::$arrCategoryAll['women'];
- } else {
- return array_combine(CategoryModel::$arrCategoryPinYin, CategoryModel::$arrCategory);
- }
- }
-
- /**
- * 获取排行榜小说
- *
- * @param array $arrParams
- * @return array
- */
- public function getRankList(array $arrParams): array
- {
- $intCount = (int)$arrParams['count'] ?? 10;
- $strSortType = (string)$arrParams['sort_type'] ?? '';
- $strNStatus = (string) $arrParams['n_status'] ?? '';
- $strNSex = (string) $arrParams['n_sex'] ?? '';
- $strDiffKey = (string) $arrParams['diff_key'] ?? '';
- $intCacheLifeTime = (int)$arrParams['cache_life'] ?? 0;
-
- $arrFilter = [];
-
- # n_status filter
- if (!empty($strNStatus)) {
- switch ($strNStatus) {
- case 'lianzai':
- $arrFilter['n_status'] = $this->arrStatus[$strNStatus];
- break;
- case 'wanjie':
- $arrFilter['n_status'] = $this->arrStatus[$strNStatus];
- break;
- }
- }
-
- # n_category_sex_zh filter
- if (!empty($strNSex)) {
- switch ($strNSex) {
- case 'man':
- $arrFilter['n_category_sex_zh'] = 1;
- break;
- case 'women':
- $arrFilter['n_category_sex_zh'] = 2;
- break;
- }
- }
-
- $arrSort = [];
-
- # sort filter
- if (!empty($strSortType)) {
- switch ($strSortType) {
- case 'daily':
- $arrSort['n_sort_type'] = 'daily';
- break;
- case 'weekly':
- $arrSort['n_sort_type'] = 'weekly';
- break;
- case 'monthly':
- $arrSort['n_sort_type'] = 'monthly';
- break;
- case 'total':
- $arrSort['n_sort_type'] = 'total';
- break;
- }
- }
-
- $strCacheKey = '';
- $intLifeTime = 0;
-
- # cache filter
- if ($intCacheLifeTime > 0) {
- $strCacheKey = sprintf(
- 'NovelService:getRankList:%s:%s:%s:%s:%s',
- $this->SiteContext->DomainModel->d_domain,
- md5(serialize($arrFilter)),
- md5(serialize($arrSort)),
- $intCount,
- $strDiffKey,
- );
-
- $intLifeTime = $intLifeTime;
- }
-
- $arrNovel = $this->NovelModel->getRankNovelOnCache(
- $strCacheKey,
- $intCount,
- $arrFilter['n_category_sex_zh'] ?? 0,
- $arrSort['n_sort_type'] ?? 'daily',
- $arrFilter['n_status'] ?? NULL,
- $intLifeTime,
- );
-
- return $arrNovel;
- }
-
-
- /**
- * 获取小说数据
- *
- * @param array $arrParams
- * @return array
- */
- public function getNovelList(array $arrParams): array
- {
- $intCount = (int)$arrParams['count'] ?? 10;
- $strNCategory = $arrParams['n_category'] ?? '';
- $strSortType = (string)$arrParams['sort_type'] ?? '';
- $strNStatus = (string) $arrParams['n_status'] ?? '';
- $strNSex = (string) $arrParams['n_sex'] ?? '';
- $strDiffKey = (string) $arrParams['diff_key'] ?? '';
- $intCacheLifeTime = (int)$arrParams['cache_life'] ?? 0;
-
- $arrFilter = [];
-
- # n_category filter
- if (!empty($strNCategory)) {
- $strNCategory = CategoryModel::getZhByPinYin($strNCategory);
- if ($strNCategory) {
- $arrFilter['n_category'] = $strNCategory;
- }
- }
-
- # n_status filter
- if (!empty($strNStatus)) {
- switch ($strNStatus) {
- case 'lianzai':
- $arrFilter['n_status'] = $this->arrStatus[$strNStatus];
- break;
- case 'wanjie':
- $arrFilter['n_status'] = $this->arrStatus[$strNStatus];
- break;
- }
- }
-
- # n_category_sex_zh filter
- if (!empty($strNSex)) {
- switch ($strNSex) {
- case 'man':
- $arrFilter['n_category_sex_zh'] = $this->arrSex[$strNSex];
- break;
- case 'women':
- $arrFilter['n_category_sex_zh'] = $this->arrSex[$strNSex];
- break;
- }
- }
-
- $arrSort = [];
-
- # sort filter
- if (!empty($strSortType)) {
- switch ($strSortType) {
- case 'news':
- $arrSort['created_at'] = -1;
- break;
- case 'tuijian':
- $arrSort['n_level'] = -1;
- break;
- case 'update':
- $arrSort['n_update_time'] = -1;
- break;
- }
- }
-
- $strCacheKey = '';
- $intLifeTime = 0;
-
- # cache filter
- if ($intCacheLifeTime > 0) {
- $strCacheKey = sprintf(
- 'NovelService:getNovelList:%s:%s:%s:%s:%s',
- $this->SiteContext->DomainModel->d_domain,
- md5(serialize($arrFilter)),
- md5(serialize($arrSort)),
- $intCount,
- $strDiffKey,
- );
-
- $intLifeTime = $intLifeTime;
- }
-
- $arrNovel = $this->NovelModel->findManyShuffledWithCache(
- $arrFilter,
- $intCount,
- $arrSort,
- $strCacheKey,
- $intLifeTime,
- );
-
- return $arrNovel;
- }
-
-
- /**
- * 获取小说分页数据
- *
- * @param array $arrParams
- * @return array
- */
- public function getNovelPager(array $arrParams): array
- {
- $arrParams = [
- 'page' => max((int)($arrParams['page'] ?? 1), 1),
- 'limit' => (int)($arrParams['limit'] ?? 10),
- 'button_num' => (int)($arrParams['button_num'] ?? 0),
- 'n_category' => (string)($arrParams['n_category'] ?? ''),
- 'sort_type' => (string)($arrParams['sort_type'] ?? ''),
- 'n_status' => (string)($arrParams['n_status'] ?? ''),
- 'n_sex' => (string)($arrParams['n_sex'] ?? ''),
- 'diff_key' => (string)($arrParams['diff_key'] ?? ''),
- 'key' => (string)($arrParams['key'] ?? ''),
- 'cache_life' => (int)($arrParams['cache_life'] ?? 0),
- 'func' => (string)($arrParams['func']),
- ];
-
- $intPage = $arrParams['page'];
- $intLimit = $arrParams['limit'];
- $strNCategory = $arrParams['n_category'];
- $strSortType = $arrParams['sort_type'];
- $strNStatus = $arrParams['n_status'];
- $strNSex = $arrParams['n_sex'];
- $strDiffKey = $arrParams['diff_key'];
- $strKey = $arrParams['key'];
- $intCacheLifeTime = $arrParams['cache_life'];
- $Func = $arrParams['func'];
-
- if ($intPage <= 0) {
- $intPage = 1;
- }
-
- $arrFilter = [
- '$and' => [],
- ];
-
- # n_category filter
- if (!empty($strNCategory)) {
- $strNCategory = CategoryModel::getZhByPinYin($strNCategory);
- if ($strNCategory) {
- $arrFilter['$and'][] = ['n_category' => $strNCategory];
- } else {
- $arrParams['n_category'] = 'all';
- }
- }
-
- # n_status filter
- if (!empty($strNStatus)) {
- switch ($strNStatus) {
- case 'lianzai':
- $arrFilter['$and'][] = ['n_status' => $this->arrStatus[$strNStatus]];
- break;
- case 'wanjie':
- $arrFilter['$and'][] = ['n_status' => $this->arrStatus[$strNStatus]];
- break;
- default:
- $arrParams['n_status'] = 'all';
- break;
- }
- }
-
- # n_category_sex_zh filter
- if (!empty($strNSex)) {
- switch ($strNSex) {
- case 'man':
- $arrFilter['$and'][] = ['n_category_sex_zh' => $this->arrSex[$strNSex]];
- break;
- case 'women':
- $arrFilter['$and'][] = ['n_category_sex_zh' => $this->arrSex[$strNSex]];
- break;
- default:
- $arrParams['n_sex'] = 'all';
- break;
- }
- }
-
- # key filter
- if (!empty($strKey)) {
-
- $strKey = mb_substr($strKey, 0, 30);
- $arrFilter['$and'][] = [
- '$or' => [
- ['n_name' => ['$regex' => $strKey, '$options' => 'i']],
- ['n_author' => ['$regex' => $strKey, '$options' => 'i']],
- ['n_category' => ['$regex' => $strKey, '$options' => 'i']],
- ['n_description' => ['$regex' => $strKey, '$options' => 'i']],
- ]
- ];
- $arrParams['key'] = $strKey;
- }
-
- $arrSort = [];
-
- # sort filter
- if (!empty($strSortType)) {
- switch ($strSortType) {
- case 'news':
- $arrSort['created_at'] = -1;
- break;
- case 'tuijian':
- $arrSort['n_level'] = -1;
- break;
- case 'update':
- $arrSort['n_update_time'] = -1;
- break;
- default:
- $arrParams['sort_type'] = 'all';
- break;
- }
- }
-
- $strCacheKey = '';
- $intLifeTime = 0;
-
- # cache filter
- if ($intCacheLifeTime > 0) {
- $strCacheKey = sprintf(
- 'NovelService:getNovelList:%s:%s:%s:%s:%s:%s',
- $this->SiteContext->DomainModel->d_domain,
- md5(serialize($arrFilter)),
- md5(serialize($arrSort)),
- $intPage,
- $intLimit,
- $strDiffKey,
- );
-
- $intLifeTime = $intLifeTime;
- }
-
- if (empty($arrFilter['$and'])) {
- $arrFilter = [];
- }
-
- $arrNovel = $this->NovelModel->findPaginatedWithCache(
- $arrFilter,
- $intPage,
- $intLimit,
- $arrSort,
- $strCacheKey,
- $intLifeTime,
- );
-
- $arrPager = $arrNovel;
- unset($arrPager['data']);
- $arrPager['pager'] = call_user_func([$this, $Func], $arrParams, $arrSort, $arrNovel);
-
- $arrResult = [
- 'data' => $arrNovel['data'],
- 'p_data' => $arrPager,
- ];
-
- return $arrResult;
- }
-
- /**
- * 搜索定制分页
- *
- * @param array $arrFilter 查询条件字段
- * @param array $arrSort 查询排序字段
- * @param array $arrNovel 查询出来的数据
- * @return array
- */
- public function generateSearchPager(array $arrParams, array $arrSort, array $arrNovel): array
- {
- $strKey = $arrParams['key'];
- $intPage = $arrNovel['page'];
- $intLimit = $arrNovel['limit'];
- $intButtomNum = $arrParams['button_num'];
- $strBaseUrl = app(NovelService::class)->getNovelSearchUrl($strKey, '{page}');
- $arrPaginator = CusteomPage02::generate($intPage, $arrNovel['total'], $intLimit, $strBaseUrl, $intButtomNum);
-
- return $arrPaginator;
- }
-
- /**
- * 书库/分类定制分页
- *
- * @param array $arrFilter 查询条件字段
- * @param array $arrSort 查询排序字段
- * @param array $arrNovel 查询出来的数据
- * @return array
- */
- public function generateCategoryPager(array $arrParams, array $arrSort, array $arrNovel): array
- {
- $strGender = $arrParams['n_sex'];
- $strCategory = $arrParams['n_category'];
- $strStatus = $arrParams['n_status'];
- $strOrder = $arrParams['sort_type'];
- $intPage = $arrNovel['page'] ?? 1;
- $intLimit = $arrNovel['limit'] ?? 10;
- $intTotal = $arrNovel['total'] ?? 0;
- $intButtomNum = $arrParams['button_num'];
- $strBaseUrl = app(NovelService::class)->getNovelCategoryUrl($strGender, $strCategory, $strStatus, $strOrder, '{page}');
- $arrPaginator = CusteomPage02::generate($intPage, $intTotal, $intLimit, $strBaseUrl, $intButtomNum);
-
- return $arrPaginator;
- }
-
-
- /**
- * 根据NId获取小说详情
- *
- * @param integer $intNId
- * @return void
- */
- public function getNovelByNId(int $intNId, int $intNForgeId = 0)
- {
-
- // 小说详情
- $arrNovel = $this->NovelModel->getNovelByNId($intNId);
-
- if ($intNForgeId > 0) {
- foreach ($arrNovel['n_forge_novel'] as $arrForgeNovel) {
- if ($arrForgeNovel['n_forge_id'] == $intNForgeId) {
- $arrNovel['n_name'] = $arrForgeNovel['n_forge_title'];
- break;
- }
- }
- }
-
- // 分类拼音
- $arrNovel['n_category_pinyin'] = CategoryModel::getPinYin($arrNovel['n_category']);
- $arrNovel['n_category_sex_en'] = $arrNovel['n_category_sex_en'] ?? 'man';
-
- // 最后章节
- $arrLatestChapter = $this->ChapterModel->getLatestChapterByNId($intNId);
-
- // 第一章
- $arrFirstChapter = $this->ChapterModel->getFirstChapterByNId($intNId, false);
- $intFirstChapterSort = null;
- if ($arrFirstChapter) {
- $intFirstChapterSort = $arrFirstChapter['c_sort_num'];
- }
-
- $strFocus = '';
- // 要点
- if ($arrLatestChapter) {
- $strFocus = strip_tags($arrLatestChapter['c_content']);
- $intCount = mb_strlen($strFocus);
- if ($intCount > 300) {
- $strFocus = mb_substr($strFocus, 0, 300);
- }
- }
-
- // 点击数
- $arrNovelClicks = $this->NovelClicksModel->getStats($intNId);
-
- // 推荐小说
- $arrRelateveNId = array_column($arrNovel['n_related_novel'], 'n_id');
-
- $arrRelateveNovel = $this->NovelModel->findMany(['n_id' => [
- '$in' => $arrRelateveNId,
- ]], 10);
-
-
- // 更新值
- ConverterMovel::setVal([
- 'intPage' => 1,
- 'strNovelName' => $arrNovel['n_name'],
- 'strNovelAuthor' => $arrNovel['n_author'],
- 'strNovelCategoryName' => $arrNovel['n_category'],
- 'strNovelSex' => $arrNovel['n_category_sex_en'] == 'man' ? '男生' : '女生',
- 'strNovelStatus' => $arrNovel['n_status'],
- 'strNovelDescription' => $arrNovel['n_description'],
- ]);
- $arrNovel['intFirstChapterSort'] = $intFirstChapterSort;
- $arrNovel['arrNovelClicks'] = $arrNovelClicks;
- $arrNovel['arrRelateveNovel'] = $arrRelateveNovel;
- $arrNovel['strFocus'] = $strFocus;
-
- return $arrNovel;
- }
-
-
-
-}
diff --git a/code/app/services/SiteContext.php b/code/app/services/SiteContext.php
deleted file mode 100644
index 48bb7ab..0000000
--- a/code/app/services/SiteContext.php
+++ /dev/null
@@ -1,263 +0,0 @@
-Request = request();
- $this->NovelModel = NovelModel::getInstance();
- $this->ChapterModel = ChapterModel::getInstance();
- $this->NovelClicksModel = NovelClicksModel::getInstance();
- }
-
- /**
- * GetViewConfig
- *
- * @return array
- */
- public function getViewConfig(): array
- {
- $strDomain = $this->Request->rootDomain();
-
- $this->DomainModel = DomainModel::getDomainOnCacheByDomain($strDomain);
-
- if (empty($this->DomainModel)) {
- throw new HttpException(404, 'Site config not Found');
- }
-
- $this->TemplatesModel = TemplatesModel::getTemplateOnCacheByTId($this->DomainModel->t_id);
-
- if (empty($this->DomainModel)) {
- throw new HttpException(500, 'Site template not Found');
- }
-
- $this->Request->DomainModel = $this->DomainModel;
-
- $this->Request->TemplatesModel = $this->TemplatesModel;
-
- return [
- 'type' => 'Think',
- 'auto_rule' => 3,
- 'view_dir_name' => 'view',
- 'view_suffix' => 'html',
- 'view_path' => root_path(ltrim($this->TemplatesModel->t_path, '/')),
- ];
- }
-
- /**
- * 初始化网站基本信息到全局替换类里
- *
- * @return void
- */
- public function initCfg()
- {
- // 全局使用的URL模板
- $strPcUrlTemp = $this->DomainModel->getFomartSubject('PC_URL_PATH', '', false);
- $strNanUrlTemp = $this->DomainModel->getFomartSubject('NAN_SHENG_URL', '', false);
- $strNvUrlTemp = $this->DomainModel->getFomartSubject('NV_SHENG_URL', '', false);
- $strCategoryIndexUrlTemp = $this->DomainModel->getFomartSubject('CATEGORY_INDEX_URL', '', false);
- $strRankUrlTemp = $this->DomainModel->getFomartSubject('RANK_INFO_URL', '', false);
- $strSearchIndexUrlTemp = $this->DomainModel->getFomartSubject('SEARCH_INDEX_URL', '', false);
- $strHistoryUrlTemp = $this->DomainModel->getFomartSubject('HISTORY_INFO_URL', '', false);
- $strBookShelfUrlTemp = $this->DomainModel->getFomartSubject('SHUJIA_INFO_URL', '', false);
- $strUserUrlTemp = $this->DomainModel->getFomartSubject('USER_INFO_URL', '', false);
-
- $strNanUrl = str_replace("/", "", $strNanUrlTemp);
- $strNvUrl = str_replace("/", "", $strNvUrlTemp);
-
- View::assign("strPcPath", $strPcUrlTemp);
- View::assign("strNanUrlTemp", $strNanUrlTemp);
- View::assign("strNvUrlTemp", $strNvUrlTemp);
- View::assign("strNanUrl", $strNanUrl);
- View::assign("strNvUrl", $strNvUrl);
- View::assign("strCategoryIndexUrlTemp", $strCategoryIndexUrlTemp);
- View::assign("strRankUrlTemp", $strRankUrlTemp);
- View::assign("strSearchIndexUrlTemp", $strSearchIndexUrlTemp);
- View::assign("strHistoryUrlTemp", $strHistoryUrlTemp);
- View::assign("strBookShelfUrlTemp", $strBookShelfUrlTemp);
- View::assign("strUserUrlTemp", $strUserUrlTemp);
-
- View::assign('Request', $this->Request);
- View::assign('DomainModel', $this->DomainModel);
- View::assign('TemplatesModel', $this->TemplatesModel);
-
- ConverterMovel::setVal([
- 'strSiteName' => $this->DomainModel->d_name,
- 'strSiteDomain' => $this->DomainModel->d_domain,
- 'strSiteKeywords' => $this->DomainModel->d_keywords,
- 'strSiteDescription' => $this->DomainModel->d_description,
-
- 'strIndexTitle' => $this->DomainModel->d_index_title,
- 'strIndexKeywords' => $this->DomainModel->d_index_keywords,
- 'strIndexDescription' => $this->DomainModel->d_index_description,
- ]);
- }
-
-
-
- /**
- * 变量转换
- *
- * @param string $strCode
- * @return string
- */
- public function converterTemplate(string $strCode): string
- {
- $strTitleTemplate = $this->DomainModel->getFomartSubject($strCode);
-
- return ConverterMovel::convert($strTitleTemplate);
- }
-
- /**
- * 获取干扰码
- *
- * @param string $strPageCode
- * @param string $strDiff
- * @param integer $intNum
- * @return array
- */
- public function generateGrm(string $strPageCode, string $strDiff, int $intNum): array
- {
- $strDomain = $this->DomainModel->d_domain;
-
- return GanRaoMaModel::getGrmCode($strDomain, $strPageCode, $strDiff, $intNum);
- }
-
- /**
- * get home view
- *
- * @return string
- */
- public function getHomeView(string $strPlatform): string
- {
- if ($strPlatform == 'h5') {
- if ($this->DomainModel->info_id > 0) {
- $strView = 'novel/getNovelInfo.html';
- } else {
- $strView = 'index/index.html';
- }
- } else {
- if ($this->DomainModel->info_id > 0) {
- $strView = 'pc/getNovelInfo.html';
- } else {
- $strView = 'pc/index.html';
- }
- }
-
- return $strView;
- }
-
- /**
- * 获取伪造小说列表
- *
- * @param array $arrParams
- * @return array
- */
- public function getForgeList(array $arrParams): array
- {
- $intCount = (int)$arrParams['count'] ?? 10;
- $strDiffKey = (string) $arrParams['diff_key'] ?? '';
- $intCacheLifeTime = (int)$arrParams['cache_life'] ?? 0;
-
- $arrFilter = [
- 'n_forge_novel' => [
- '$ne' => null, // 不为 null
- '$ne' => '', // 不为空字符串
- '$ne' => [], // 不为空数组
- '$exists' => true // 确保字段存在
- ],
- ];
-
- $strCacheKey = '';
- $intLifeTime = 0;
-
- # cache filter
- if ($intCacheLifeTime > 0) {
- $strCacheKey = sprintf(
- 'SiteContext:getForgeList:%s:%s:%s:%s',
- $this->DomainModel->d_domain,
- md5(serialize($arrFilter)),
- $intCount,
- $strDiffKey,
- );
-
- $intLifeTime = $intLifeTime;
- }
-
- $arrAllNovel = $this->NovelModel->getRandNovelWithCache(
- $arrFilter,
- $intCount,
- $strCacheKey,
- $intLifeTime,
- );
-
-
- $arrResult = [];
- foreach ($arrAllNovel as $arrNovel) {
- $arrResult[] = [
- 'n_id' => $arrNovel['n_id'],
- 'n_name_pinyin' => $arrNovel['n_name_pinyin'],
- 'n_forge_id' => $arrNovel['n_forge_novel'][0]->n_forge_id,
- 'n_forge_title' => $arrNovel['n_forge_novel'][0]->n_forge_title,
- ];
- }
-
- return $arrResult;
- }
-}
diff --git a/code/app/task/crawler/youzhi/Scheduler.php b/code/app/task/crawler/youzhi/Scheduler.php
deleted file mode 100644
index 05aa1cf..0000000
--- a/code/app/task/crawler/youzhi/Scheduler.php
+++ /dev/null
@@ -1,122 +0,0 @@
-QueueManage = new QueueManage();
- $this->init();
- }
-
- /**
- * Undocumented function
- *
- * @return void
- */
- public function init()
- {
- $this->intSlice = 8;
- }
-
- /**
- * get site
- *
- * @return Site
- */
- public function getSite()
- {
- if ($this->Site == NULL) {
- $this->Site = new Site;
- }
- return $this->Site;
- }
-
-
- /**
- * create a site-wide craw task
- *
- * @return void
- */
- public function crawlFull()
- {
- $intLimit = 10;
-
- $Site = $this->getSite();
-
- $arrAllCategory = $Site->getCategory();
-
- foreach ($arrAllCategory as $arrCategory) {
- $intTotalPage = ceil($arrCategory['total'] / $intLimit);
- for ($intStartPage = 1; $intStartPage <= $intTotalPage; $intStartPage++) {
- $arrFilter = [
- [
- 'v_category_id' => $arrCategory['v_category_id'],
- 'page' => $intStartPage,
- ],
- ];
-
- $arrVideoPageList = $Site->getVideoPageList($arrFilter);
-
- foreach ($arrVideoPageList as $VideoPage) {
- $arrAllVideoPager = $VideoPage->getVideoPager();
-
- $arrVSourceId = [];
- foreach ($arrAllVideoPager['list'] as $arrVideoPager) {
- $arrVSourceId[] = ['v_source_id' => (int)$arrVideoPager['vod_id']];
- }
-
- $arrAllVideoInfoPage = $Site->getVideoInfoPageList($arrVSourceId);
- foreach ($arrAllVideoInfoPage as $VideoInfoPage) {
- $arrVideo = $VideoInfoPage->getVideo();
- print_r($arrVideo);
- }
- }
- }
- }
-
-
- $arrCover = [];
-
-
- if ($arrCover) {
- // $Site->downRemoteImgToLocal($arrCover);
- }
-
- return;
- }
-}
diff --git a/code/app/task/crawler/youzhi/page/BasePage.php b/code/app/task/crawler/youzhi/page/BasePage.php
deleted file mode 100644
index 67b5d48..0000000
--- a/code/app/task/crawler/youzhi/page/BasePage.php
+++ /dev/null
@@ -1,251 +0,0 @@
-setSite($Site);
-
- $this->strUri = $strUri;
- }
-
- /**
- * Undocumented function
- *
- * @return string
- */
- public function getUri(): string
- {
- return $this->strUri;
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrData
- * @return void
- */
- public function setData(array $arrData)
- {
- $this->arrData = $arrData;
- }
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getData(): array
- {
- return $this->arrData;
- }
-
- /**
- * Undocumented function
- *
- * @return QueueManage
- */
- public function getQueueManage(): QueueManage
- {
- if ($this->QueueManage == NULL) {
- $this->QueueManage = QueueManage::getInstance();
- }
-
- return $this->QueueManage;
- }
-
- /**
- * Undocumented function
- *
- * @return MongoBase
- */
- public function getMongoBase(): MongoBase
- {
- if ($this->MongoBase == NULL) {
- DDLManage::load('MongoBase');
- $this->MongoBase = MongoBase::getInstance();
- }
-
- return $this->MongoBase;
- }
-
- public function getQueryList(): QueryList
- {
- if ($this->QueryList == NULL) {
- $this->QueryList = QueryList::html($this->getContent());
- }
-
- return $this->QueryList;
- }
-
-
- /**
- * Undocumented function
- *
- * @return string
- */
- public function getContent(): string
- {
- if ($this->strContent == NULL) {
- $this->Response = $this->getClient()->get($this->strUri);
- $this->strContent = $this->Response->getBody()->getContents();
- }
-
- return $this->strContent;
- }
-
- /**
- * force set page content
- *
- * @param string $strContent
- * @return void
- */
- public function setContent($strContent)
- {
- $this->strContent = $strContent;
- }
-
-
- /**
- * Undocumented function
- *
- * @return boolean
- */
- public function isMobile($strMark = 'content="mobile"'): bool
- {
- if ($this->boolIsMobile === NULL) {
- $this->boolIsMobile = is_numeric(strpos($this->getContent(), $strMark));
- }
- return $this->boolIsMobile;
- }
-
-
- /**
- * Undocumented function
- *
- * @return Client
- */
- protected function getClient(): Client
- {
- if ($this->Client == NULL) {
- $this->Client = $this->getSite()->getClient();
- }
- return $this->Client;
- }
-
-
- /**
- * Undocumented variable
- *
- * @var Site
- */
- protected $Site;
-
- public function setSite(Site $Site)
- {
- $this->Site = $Site;
- }
-
- public function getSite()
- {
- return $this->Site;
- }
-}
diff --git a/code/app/task/crawler/youzhi/page/Site.php b/code/app/task/crawler/youzhi/page/Site.php
deleted file mode 100644
index d66ee60..0000000
--- a/code/app/task/crawler/youzhi/page/Site.php
+++ /dev/null
@@ -1,369 +0,0 @@
-initClient();
- }
-
- /**
- * Undocumented function
- */
- public function initClient()
- {
- $arrConfig = [
- 'http_version' => '1.1', // 强制用 HTTP/1.1,已有,保持
- 'base_uri' => $this->strDomain, // 基础域名,已有,保持
- 'http_errors' => false, // 不抛 HTTP 错误,已有,保持
- 'timeout' => 60, // 从 160 秒改为 60 秒
- 'connect_timeout' => 10, // 从 30 秒改为 10 秒
- 'curl' => [
- CURLOPT_TCP_KEEPALIVE => 1, // 启用 TCP Keep-Alive,已有,保持
- CURLOPT_TCP_KEEPIDLE => 120, // Keep-Alive 空闲时间
- CURLOPT_TCP_KEEPINTVL => 60, // Keep-Alive 探测间隔
- // CURLOPT_SSL_VERIFYPEER => true, // 验证 SSL,已有,保持
- ],
- 'headers' => [
- 'User-Agent' => 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
- 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
- 'Accept-Language' => 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
- 'Referer' => $this->strDomain,
- 'Connection' => 'keep-alive',
- 'sec-ch-ua' => '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"',
- 'sec-ch-ua-mobile' => '?1',
- 'sec-ch-ua-platform' => '"Android"',
- 'sec-fetch-dest' => 'document',
- 'sec-fetch-mode' => 'navigate',
- 'sec-fetch-site' => 'same-origin',
- 'sec-fetch-user' => '?1',
- 'upgrade-insecure-requests' => '1',
- ],
- 'pool_size' => 20,
- 'verify' => false,
- ];
-
- $arrProxy = config('proxy');
-
-
- if ($this->boolProxy && $arrProxy['proxy_status']) {
-
- $strCode = $arrProxy['proxy_code'];
- $strProxyHost = $arrProxy['proxy_host'];
- $strKey = $arrProxy['proxy_key'];
- $strSecret = $arrProxy['proxy_secret'];
-
-
- switch ($strCode) {
- case 'XIONGMAO':
- $intTime = time();
- $strTxt = "orderno=" . $strKey . ",secret=" . $strSecret . ",timestamp=" . $intTime;
- $strSign = strtoupper(md5($strTxt));
- $strAuth = 'sign=' . $strSign . '&orderno=' . $strKey . '×tamp=' . $intTime;
- $arrConfig['proxy'] = $strProxyHost;
- $arrConfig['headers']['Proxy-Authorization'] = $strAuth;
- break;
- case 'KUAI':
- $arrConfig['proxy'] = $strProxyHost;
- $arrConfig['curl'][CURLOPT_PROXYAUTH] = CURLAUTH_BASIC;
- $arrConfig['curl'][CURLOPT_PROXYUSERPWD] = "$strKey:$strSecret";
- break;
- }
- }
-
-
- $this->Client = new Client($arrConfig);
- }
-
- /**
- * Undocumented function
- *
- * @return string
- */
- public function getSiteCode(): string
- {
- return $this->strSiteCode;
- }
-
- /**
- * Undocumented function
- *
- * @param integer|string $strSign
- * @return string
- */
- public function getSiteUUId(int|string $strSign): string
- {
- return $this->getSiteCode() . '-' . $strSign;
- }
-
- /**
- * Undocumented function
- *
- * @return Client
- */
- public function getClient(): Client
- {
- return $this->Client;
- }
-
- /**
- * retrieve multiple novel page model
- *
- * @param string $strUri
- * @return VideoPage[]
- */
- public function getCategory(): array
- {
- $strUri = '/inc/api_mac10.php?ac=list&t=1&page=1';
-
- $Response = $this->getClient()->get($strUri);
- $strContent = $Response->getBody()->getContents();
-
- $arrContent = json_decode($strContent, true);
- $arrFilter = $arrContent['class'];
-
- $arrCategory = [];
-
- foreach ($arrFilter as $intKey => $arrItem) {
-
- $arrFilter[$intKey]['uri'] = $this->getVideoPageUri((int)$arrItem['type_id'], 1);
-
- $arrPromises[$intKey] = $this->getClient()->getAsync($arrFilter[$intKey]['uri']);
- }
-
- $arrResults = Promise\Utils::settle($arrPromises)->wait();
-
- $arrSuccessfulResults = array_filter($arrResults, function ($arrResult) {
- return $arrResult['state'] === 'fulfilled';
- });
-
- foreach ($arrSuccessfulResults as $intKey => $arrResult) {
- $Response = $arrResult['value'];
-
- $strContent = $Response->getBody()->getContents();
-
- $arrTemp = json_decode($strContent, true);
-
- $arrCategory[] = [
- 'v_category_id' => (int)$arrFilter[$intKey]['type_id'],
- 'v_category_name' => $arrFilter[$intKey]['type_name'],
- 'v_category_name_en' => zhToPinYin($arrFilter[$intKey]['type_name']),
- 'total' => $arrTemp['total'],
- ];
- }
-
- return $arrCategory;
- }
-
- /**
- * generate video list uri
- *
- * @param integer $intVCategoryId
- * @param integer $intPage
- * @return string
- */
- public function getVideoPageUri(int $intVCategoryId, int $intPage): string
- {
- return sprintf('/inc/api_mac10.php?ac=list&t=%s&page=%s', $intVCategoryId, $intPage);
- }
-
- /**
- * retrieve multiple novel page model
- *
- * @param string $strUri
- * @return VideoPage[]
- */
- public function getVideoPageList(array $arrFilter): array
- {
-
- /** @var VideoPage[] */
- $arrVideoPage = [];
-
- foreach ($arrFilter as $intKey => $arrItem) {
-
- $arrFilter[$intKey]['uri'] = $this->getVideoPageUri($arrItem['v_category_id'], $arrItem['page']);
-
- $arrPromises[$intKey] = $this->getClient()->getAsync($arrFilter[$intKey]['uri']);
- }
-
- $arrResults = Promise\Utils::settle($arrPromises)->wait();
-
-
- $arrSuccessfulResults = array_filter($arrResults, function ($arrResult) {
- return $arrResult['state'] === 'fulfilled';
- });
-
- foreach ($arrSuccessfulResults as $intKey => $arrResult) {
- $Response = $arrResult['value'];
-
- $strContent = $Response->getBody()->getContents();
-
-
- $VideoPage = $this->getVideoPage($this, $arrFilter[$intKey]['uri']);
-
- $VideoPage->setContent($strContent);
- $VideoPage->setData($arrFilter[$intKey]);
-
- $arrVideoPage[] = $VideoPage;
- }
-
- return $arrVideoPage;
- }
-
- /**
- * generate video list uri
- *
- * @param integer $intVCategoryId
- * @param integer $intPage
- * @return string
- */
- public function getVideoUri(int $intVSourceId): string
- {
- return sprintf('/inc/api_mac10.php?ac=detail&tds=%s', $intVSourceId);
- }
-
- /**
- * retrieve multiple chapter page model
- *
- * @param string $strUri
- * @return VideoInfoPage[]
- */
- public function getVideoInfoPageList(array $arrFilter): array
- {
-
- /** @var VideoInfoPage[] */
- $arrVideoInfoPage = [];
-
- $arrPromises = [];
- foreach ($arrFilter as $intKey => $arrItem) {
- $arrFilter[$intKey]['uri'] = $this->getVideoUri($arrItem['v_source_id']);
- $arrPromises[$intKey] = $arrFilter[$intKey]['uri'];
- }
-
- print_r($arrFilter);
-
- $arrResults = Promise\Utils::settle($arrPromises)->wait();
-
-
- var_dump($arrResults);
- return [];
-
- $arrSuccessfulResults = array_filter($arrResults, function ($arrResult) {
- return $arrResult['state'] === 'fulfilled';
- });
-
- foreach ($arrSuccessfulResults as $intKey => $arrResult) {
- $Response = $arrResult['value'];
-
- var_dump($arrResult);
-
- $strContent = $Response->getBody()->getContents();;
-
- $VideoInfoPage = $this->getVideoInfoPage($this, $arrFilter[$intKey]['uri']);
-
- $VideoInfoPage->setContent($strContent);
- $VideoInfoPage->setData($arrFilter[$intKey]);
-
- $arrVideoInfoPage[] = $VideoInfoPage;
- }
-
- return $arrVideoInfoPage;
- }
-
- /**
- * download the image to the local system
- *
- * @param array $arrFilter
- * @return void
- */
- public function downRemoteImgToLocal(array $arrFilter)
- {
- $StorageCore = StorageCore::getInstance();
-
- $arrPromises = [];
-
- foreach ($arrFilter as $intKey => $arrItem) {
- if (!$StorageCore->has($arrItem['local_path'])) {
- $arrPromises[$intKey] = $this->getClient()->getAsync($arrItem['uri']);
- }
- }
-
- $arrResults = Promise\Utils::settle($arrPromises)->wait();
-
- $arrSuccessfulResults = array_filter($arrResults, function ($arrResult) {
- return $arrResult['state'] === 'fulfilled';
- });
-
- foreach ($arrSuccessfulResults as $intKey => $arrResult) {
- $Response = $arrResult['value'];
-
- $StorageCore->writeStream($arrFilter[$intKey]['local_path'], $Response->getBody()->detach());;
- }
- }
-
- /**
- * Undocumented function
- *
- * @param object $Site
- * @param string $strUri
- * @return VideoPage
- */
- public function getVideoPage($Site, $strUri)
- {
- return new VideoPage($Site, $strUri);
- }
-
- /**
- * Undocumented function
- *
- * @param object $Site
- * @param string $strUri
- * @return VideoInfoPage
- */
- public function getVideoInfoPage($Site, $strUri)
- {
- return new VideoInfoPage($Site, $strUri);
- }
-}
diff --git a/code/app/task/crawler/youzhi/page/VideoInfoPage.php b/code/app/task/crawler/youzhi/page/VideoInfoPage.php
deleted file mode 100644
index 4a63308..0000000
--- a/code/app/task/crawler/youzhi/page/VideoInfoPage.php
+++ /dev/null
@@ -1,194 +0,0 @@
-VideoModel == NULL) {
- $this->VideoModel = VideoModel::getInstance();
- }
- return $this->VideoModel;
- }
-
- public $arrOptions = [
- 'typeMap' => [
- 'root' => 'array',
- 'document' => 'array',
- 'array' => 'array',
- ],
- ];
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getVideo(): array
- {
- if (empty($this->arrVideo)) {
-
- $this->arrVideo = json_decode($this->getContent(), true);
- }
-
- return $this->arrVideo;
- }
-
- /**
- * Undocumented variable
- *
- * @var array
- */
- protected $arrVideo;
-
-
- /**
- * Undocumented function
- *
- * @param integer $intNId
- * @return boolean
- */
- public function saveChapter(int $intNId): bool
- {
- $arrPageChapter = $this->getVideo();
-
- if (
- empty($arrPageChapter) ||
- empty($arrPageChapter['c_page_title']) ||
- empty($arrPageChapter['c_page_data']) ||
- count($arrPageChapter['c_page_data']) < 5
- ) {
- return false;
- }
-
- $strUUId = $this->getSite()->getSiteUUId('chapter-' . $this->arrData['c_source_id'] . '-' . $this->arrData['c_page']);
-
- $arrChapter = [
- 'n_id' => $intNId,
- 'c_name' => $arrPageChapter['c_page_data'][3],
- 'c_sort_num' => $this->arrData['c_sort_num'],
- 'c_page' => $this->arrData['c_page'],
- 'c_source_id' => $this->arrData['c_source_id'],
- 'c_site_code' => $this->getSite()->getSiteCode(),
- 'c_source_uuid' => $strUUId,
- ];
-
- $arrExistsChapter = $this->getVideoModel()->findOne(['c_source_uuid' => $strUUId], $this->arrOptions);
-
- if ($arrExistsChapter) {
-
- $arrExistsChapter = (array) $arrExistsChapter;
-
- $arrUpdate = [
- 'updated_at' => new \MongoDB\BSON\UTCDateTime(),
- ];
-
- $this->getVideoModel()->updateOne(
- ['c_source_uuid' => $strUUId],
- ['$set' => $arrUpdate],
- );
- $this->strCContentPath = $arrExistsChapter['c_content_path'];
- } else {
-
- $arrInsertNovel = $arrChapter;
-
- $arrInsertNovel['c_content_path'] = '/novel/' . ($intNId % 100) . '/' . $intNId . '/' . $arrChapter['c_sort_num'] . '_' . $arrChapter['c_page'] . '.txt';
- $arrInsertNovel['created_at'] = new \MongoDB\BSON\UTCDateTime();
-
- try {
- $this->getVideoModel()->insert($arrInsertNovel);
- $this->updateNovelHaveChapter($intNId);
- $this->strCContentPath = $arrInsertNovel['c_content_path'];
- } catch (\Exception $e) {
- if ($e->getCode() === 11000) {
- return $this->saveChapter($intNId);
- } else {
- throw $e;
- }
- }
- }
-
- StorageCore::getInstance()->put($this->strCContentPath, $this->strChapterContent);
-
- return true;
- }
-
- public $strCContentPath;
- /**
- * Undocumented function
- *
- * @param integer $intNId
- * @return void
- */
- protected function updateNovelHaveChapter(int $intNId)
- {
- $arrFilter = [
- 'n_id' => $intNId,
- ];
-
- $VideoModel = VideoModel::getInstance();
- $arrLasteChapter = $VideoModel->getLatestChapterByNId($intNId, false);
-
- if (!empty($arrLasteChapter)) {
- $arrUpdate['$set']['n_have_chapter'] = 1;
- $arrUpdate['$set']['n_latest_chapter_name'] = $arrLasteChapter['c_name'];
- $this->getMongoBase()->updateOne('novel', $arrFilter, $arrUpdate);
- }
- }
-
- protected $arrNextPage;
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getNextPage(): array
- {
- if ($this->arrNextPage === NULL) {
- $this->arrNextPage = [];
-
- if ($this->isMobile()) {
- $strPattern = "/var\s+hhekgsv\s*=\s*['\"](.*?)['\"]/";
- preg_match_all($strPattern, $this->getContent(), $arrMatches);
- $strNextPageUri = end($arrMatches[1]) ?: '';
- } else {
- $strHref = $this->getQueryList()->find('.read_btn a:contains("下一章")')->attr('href');
- $strNextPageUri = $strHref ?: '';
- }
-
- if (is_numeric(strpos($strNextPageUri, '_'))) {
- $this->arrNextPage = $this->arrData;
- $this->arrNextPage['c_page'] += 1;
- $this->arrNextPage['uri'] = $strNextPageUri;
- }
- }
-
- return $this->arrNextPage;
- }
-}
diff --git a/code/app/task/crawler/youzhi/page/VideoPage.php b/code/app/task/crawler/youzhi/page/VideoPage.php
deleted file mode 100644
index 2cb1c83..0000000
--- a/code/app/task/crawler/youzhi/page/VideoPage.php
+++ /dev/null
@@ -1,417 +0,0 @@
-NovelModel == NULL) {
- $this->NovelModel = NovelModel::getInstance();
- }
- return $this->NovelModel;
- }
-
- public $arrOptions = [
- 'typeMap' => [
- 'root' => 'array',
- 'document' => 'array',
- 'array' => 'array',
- ],
- ];
-
- /**
- * 查询看的小说
- *
- * @param integer $intNSourceId
- * @param string $strName
- * @return array
- */
- protected function findOrCreateNovel(int $intNSourceId, string $strName): array
- {
- $strUUId = $this->getSite()->getSiteUUId($intNSourceId);
-
- $arrExistsNovel = $this->getNovelModel()->findOne(['n_source_uuid' => $strUUId], $this->arrOptions);
-
- if ($arrExistsNovel) {
- $arrVideo = (array) $arrExistsNovel;
- } else {
- $arrVideo = [
- 'n_id' => CountersModel::getInstance()->getNextSequence('novel'),
- 'n_name' => $strName,
- 'n_name_pinyin' => zhToPinYin($strName),
- 'n_site_code' => $this->getSite()->getSiteCode(),
- 'n_source_uuid' => $strUUId,
- 'n_source_id' => $intNSourceId,
- 'n_level' => 1,
- 'n_have_chapter' => 0,
- 'created_at' => new \MongoDB\BSON\UTCDateTime(),
- ];
- try {
- $this->getNovelModel()->insert($arrVideo);
- } catch (\Exception $e) {
- if ($e->getCode() === 11000) {
- return $this->findOrCreateNovel($intNSourceId, $strName);
- } else {
- throw $e;
- }
- }
- }
- return $arrVideo;
- }
-
-
- /**
- * 分析关联数据
- *
- * @return void
- */
- public function getReletedNovel() {}
-
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getVideoPager(): array
- {
- if (empty($this->arrVideo)) {
-
- $this->arrVideo = json_decode($this->getContent(), true);
-
- $this->getReletedNovel();
- }
-
- return $this->arrVideo;
- }
-
- /**
- * Undocumented function
- *
- * @param string $strName
- * @return string
- */
- public function generateCoverPath($strName): string
- {
- $intTime = time() - mt_rand(1, 2 * 24 * 3600 * 360);
-
- return sprintf('/img/%s/%s.jpg', date('Y/m/d/H', $intTime), $strName);
- }
-
- public function filterOtherFields(&$arrNovel)
- {
- $arrFields = [
- 'n_id',
- 'n_name',
- 'n_name_pinyin',
- 'n_status',
- 'n_author',
- 'n_description',
- 'n_category',
- 'n_category_pinyin',
- 'n_category_sex_en',
- 'n_category_sex_zh',
- 'n_cover_path',
- 'n_latest_chapter_name',
- 'n_update_time',
- 'n_forge_novel',
- 'n_related_novel',
- 'n_site_code',
- 'n_source_uuid',
- 'n_source_id',
- 'n_have_chapter',
- 'created_at',
- 'updated_at',
- ];
-
- foreach ($arrNovel as $strKey => $strVal) {
- if (!in_array($strKey, $arrFields)) {
- unset($arrNovel[$strKey]);
- }
- }
- }
-
- /**
- * Undocumented function
- *
- * @return bool
- */
- public function saveVideo(): bool
- {
- $arrPageInfo = $this->getVideo();
-
- print_r($arrPageInfo);
- return false;
- if (
- empty($arrPageInfo) ||
- empty($arrPageInfo['og_title']) ||
- empty($arrPageInfo['og_image']) ||
- empty($arrPageInfo['og_novel_category'])
- ) {
- return false;
- }
-
- $arrVideo = [
- // 'n_id'=> $arrPageInfo['xxxxx'],
- 'n_name' => $arrPageInfo['og_title'],
- 'n_name_pinyin' => zhToPinYin($arrPageInfo['og_title']),
- 'n_status' => $arrPageInfo['og_novel_status'],
- 'n_author' => $arrPageInfo['og_novel_author'],
- 'n_description' => $arrPageInfo['og_description'],
- 'n_category' => $arrPageInfo['og_novel_category'],
- // 'n_category_pinyin' => $arrPageInfo['xxxxx'],
- // 'n_category_sex_en' => $arrPageInfo['xxxxx'],
- // 'n_category_sex_zh' => $arrPageInfo['xxxxx'],
- // 'n_cover_path' => $arrPageInfo['xxxxx'],
- 'n_latest_chapter_name' => $arrPageInfo['og_novel_latest_chapter_name'],
- 'n_update_time' => $arrPageInfo['og_novel_update_time'],
- 'n_forge_novel' => $this->arrForgeNovel,
- 'n_related_novel' => $this->arrRelatedNovel,
-
- 'n_site_code' => $this->getSite()->getSiteCode(),
- 'n_source_id' => $this->arrData['n_source_id'],
- 'n_source_uuid' => $this->getSite()->getSiteUUId($this->arrData['n_source_id']),
-
- // 'n_have_chapter' => $arrPageInfo['xxxxx'],
- // 'created_at' => $arrPageInfo['xxxxx'],
- // 'updated_at' => $arrPageInfo['xxxxx'],
-
- ];
-
- $arrExistsNovel = $this->getNovelModel()->findOne(['n_source_uuid' => $arrVideo['n_source_uuid']], $this->arrOptions);
-
- if ($arrExistsNovel) {
-
- $arrExistsNovel = (array) $arrExistsNovel;
-
- $arrUpdate = [
- 'n_latest_chapter_name' => $arrVideo['n_latest_chapter_name'],
- 'n_update_time' => $arrVideo['n_update_time'],
- 'updated_at' => new \MongoDB\BSON\UTCDateTime(),
- ];
-
- # 如果没有分类,说明这条数据是最初从关联shu那里采集的,需要补全全部信息
- if (empty($arrExistsNovel['n_category'])) {
- $arrUpdate = array_merge($arrUpdate, $arrVideo);
- $arrUpdate['n_related_novel'] = $this->arrRelatedNovel;
- $arrUpdate['n_forge_novel'] = $this->arrForgeNovel;
- $arrUpdate['n_category_pinyin'] = CategoryModel::getPinYin($this->arrVideo['og_novel_category']);
- $arrUpdate['n_category_sex_en'] = CategoryModel::getSexEn($this->arrVideo['og_novel_category']);
- $arrUpdate['n_category_sex_zh'] = CategoryModel::getSexZh($this->arrVideo['og_novel_category']);
- $arrUpdate['n_related_novel'] = $this->arrRelatedNovel;
- $arrUpdate['n_forge_novel'] = $this->arrForgeNovel;
- }
-
- # 图片不存在的时候,需要重新生成
- if (
- !isset($arrExistsNovel['n_cover_path']) ||
- empty($arrExistsNovel['n_cover_path']) ||
- !StorageCore::getInstance()->has($arrExistsNovel['n_cover_path']) ||
- (basename($arrExistsNovel['n_cover_path']) == '.jpg')
- ) {
- $arrUpdate['n_cover_path'] = $this->generateCoverPath($arrVideo['n_name_pinyin']);
- $this->strCoverLocalPath = $arrUpdate['n_cover_path'];
- } else {
- $this->strCoverLocalPath = $arrExistsNovel['n_cover_path'];
- }
-
- $this->getNovelModel()->updateOne(
- ['n_source_uuid' => $arrVideo['n_source_uuid']],
- ['$set' => $arrUpdate],
- );
- $this->intNId = $arrExistsNovel['n_id'];
- } else {
-
- $arrVideo['n_category_pinyin'] = CategoryModel::getPinYin($this->arrVideo['og_novel_category']);
- $arrVideo['n_category_sex_en'] = CategoryModel::getSexEn($this->arrVideo['og_novel_category']);
- $arrVideo['n_category_sex_zh'] = CategoryModel::getSexZh($this->arrVideo['og_novel_category']);
- $arrVideo['n_id'] = CountersModel::getInstance()->getNextSequence('novel');
- $arrVideo['n_level'] = 1;
- $arrVideo['n_have_chapter'] = 0;
- $arrVideo['n_cover_path'] = $this->generateCoverPath($arrVideo['n_name_pinyin']);
- $arrVideo['n_related_novel'] = $this->arrRelatedNovel;
- $arrVideo['n_forge_novel'] = $this->arrForgeNovel;
- $arrVideo['created_at'] = new \MongoDB\BSON\UTCDateTime();
-
- try {
- $this->getNovelModel()->insert($arrVideo);
- $this->intNId = $arrVideo['n_id'];
- $this->strCoverLocalPath = $arrVideo['n_cover_path'];
- } catch (\Exception $e) {
- if ($e->getCode() === 11000) {
- return $this->saveVideo();
- } else {
- throw $e;
- }
- }
- }
-
- return true;
- }
-
-
- public $strCoverLocalPath = '';
-
- public $intNId;
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getDownCoverInfo(): array
- {
- return [
- 'uri' => $this->arrVideo['og_image'],
- 'local_path' => $this->strCoverLocalPath,
- ];
- }
-
- /**
- * Undocumented variable
- *
- * @var array
- */
- protected $arrLatestChapters = NULL;
-
- /**
- * Undocumented variable
- *
- * @var array
- */
- protected $arrChapters = NULL;
-
- public function getLatestChapterByNIdsList(): array
- {
- if ($this->arrLatestChapters === NULL) {
- $this->arrLatestChapters = [];
-
- if ($this->isMobile()) {
- $strClass = '.chapter-list';
- } else {
- $strClass = '.section-list';
- }
-
- if ($this->arrData['page'] == 0) {
- $this->getQueryList()->find($strClass)->eq(0)->find("a")->map(function ($A) {
- $this->arrLatestChapters[] = [
- 'name' => $A->text(),
- 'uri' => $A->attr('href'),
- ];
- });
- }
- }
- return $this->arrLatestChapters;
- }
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getChapters(): array
- {
- if ($this->arrChapters === NULL) {
- $this->arrChapters = [];
- if ($this->isMobile()) {
- $strClass = '.chapter-list';
- } else {
- $strClass = '.section-list';
- }
-
- $intDivIndex = 0;
- if ($this->arrData['page'] == 0) {
- $intDivIndex = 1;
- }
-
- $this->getQueryList()->find($strClass)->eq($intDivIndex)->find("a")->map(function ($A) {
- $this->arrChapters[] = [
- 'name' => $A->text(),
- 'uri' => $A->attr('href'),
- ];
- });
- }
- return $this->arrChapters;
- }
-
-
- protected $arrNextPageArgs = NULL;
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getNextPageArgs(): array
- {
- $this->arrNextPageArgs = [];
- if ($this->arrData['page'] == 0) {
- $this->getLatestChapterByNIdsList();
- $this->getChapters();
-
- $arrLatestChapterFirstBlock = count($this->arrLatestChapters) > 0 ? $this->arrLatestChapters[0] : null;
- $arrLatestChapterSecondBlock = count($this->arrChapters) > 0 ? $this->arrChapters[count($this->arrChapters) - 1] : null;
-
- if (
- !empty($arrLatestChapterFirstBlock) && !empty($arrLatestChapterSecondBlock)
- && ($arrLatestChapterFirstBlock['uri'] != $arrLatestChapterSecondBlock['uri'])
-
- ) {
- $this->arrNextPageArgs = [
- 'n_source_id' => $this->arrData['n_source_id'],
- 'page' => $this->arrData['page'] + 1,
- ];
- }
- } else {
- $strLastUri = $this->getQueryList()->find('select:first option:last')->attr('value');
- if ($strLastUri != '' && $strLastUri != $this->strUri) {
- $this->arrNextPageArgs = [
- 'n_source_id' => $this->arrData['n_source_id'],
- 'page' => $this->arrData['page'] + 1,
- ];
- }
- }
- return $this->arrNextPageArgs;
- }
-}
diff --git a/code/app/task/crawler/zw/Scheduler.php b/code/app/task/crawler/zw/Scheduler.php
deleted file mode 100644
index 27395b7..0000000
--- a/code/app/task/crawler/zw/Scheduler.php
+++ /dev/null
@@ -1,319 +0,0 @@
-QueueManage = new QueueManage();
- $this->init();
- }
-
- /**
- * Undocumented function
- *
- * @return void
- */
- public function init()
- {
- $this->intSlice = 8;
- }
-
- /**
- * create a site-wide craw task
- *
- * @return void
- */
- public function crawlFull()
- {
- $intSliceSize = $this->intSlice;
-
- $arrFilter = [];
- for ($intNId = $this->intStartNSourceId; $intNId <= $this->intEndNSourceId; $intNId++) {
- $arrFilter[] = [
- 'n_source_id' => $intNId,
- 'page' => 0,
- ];
-
- if ($intNId % $intSliceSize == 0) {
- $this->fetchNovel($arrFilter);
- $arrFilter = [];
- }
- }
- if (!empty($arrFilter)) {
- $this->fetchNovel($arrFilter);
- }
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrFilter
- * @return void
- */
- public function fetchNovel(array $arrFilter)
- {
- $arrTask = [
- 'callback' => [static::class, 'getNovelInfo'],
- 'data' => $arrFilter,
- ];
-
- $this->QueueManage->set($arrTask);
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrFilter
- * @return void
- */
- public function getNovelInfo(array $arrFilter)
- {
- $Site = $this->getSite();
-
- $arrNovelPageList = $Site->getNovelPageList($arrFilter);
-
- $arrCover = [];
- foreach ($arrNovelPageList as $NovelPage) {
- // $arrNovel = $NovelPage->getNovelInfo();
- $boolResult = $NovelPage->saveNovelInfo();
- // return;
-
- if ($boolResult == false) {
- continue;
- }
-
- $arrNextPageData = $NovelPage->getNextPageArgs();
- if (!empty($arrNextPageData)) {
- $this->fetchNovel([
- [
- 'n_source_id' => $arrNextPageData['n_source_id'],
- 'page' => $arrNextPageData['page'],
- ]
- ]);
- }
-
- $arrCoverItem = $NovelPage->getDownCoverInfo();
-
- if (!StorageCore::getInstance()->has($arrCoverItem['local_path'])) {
- $arrCover[] = $arrCoverItem;
- }
-
- $arrChapterList = $NovelPage->getChapters();
- $this->fetchChapter($NovelPage->intNId, $NovelPage->getData()['page'], $arrChapterList);
- }
-
- if ($arrCover) {
- $Site->downRemoteImgToLocal($arrCover);
- }
- }
-
- /**
- * create a task to craw the latest chapter
- *
- * @return void
- */
- public function crawLatest()
- {
- $intSliceSize = $this->intSlice;
- $arrUri = [];
- $strUri = '/list/lastupdate_%s_0_0_%s.html';
-
- $intEndCategory = $intEndPage = 10;
-
- for ($intCategoryKey = 0; $intCategoryKey < $intEndCategory; $intCategoryKey++) {
- for ($intPage = 1; $intPage <= $intEndPage; $intPage++) {
- $arrUri[] = sprintf($strUri, $intCategoryKey, $intPage);
- }
- }
-
- $arrUri = array_chunk($arrUri, $intSliceSize);
-
- $arrTask = [
- 'callback' => [static::class, 'getLatestChapter'],
- 'data' => [],
- ];
-
- foreach ($arrUri as $arrUriSlice) {
- $arrTask['data'] = $arrUriSlice;
- $this->QueueManage->set($arrTask);
- }
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrData
- * @return void
- */
- public function getLatestChapter(array $arrFilter)
- {
- $Site = $this->getSite();
-
- $arrLatestListPageList = $Site->getLatestListPageList($arrFilter);
-
- $arrNSourceId = [];
-
- foreach ($arrLatestListPageList as $LatestListPage) {
- $arrResult = $LatestListPage->getNovelFilter();
- $arrNSourceId = array_merge($arrNSourceId, $arrResult);
- }
-
- $arrNSourceId = array_unique($arrNSourceId);
- $arrNSourceId = array_values($arrNSourceId);
-
- $intSliceSize = $this->intSlice;
- $arrFilter = [];
-
- foreach ($arrNSourceId as $intKey => $intNSourceId) {
- $arrFilter[] = [
- 'n_source_id' => $intNSourceId,
- 'page' => 0,
- ];
-
- if ($intKey % $intSliceSize == 0) {
- $this->fetchNovel($arrFilter);
- $arrFilter = [];
- }
- }
-
- if (!empty($arrFilter)) {
- $this->fetchNovel($arrFilter);
- }
- }
-
- /**
- * Undocumented function
- *
- * @param integer $intNId
- * @param integer $intPage
- * @param array $arrChapterList
- * @return void
- */
- public function fetchChapter(int $intNId, int $intPage, array $arrChapterList = [])
- {
- $intSliceSize = $this->intSlice;
- $intPageSize = 100;
-
- $arrTask = [
- 'callback' => [static::class, 'getChapterInfo'],
- 'data' => [
- 'n_id' => $intNId,
- ]
- ];
- $arrFilter = [];
- foreach ($arrChapterList as $intKey => $arrChapter) {
- $arrChapter['c_sort_num'] = $intPage * $intPageSize + $intKey + 1;
- $arrChapter['c_source_id'] = supperExtractFilename($arrChapter['uri']);
- $arrChapter['c_page'] = 0;
-
- $arrFilter[] = $arrChapter;
- if ($intKey % $intSliceSize == 0) {
- $arrTask['data']['filter'] = $arrFilter;
- $this->QueueManage->set($arrTask);
- $arrFilter = [];
- }
- }
-
- if (!empty($arrFilter)) {
- $arrTask['data']['filter'] = $arrFilter;
- $this->QueueManage->set($arrTask);
- }
- }
-
- /**
- * Undocumented variable
- *
- * @var Site
- */
- public $Site;
-
- /**
- * Undocumented function
- *
- * @return Site
- */
- public function getSite()
- {
- if ($this->Site == NULL) {
- $this->Site = new Site;
- }
- return $this->Site;
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrData
- * @return void
- */
- public function getChapterInfo(array $arrData)
- {
- $Site = $this->getSite();
-
- $ChapterModel = ChapterModel::getInstance();
-
- foreach ($arrData['filter'] as $intKey => $arrChapterFilter) {
- $strUUId = sprintf('%s-chapter-%s-%s', $Site->getSiteCode(), $arrChapterFilter['c_source_id'], $arrChapterFilter['c_page']);
- $arrChapter = $ChapterModel->findOne(['c_source_uuid' => $strUUId]);
-
- if (!empty($arrChapter) && !empty($arrChapter['content'])) {
- unset($arrData['filter'][$intKey]);
- }
- }
-
- $arrData['filter'] = array_values($arrData['filter']);
-
- $arrChapterPageList = $Site->getChapterPageList($arrData['filter']);
-
- $arrNextPageFilterList = [];
- foreach ($arrChapterPageList as $ChapterPage) {
-
- $ChapterPage->saveChapter($arrData['n_id']);
-
- $arrNextPageFilter = $ChapterPage->getNextPage();
-
- if (!empty($arrNextPageFilter)) {
- $arrNextPageFilterList[] = $arrNextPageFilter;
- }
- }
-
- if (!empty($arrNextPageFilterList)) {
-
- $arrTask = $arrData;
- $arrTask['filter'] = $arrNextPageFilterList;
- $arrTask = [
- 'callback' => [static::class, 'getChapterInfo'],
- 'data' => $arrTask
- ];
- $this->QueueManage->set($arrTask);
- }
- }
-}
diff --git a/code/app/task/crawler/zw/page/BasePage.php b/code/app/task/crawler/zw/page/BasePage.php
deleted file mode 100644
index e0c8c99..0000000
--- a/code/app/task/crawler/zw/page/BasePage.php
+++ /dev/null
@@ -1,251 +0,0 @@
-setSite($Site);
-
- $this->strUri = $strUri;
- }
-
- /**
- * Undocumented function
- *
- * @return string
- */
- public function getUri(): string
- {
- return $this->strUri;
- }
-
- /**
- * Undocumented function
- *
- * @param array $arrData
- * @return void
- */
- public function setData(array $arrData)
- {
- $this->arrData = $arrData;
- }
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getData(): array
- {
- return $this->arrData;
- }
-
- /**
- * Undocumented function
- *
- * @return QueueManage
- */
- public function getQueueManage(): QueueManage
- {
- if ($this->QueueManage == NULL) {
- $this->QueueManage = QueueManage::getInstance();
- }
-
- return $this->QueueManage;
- }
-
- /**
- * Undocumented function
- *
- * @return MongoBase
- */
- public function getMongoBase(): MongoBase
- {
- if ($this->MongoBase == NULL) {
- DDLManage::load('MongoBase');
- $this->MongoBase = MongoBase::getInstance();
- }
-
- return $this->MongoBase;
- }
-
- public function getQueryList(): QueryList
- {
- if ($this->QueryList == NULL) {
- $this->QueryList = QueryList::html($this->getContent());
- }
-
- return $this->QueryList;
- }
-
-
- /**
- * Undocumented function
- *
- * @return string
- */
- public function getContent(): string
- {
- if ($this->strContent == NULL) {
- $this->Response = $this->getClient()->get($this->strUri);
- $this->strContent = $this->Response->getBody()->getContents();
- }
-
- return $this->strContent;
- }
-
- /**
- * force set page content
- *
- * @param string $strContent
- * @return void
- */
- public function setContent($strContent)
- {
- $this->strContent = $strContent;
- }
-
-
- /**
- * Undocumented function
- *
- * @return boolean
- */
- public function isMobile($strMark = 'content="mobile"'): bool
- {
- if ($this->boolIsMobile === NULL) {
- $this->boolIsMobile = is_numeric(strpos($this->getContent(), $strMark));
- }
- return $this->boolIsMobile;
- }
-
-
- /**
- * Undocumented function
- *
- * @return Client
- */
- protected function getClient(): Client
- {
- if ($this->Client == NULL) {
- $this->Client = $this->getSite()->getClient();
- }
- return $this->Client;
- }
-
-
- /**
- * Undocumented variable
- *
- * @var Site
- */
- protected $Site;
-
- public function setSite(Site $Site)
- {
- $this->Site = $Site;
- }
-
- public function getSite()
- {
- return $this->Site;
- }
-}
diff --git a/code/app/task/crawler/zw/page/ChapterPage.php b/code/app/task/crawler/zw/page/ChapterPage.php
deleted file mode 100644
index fd8b799..0000000
--- a/code/app/task/crawler/zw/page/ChapterPage.php
+++ /dev/null
@@ -1,226 +0,0 @@
-ChapterModel == NULL) {
- $this->ChapterModel = ChapterModel::getInstance();
- }
- return $this->ChapterModel;
- }
-
- public $arrOptions = [
- 'typeMap' => [
- 'root' => 'array',
- 'document' => 'array',
- 'array' => 'array',
- ],
- ];
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getChapterInfo(): array
- {
- if ($this->arrChapterInfo === NULL) {
-
- $this->arrChapterInfo = [];
-
- $strPattern = "/qsbs\.bb\('([^']*)'\)/";
-
- preg_match_all($strPattern, $this->getContent(), $arrMatches);
-
- $strContent = '';
-
- foreach ($arrMatches[1] as $str) {
- $strContent .= base64_decode($str);
- }
-
- $this->strChapterContent = $strContent;
-
- $this->arrChapterInfo['c_page_title'] = $this->getQueryList()->find('title')->text();
- $this->arrChapterInfo['c_page_keywords'] = $this->getQueryList()->find('meta[name="keywords"]')->attr('content');
- $this->arrChapterInfo['c_page_description'] = $this->getQueryList()->find('meta[name="description"]')->attr('content');
-
- $strPattern = "/lastread\.set\((.*?)\);/";
-
- if (preg_match($strPattern, $this->getContent(), $arrMatches)) {
- $strMatch = $arrMatches[1]; // 提取括号内的内容
-
- $arrData = array_map('trim', explode(",", $strMatch));
-
- $arrData = array_map(function ($item) {
- return trim($item, "'");
- }, $arrData);
-
- $this->arrChapterInfo['c_page_data'] = $arrData;
- } else {
- $this->arrChapterInfo['c_page_data'] = NULL;
- }
- }
-
- return $this->arrChapterInfo;
- }
-
- /**
- * Undocumented variable
- *
- * @var array
- */
- protected $arrChapterInfo;
-
-
- /**
- * Undocumented function
- *
- * @param integer $intNId
- * @return boolean
- */
- public function saveChapter(int $intNId): bool
- {
- $arrPageChapter = $this->getChapterInfo();
-
- if (
- empty($arrPageChapter) ||
- empty($arrPageChapter['c_page_title']) ||
- empty($arrPageChapter['c_page_data']) ||
- count($arrPageChapter['c_page_data']) < 5
- ) {
- return false;
- }
-
- $strUUId = $this->getSite()->getSiteUUId('chapter-' . $this->arrData['c_source_id'] . '-' . $this->arrData['c_page']);
-
- $arrChapter = [
- 'n_id' => $intNId,
- 'c_name' => $arrPageChapter['c_page_data'][3],
- 'c_sort_num' => $this->arrData['c_sort_num'],
- 'c_page' => $this->arrData['c_page'],
- 'c_source_id' => $this->arrData['c_source_id'],
- 'c_site_code' => $this->getSite()->getSiteCode(),
- 'c_source_uuid' => $strUUId,
- ];
-
- $arrExistsChapter = $this->getChapterModel()->findOne(['c_source_uuid' => $strUUId], $this->arrOptions);
-
- if ($arrExistsChapter) {
-
- $arrExistsChapter = (array) $arrExistsChapter;
-
- $arrUpdate = [
- 'updated_at' => new \MongoDB\BSON\UTCDateTime(),
- ];
-
- $this->getChapterModel()->updateOne(
- ['c_source_uuid' => $strUUId],
- ['$set' => $arrUpdate],
- );
- $this->strCContentPath = $arrExistsChapter['c_content_path'];
- } else {
-
- $arrInsertNovel = $arrChapter;
-
- $arrInsertNovel['c_content_path'] = '/novel/' . ($intNId % 100) . '/' . $intNId . '/' . $arrChapter['c_sort_num'] . '_' . $arrChapter['c_page'] . '.txt';
- $arrInsertNovel['created_at'] = new \MongoDB\BSON\UTCDateTime();
-
- try {
- $this->getChapterModel()->insert($arrInsertNovel);
- $this->updateNovelHaveChapter($intNId);
- $this->strCContentPath = $arrInsertNovel['c_content_path'];
- } catch (\Exception $e) {
- if ($e->getCode() === 11000) {
- return $this->saveChapter($intNId);
- } else {
- throw $e;
- }
- }
- }
-
- StorageCore::getInstance()->put($this->strCContentPath, $this->strChapterContent);
-
- return true;
- }
-
- public $strCContentPath;
- /**
- * Undocumented function
- *
- * @param integer $intNId
- * @return void
- */
- protected function updateNovelHaveChapter(int $intNId)
- {
- $arrFilter = [
- 'n_id' => $intNId,
- ];
-
- $ChapterModel = ChapterModel::getInstance();
- $arrLasteChapter = $ChapterModel->getLatestChapterByNId($intNId, false);
-
- if (!empty($arrLasteChapter)) {
- $arrUpdate['$set']['n_have_chapter'] = 1;
- $arrUpdate['$set']['n_latest_chapter_name'] = $arrLasteChapter['c_name'];
- $this->getMongoBase()->updateOne('novel', $arrFilter, $arrUpdate);
- }
- }
-
- protected $arrNextPage;
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getNextPage(): array
- {
- if ($this->arrNextPage === NULL) {
- $this->arrNextPage = [];
-
- if ($this->isMobile()) {
- $strPattern = "/var\s+hhekgsv\s*=\s*['\"](.*?)['\"]/";
- preg_match_all($strPattern, $this->getContent(), $arrMatches);
- $strNextPageUri = end($arrMatches[1]) ?: '';
- } else {
- $strHref = $this->getQueryList()->find('.read_btn a:contains("下一章")')->attr('href');
- $strNextPageUri = $strHref ?: '';
- }
-
- if (is_numeric(strpos($strNextPageUri, '_'))) {
- $this->arrNextPage = $this->arrData;
- $this->arrNextPage['c_page'] += 1;
- $this->arrNextPage['uri'] = $strNextPageUri;
- }
- }
-
- return $this->arrNextPage;
- }
-}
diff --git a/code/app/task/crawler/zw/page/LatestListPage.php b/code/app/task/crawler/zw/page/LatestListPage.php
deleted file mode 100644
index 94565d1..0000000
--- a/code/app/task/crawler/zw/page/LatestListPage.php
+++ /dev/null
@@ -1,64 +0,0 @@
-NovelModel == NULL) {
- $this->NovelModel = NovelModel::getInstance();
- }
- return $this->NovelModel;
- }
-
- static public $arrOptions = [
- 'typeMap' => [
- 'root' => 'array',
- 'document' => 'array',
- 'array' => 'array',
- ],
- ];
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getNovelFilter(): array
- {
- $arrFilter = [];
- if ($this->isMobile()) {
- $arrFilter = $this->getQueryList()->find('div.wrap-box')->eq(0)->find('ul.sort_list li')->map(function ($li) {
- $strUri = $li->find('a')->eq(0)->attr('href');
- return supperExtractFilename($strUri);
- })->filter()->all();
- } else {
-
- $arrFilter = $this->getQueryList()->find('div.layout.layout2.layout-col2.fl ul.txt-list li')->map(function ($li) {
- $strUri = $li->find('a')->eq(0)->attr('href');
- return supperExtractFilename($strUri);
- })->filter()->all();
- }
-
- return $arrFilter;
- }
-}
diff --git a/code/app/task/crawler/zw/page/NovelPage.php b/code/app/task/crawler/zw/page/NovelPage.php
deleted file mode 100644
index 2a863bc..0000000
--- a/code/app/task/crawler/zw/page/NovelPage.php
+++ /dev/null
@@ -1,418 +0,0 @@
-NovelModel == NULL) {
- $this->NovelModel = NovelModel::getInstance();
- }
- return $this->NovelModel;
- }
-
- public $arrOptions = [
- 'typeMap' => [
- 'root' => 'array',
- 'document' => 'array',
- 'array' => 'array',
- ],
- ];
-
- /**
- * 查询看的小说
- *
- * @param integer $intNSourceId
- * @param string $strName
- * @return array
- */
- protected function findOrCreateNovel(int $intNSourceId, string $strName): array
- {
- $strUUId = $this->getSite()->getSiteUUId($intNSourceId);
-
- $arrExistsNovel = $this->getNovelModel()->findOne(['n_source_uuid' => $strUUId], $this->arrOptions);
-
- if ($arrExistsNovel) {
- $arrNovelInfo = (array) $arrExistsNovel;
- } else {
- $arrNovelInfo = [
- 'n_id' => CountersModel::getInstance()->getNextSequence('novel'),
- 'n_name' => $strName,
- 'n_name_pinyin' => zhToPinYin($strName),
- 'n_site_code' => $this->getSite()->getSiteCode(),
- 'n_source_uuid' => $strUUId,
- 'n_source_id' => $intNSourceId,
- 'n_level' => 1,
- 'n_have_chapter' => 0,
- 'created_at' => new \MongoDB\BSON\UTCDateTime(),
- ];
- try {
- $this->getNovelModel()->insert($arrNovelInfo);
- } catch (\Exception $e) {
- if ($e->getCode() === 11000) {
- return $this->findOrCreateNovel($intNSourceId, $strName);
- } else {
- throw $e;
- }
- }
- }
- return $arrNovelInfo;
- }
-
-
- /**
- * 分析关联数据
- *
- * @return void
- */
- public function getReletedNovel() {}
-
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getNovelInfo(): array
- {
- if (empty($this->arrNovelInfo)) {
-
- # 获取head字段
- $this->getQueryList()->find('meta[property]')->each(function ($Item) {
- $strKey = str_replace(':', '_', $Item->attr('property'));
- $this->arrNovelInfo[$strKey] = $Item->attr('content');
- });
-
- $this->getReletedNovel();
- }
-
- return $this->arrNovelInfo;
- }
-
- /**
- * Undocumented function
- *
- * @param string $strName
- * @return string
- */
- public function generateCoverPath($strName): string
- {
- $intTime = time() - mt_rand(1, 2 * 24 * 3600 * 360);
-
- return sprintf('/img/%s/%s.jpg', date('Y/m/d/H', $intTime), $strName);
- }
-
- public function filterOtherFields(&$arrNovel)
- {
- $arrFields = [
- 'n_id',
- 'n_name',
- 'n_name_pinyin',
- 'n_status',
- 'n_author',
- 'n_description',
- 'n_category',
- 'n_category_pinyin',
- 'n_category_sex_en',
- 'n_category_sex_zh',
- 'n_cover_path',
- 'n_latest_chapter_name',
- 'n_update_time',
- 'n_forge_novel',
- 'n_related_novel',
- 'n_site_code',
- 'n_source_uuid',
- 'n_source_id',
- 'n_have_chapter',
- 'created_at',
- 'updated_at',
- ];
-
- foreach ($arrNovel as $strKey => $strVal) {
- if (!in_array($strKey, $arrFields)) {
- unset($arrNovel[$strKey]);
- }
- }
- }
-
- /**
- * Undocumented function
- *
- * @return bool
- */
- public function saveNovelInfo(): bool
- {
- $arrPageInfo = $this->getNovelInfo();
- if (
- empty($arrPageInfo) ||
- empty($arrPageInfo['og_title']) ||
- empty($arrPageInfo['og_image']) ||
- empty($arrPageInfo['og_novel_category'])
- ) {
- return false;
- }
-
- $arrNovelInfo = [
- // 'n_id'=> $arrPageInfo['xxxxx'],
- 'n_name' => $arrPageInfo['og_title'],
- 'n_name_pinyin' => zhToPinYin($arrPageInfo['og_title']),
- 'n_status' => $arrPageInfo['og_novel_status'],
- 'n_author' => $arrPageInfo['og_novel_author'],
- 'n_description' => $arrPageInfo['og_description'],
- 'n_category' => $arrPageInfo['og_novel_category'],
- // 'n_category_pinyin' => $arrPageInfo['xxxxx'],
- // 'n_category_sex_en' => $arrPageInfo['xxxxx'],
- // 'n_category_sex_zh' => $arrPageInfo['xxxxx'],
- // 'n_cover_path' => $arrPageInfo['xxxxx'],
- 'n_latest_chapter_name' => $arrPageInfo['og_novel_latest_chapter_name'],
- 'n_update_time' => $arrPageInfo['og_novel_update_time'],
- 'n_forge_novel' => $this->arrForgeNovel,
- 'n_related_novel' => $this->arrRelatedNovel,
-
- 'n_site_code' => $this->getSite()->getSiteCode(),
- 'n_source_id' => $this->arrData['n_source_id'],
- 'n_source_uuid' => $this->getSite()->getSiteUUId($this->arrData['n_source_id']),
-
- // 'n_have_chapter' => $arrPageInfo['xxxxx'],
- // 'created_at' => $arrPageInfo['xxxxx'],
- // 'updated_at' => $arrPageInfo['xxxxx'],
-
- ];
-
- $arrExistsNovel = $this->getNovelModel()->findOne(['n_source_uuid' => $arrNovelInfo['n_source_uuid']], $this->arrOptions);
-
- if ($arrExistsNovel) {
-
- $arrExistsNovel = (array) $arrExistsNovel;
-
- $arrUpdate = [
- 'n_latest_chapter_name' => $arrNovelInfo['n_latest_chapter_name'],
- 'n_update_time' => $arrNovelInfo['n_update_time'],
- 'updated_at' => new \MongoDB\BSON\UTCDateTime(),
- ];
-
- # 如果没有分类,说明这条数据是最初从关联shu那里采集的,需要补全全部信息
- if (empty($arrExistsNovel['n_category'])) {
- $arrUpdate = array_merge($arrUpdate, $arrNovelInfo);
- $arrUpdate['n_related_novel'] = $this->arrRelatedNovel;
- $arrUpdate['n_forge_novel'] = $this->arrForgeNovel;
- $arrUpdate['n_category_pinyin'] = CategoryModel::getPinYin($this->arrNovelInfo['og_novel_category']);
- $arrUpdate['n_category_sex_en'] = CategoryModel::getSexEn($this->arrNovelInfo['og_novel_category']);
- $arrUpdate['n_category_sex_zh'] = CategoryModel::getSexZh($this->arrNovelInfo['og_novel_category']);
- $arrUpdate['n_related_novel'] = $this->arrRelatedNovel;
- $arrUpdate['n_forge_novel'] = $this->arrForgeNovel;
- }
-
- # 图片不存在的时候,需要重新生成
- if (
- !isset($arrExistsNovel['n_cover_path']) ||
- empty($arrExistsNovel['n_cover_path']) ||
- !StorageCore::getInstance()->has($arrExistsNovel['n_cover_path']) ||
- (basename($arrExistsNovel['n_cover_path']) == '.jpg')
- ) {
- $arrUpdate['n_cover_path'] = $this->generateCoverPath($arrNovelInfo['n_name_pinyin']);
- $this->strCoverLocalPath = $arrUpdate['n_cover_path'];
- } else {
- $this->strCoverLocalPath = $arrExistsNovel['n_cover_path'];
- }
-
- $this->getNovelModel()->updateOne(
- ['n_source_uuid' => $arrNovelInfo['n_source_uuid']],
- ['$set' => $arrUpdate],
- );
- $this->intNId = $arrExistsNovel['n_id'];
- } else {
-
- $arrNovelInfo['n_category_pinyin'] = CategoryModel::getPinYin($this->arrNovelInfo['og_novel_category']);
- $arrNovelInfo['n_category_sex_en'] = CategoryModel::getSexEn($this->arrNovelInfo['og_novel_category']);
- $arrNovelInfo['n_category_sex_zh'] = CategoryModel::getSexZh($this->arrNovelInfo['og_novel_category']);
- $arrNovelInfo['n_id'] = CountersModel::getInstance()->getNextSequence('novel');
- $arrNovelInfo['n_level'] = 1;
- $arrNovelInfo['n_have_chapter'] = 0;
- $arrNovelInfo['n_cover_path'] = $this->generateCoverPath($arrNovelInfo['n_name_pinyin']);
- $arrNovelInfo['n_related_novel'] = $this->arrRelatedNovel;
- $arrNovelInfo['n_forge_novel'] = $this->arrForgeNovel;
- $arrNovelInfo['created_at'] = new \MongoDB\BSON\UTCDateTime();
-
- try {
- $this->getNovelModel()->insert($arrNovelInfo);
- $this->intNId = $arrNovelInfo['n_id'];
- $this->strCoverLocalPath = $arrNovelInfo['n_cover_path'];
- } catch (\Exception $e) {
- if ($e->getCode() === 11000) {
- return $this->saveNovelInfo();
- } else {
- throw $e;
- }
- }
- }
-
- return true;
- }
-
-
- public $strCoverLocalPath = '';
-
- public $intNId;
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getDownCoverInfo(): array
- {
- return [
- 'uri' => $this->arrNovelInfo['og_image'],
- 'local_path' => $this->strCoverLocalPath,
- ];
- }
-
- /**
- * Undocumented variable
- *
- * @var array
- */
- protected $arrLatestChapters = NULL;
-
- /**
- * Undocumented variable
- *
- * @var array
- */
- protected $arrChapters = NULL;
-
- public function getLatestChapterByNIdsList(): array
- {
- if ($this->arrLatestChapters === NULL) {
- $this->arrLatestChapters = [];
-
- if ($this->isMobile()) {
- $strClass = '.chapter-list';
- } else {
- $strClass = '.section-list';
- }
-
- if ($this->arrData['page'] == 0) {
- $this->getQueryList()->find($strClass)->eq(0)->find("a")->map(function ($A) {
- $this->arrLatestChapters[] = [
- 'name' => $A->text(),
- 'uri' => $A->attr('href'),
- ];
- });
- }
- }
- return $this->arrLatestChapters;
- }
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getChapters(): array
- {
- if ($this->arrChapters === NULL) {
- $this->arrChapters = [];
- if ($this->isMobile()) {
- $strClass = '.chapter-list';
- } else {
- $strClass = '.section-list';
- }
-
- $intDivIndex = 0;
- if ($this->arrData['page'] == 0) {
- $intDivIndex = 1;
- }
-
- $this->getQueryList()->find($strClass)->eq($intDivIndex)->find("a")->map(function ($A) {
- $this->arrChapters[] = [
- 'name' => $A->text(),
- 'uri' => $A->attr('href'),
- ];
- });
- }
- return $this->arrChapters;
- }
-
-
- protected $arrNextPageArgs = NULL;
-
- /**
- * Undocumented function
- *
- * @return array
- */
- public function getNextPageArgs(): array
- {
- $this->arrNextPageArgs = [];
- if ($this->arrData['page'] == 0) {
- $this->getLatestChapterByNIdsList();
- $this->getChapters();
-
- $arrLatestChapterFirstBlock = count($this->arrLatestChapters) > 0 ? $this->arrLatestChapters[0] : null;
- $arrLatestChapterSecondBlock = count($this->arrChapters) > 0 ? $this->arrChapters[count($this->arrChapters) - 1] : null;
-
- if (
- !empty($arrLatestChapterFirstBlock) && !empty($arrLatestChapterSecondBlock)
- && ($arrLatestChapterFirstBlock['uri'] != $arrLatestChapterSecondBlock['uri'])
-
- ) {
- $this->arrNextPageArgs = [
- 'n_source_id' => $this->arrData['n_source_id'],
- 'page' => $this->arrData['page'] + 1,
- ];
- }
- } else {
- $strLastUri = $this->getQueryList()->find('select:first option:last')->attr('value');
- if ($strLastUri != '' && $strLastUri != $this->strUri) {
- $this->arrNextPageArgs = [
- 'n_source_id' => $this->arrData['n_source_id'],
- 'page' => $this->arrData['page'] + 1,
- ];
- }
- }
- return $this->arrNextPageArgs;
- }
-}
diff --git a/code/app/task/crawler/zw/page/Site.php b/code/app/task/crawler/zw/page/Site.php
deleted file mode 100644
index b161e2f..0000000
--- a/code/app/task/crawler/zw/page/Site.php
+++ /dev/null
@@ -1,347 +0,0 @@
-initClient();
- }
-
- /**
- * Undocumented function
- */
- public function initClient()
- {
- $arrConfig = [
- 'http_version' => '1.1', // 强制用 HTTP/1.1,已有,保持
- 'base_uri' => $this->strDomain, // 基础域名,已有,保持
- 'http_errors' => false, // 不抛 HTTP 错误,已有,保持
- 'timeout' => 60, // 从 160 秒改为 60 秒
- 'connect_timeout' => 10, // 从 30 秒改为 10 秒
- 'curl' => [
- CURLOPT_TCP_KEEPALIVE => 1, // 启用 TCP Keep-Alive,已有,保持
- CURLOPT_TCP_KEEPIDLE => 120, // Keep-Alive 空闲时间
- CURLOPT_TCP_KEEPINTVL => 60, // Keep-Alive 探测间隔
- // CURLOPT_SSL_VERIFYPEER => true, // 验证 SSL,已有,保持
- ],
- 'headers' => [
- 'User-Agent' => 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
- 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
- 'Accept-Language' => 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
- 'Referer' => $this->strDomain,
- 'Connection' => 'keep-alive',
- 'sec-ch-ua' => '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"',
- 'sec-ch-ua-mobile' => '?1',
- 'sec-ch-ua-platform' => '"Android"',
- 'sec-fetch-dest' => 'document',
- 'sec-fetch-mode' => 'navigate',
- 'sec-fetch-site' => 'same-origin',
- 'sec-fetch-user' => '?1',
- 'upgrade-insecure-requests' => '1',
- ],
- 'pool_size' => 10,
- 'verify' => false,
- ];
-
- $arrProxy = config('proxy');
- if ($arrProxy['proxy_status']) {
-
- $strCode = $arrProxy['proxy_code'];
- $strProxyHost = $arrProxy['proxy_host'];
- $strKey = $arrProxy['proxy_key'];
- $strSecret = $arrProxy['proxy_secret'];
-
-
- switch ($strCode) {
- case 'XIONGMAO':
- $intTime = time();
- $strTxt = "orderno=" . $strKey . ",secret=" . $strSecret . ",timestamp=" . $intTime;
- $strSign = strtoupper(md5($strTxt));
- $strAuth = 'sign=' . $strSign . '&orderno=' . $strKey . '×tamp=' . $intTime;
- $arrConfig['proxy'] = $strProxyHost;
- $arrConfig['headers']['Proxy-Authorization'] = $strAuth;
- break;
- case 'KUAI':
- $arrConfig['proxy'] = $strProxyHost;
- $arrConfig['curl'][CURLOPT_PROXYAUTH] = CURLAUTH_BASIC;
- $arrConfig['curl'][CURLOPT_PROXYUSERPWD] = "$strKey:$strSecret";
- break;
- }
- }
-
-
- $this->Client = new Client($arrConfig);
- }
-
- /**
- * Undocumented function
- *
- * @return string
- */
- public function getSiteCode(): string
- {
- return $this->strSiteCode;
- }
-
- /**
- * Undocumented function
- *
- * @param integer|string $strSign
- * @return string
- */
- public function getSiteUUId(int|string $strSign): string
- {
- return $this->getSiteCode() . '-' . $strSign;
- }
-
- /**
- * Undocumented function
- *
- * @return Client
- */
- public function getClient(): Client
- {
- return $this->Client;
- }
-
- public function getNovelPageUri($intNSourceId, $intPage): string
- {
- $intUriFirst = intdiv($intNSourceId, 1000);
-
- $strUri = '';
-
- if ($intPage == 0) {
- $strUri = sprintf('/%s/%s/', $intUriFirst, $intNSourceId);
- } else {
- $strUri = sprintf('/book/%s/list%s.html', $intNSourceId, $intPage);
- }
-
- return $strUri;
- }
-
- /**
- * retrieve multiple novel page model
- *
- * @param string $strUri
- * @return NovelPage[]
- */
- public function getNovelPageList(array $arrFilter): array
- {
-
- /** @var NovelPage[] */
- $arrNovelPage = [];
-
- foreach ($arrFilter as $intKey => $arrItem) {
-
- $arrFilter[$intKey]['uri'] = $this->getNovelPageUri($arrItem['n_source_id'], $arrItem['page']);
-
- $arrPromises[$intKey] = $this->getClient()->getAsync($arrFilter[$intKey]['uri']);
- }
-
- $arrResults = Promise\Utils::settle($arrPromises)->wait();
-
-
- $arrSuccessfulResults = array_filter($arrResults, function ($arrResult) {
- return $arrResult['state'] === 'fulfilled';
- });
-
- foreach ($arrSuccessfulResults as $intKey => $arrResult) {
- $Response = $arrResult['value'];
-
- $strContent = $Response->getBody()->getContents();
- if ($strContent == '索引文件不存在!') {
- continue;
- }
-
- $NovelPage = $this->getNovelPage($this, $arrFilter[$intKey]['uri']);
-
- $NovelPage->setContent($strContent);
- $NovelPage->setData($arrFilter[$intKey]);
-
- $arrNovelPage[] = $NovelPage;
- }
-
- return $arrNovelPage;
- }
-
- /**
- * retrieve multiple chapter page model
- *
- * @param string $strUri
- * @return ChapterPage[]
- */
- public function getChapterPageList(array $arrFilter): array
- {
-
- /** @var ChapterPage[] */
- $arrChapterPage = [];
-
- $arrPromises = [];
- foreach ($arrFilter as $intKey => $arrItem) {
- $arrPromises[$intKey] = $this->getClient()->getAsync($arrItem['uri']);
- }
-
- $arrResults = Promise\Utils::settle($arrPromises)->wait();
-
- $arrSuccessfulResults = array_filter($arrResults, function ($arrResult) {
- return $arrResult['state'] === 'fulfilled';
- });
-
- foreach ($arrSuccessfulResults as $intKey => $arrResult) {
- $Response = $arrResult['value'];
-
- $strContent = $Response->getBody()->getContents();;
-
- $ChapterPage = $this->getChapterPage($this, $arrFilter[$intKey]['uri']);
-
- $ChapterPage->setContent($strContent);
- $ChapterPage->setData($arrFilter[$intKey]);
-
- $arrChapterPage[] = $ChapterPage;
- }
-
- return $arrChapterPage;
- }
-
-
- /**
- * retrieve multiple chapter page model
- *
- * @param string $strUri
- * @return LatestListPage[]
- */
- public function getLatestListPageList(array $arrFilter): array
- {
-
- /** @var LatestListPage[] */
- $arrLatestListPage = [];
-
- $arrPromises = [];
- foreach ($arrFilter as $intKey => $strUri) {
- $arrPromises[$intKey] = $this->getClient()->getAsync($strUri);
- }
-
- $arrResults = Promise\Utils::settle($arrPromises)->wait();
-
- $arrSuccessfulResults = array_filter($arrResults, function ($arrResult) {
- return $arrResult['state'] === 'fulfilled';
- });
-
- foreach ($arrSuccessfulResults as $intKey => $arrResult) {
- $Response = $arrResult['value'];
-
- $strContent = $Response->getBody()->getContents();;
-
- $LatestListPage = $this->getLatestListPage($this, $arrFilter[$intKey]);
-
- $LatestListPage->setContent($strContent);
-
- $arrLatestListPage[] = $LatestListPage;
- }
-
-
- return $arrLatestListPage;
- }
-
- /**
- * download the image to the local system
- *
- * @param array $arrFilter
- * @return void
- */
- public function downRemoteImgToLocal(array $arrFilter)
- {
- $StorageCore = StorageCore::getInstance();
-
- $arrPromises = [];
-
- foreach ($arrFilter as $intKey => $arrItem) {
- if (!$StorageCore->has($arrItem['local_path'])) {
- $arrPromises[$intKey] = $this->getClient()->getAsync($arrItem['uri']);
- }
- }
-
- $arrResults = Promise\Utils::settle($arrPromises)->wait();
-
- $arrSuccessfulResults = array_filter($arrResults, function ($arrResult) {
- return $arrResult['state'] === 'fulfilled';
- });
-
- foreach ($arrSuccessfulResults as $intKey => $arrResult) {
- $Response = $arrResult['value'];
-
- $StorageCore->writeStream($arrFilter[$intKey]['local_path'], $Response->getBody()->detach());;
- }
- }
-
- /**
- * Undocumented function
- *
- * @param object $Site
- * @param string $strUri
- * @return NovelPage
- */
- public function getNovelPage($Site, $strUri)
- {
- return new NovelPage($Site, $strUri);
- }
-
- /**
- * Undocumented function
- *
- * @param object $Site
- * @param string $strUri
- * @return ChapterPage
- */
- public function getChapterPage($Site, $strUri)
- {
- return new ChapterPage($Site, $strUri);
- }
-
- /**
- * Undocumented function
- *
- * @param object $Site
- * @param string $strUri
- * @return LatestListPage
- */
- public function getLatestListPage($Site, $strUri)
- {
- return new LatestListPage($Site, $strUri);
- }
-}
diff --git a/code/app/task/crawler/zw630/Scheduler.php b/code/app/task/crawler/zw630/Scheduler.php
deleted file mode 100644
index b51775c..0000000
--- a/code/app/task/crawler/zw630/Scheduler.php
+++ /dev/null
@@ -1,42 +0,0 @@
-intSlice = 3;
- }
-
- /**
- * Undocumented function
- *
- * @return Site
- */
- public function getSite()
- {
- if ($this->Site == NULL) {
- $this->Site = new Site;
- }
- return $this->Site;
- }
-}
diff --git a/code/app/task/crawler/zw630/page/ChapterPage.php b/code/app/task/crawler/zw630/page/ChapterPage.php
deleted file mode 100644
index b079ea0..0000000
--- a/code/app/task/crawler/zw630/page/ChapterPage.php
+++ /dev/null
@@ -1,9 +0,0 @@
-arrRelatedNovel) || empty($this->arrForgeNovel)) {
- $this->getQueryList()->find('.first_txt')->eq(0)->find("a")->map(function ($A) {
- $strName = $A->text();
- $strUri = $A->attr('href');
-
- if (is_numeric(strpos($strUri, 'shu'))) {
- $intNSourceId = (int)supperExtractFilename($strUri);
- $arrNovelInfo = $this->findOrCreateNovel($intNSourceId, $strName);
- $this->arrRelatedNovel[] = [
- "n_id" => $arrNovelInfo["n_id"],
- "n_source_id" => $arrNovelInfo["n_source_id"],
- "n_name" => $arrNovelInfo["n_name"],
- ];
- } elseif (is_numeric(strpos($strUri, 'kan'))) {
- $intNForgeId = (int)supperExtractFilename($strUri);
- $this->arrForgeNovel[] = [
- "n_forge_id" => $intNForgeId,
- "n_forge_title" => $strName,
- ];
- }
- });
- }
- }
-}
diff --git a/code/app/task/crawler/zw630/page/Site.php b/code/app/task/crawler/zw630/page/Site.php
deleted file mode 100644
index a3791d5..0000000
--- a/code/app/task/crawler/zw630/page/Site.php
+++ /dev/null
@@ -1,148 +0,0 @@
- '1.1', // 强制用 HTTP/1.1,已有,保持
- 'base_uri' => $this->strDomain, // 基础域名,已有,保持
- 'http_errors' => false, // 不抛 HTTP 错误,已有,保持
- 'timeout' => 60, // 从 160 秒改为 60 秒
- 'connect_timeout' => 10, // 从 30 秒改为 10 秒
- 'curl' => [
- CURLOPT_TCP_KEEPALIVE => 1, // 启用 TCP Keep-Alive,已有,保持
- CURLOPT_TCP_KEEPIDLE => 120, // Keep-Alive 空闲时间
- CURLOPT_TCP_KEEPINTVL => 60, // Keep-Alive 探测间隔
- // CURLOPT_SSL_VERIFYPEER => true, // 验证 SSL,已有,保持
- ],
- 'headers' => [
- 'User-Agent' => 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
- 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
- 'Accept-Language' => 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
- 'Referer' => $this->strDomain,
- 'Connection' => 'keep-alive',
- 'sec-ch-ua' => '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"',
- 'sec-ch-ua-mobile' => '?1',
- 'sec-ch-ua-platform' => '"Android"',
- 'sec-fetch-dest' => 'document',
- 'sec-fetch-mode' => 'navigate',
- 'sec-fetch-site' => 'same-origin',
- 'sec-fetch-user' => '?1',
- 'upgrade-insecure-requests' => '1',
- ],
- 'pool_size' => 10,
- 'verify' => false,
- ];
-
- $arrProxy = config('proxy');
- if ($arrProxy['proxy_status']) {
-
- $strCode = $arrProxy['proxy_code'];
- $strProxyHost = $arrProxy['proxy_host'];
- $strKey = $arrProxy['proxy_key'];
- $strSecret = $arrProxy['proxy_secret'];
-
-
- switch ($strCode) {
- case 'XIONGMAO':
- $intTime = time();
- $strTxt = "orderno=" . $strKey . ",secret=" . $strSecret . ",timestamp=" . $intTime;
- $strSign = strtoupper(md5($strTxt));
- $strAuth = 'sign=' . $strSign . '&orderno=' . $strKey . '×tamp=' . $intTime;
- $arrConfig['proxy'] = $strProxyHost;
- $arrConfig['headers']['Proxy-Authorization'] = $strAuth;
- break;
- case 'KUAI':
- $arrConfig['proxy'] = $strProxyHost;
- $arrConfig['curl'][CURLOPT_PROXYAUTH] = CURLAUTH_BASIC;
- $arrConfig['curl'][CURLOPT_PROXYUSERPWD] = "$strKey:$strSecret";
- break;
- }
- }
-
-
- $this->Client = new Client($arrConfig);
- }
-
-
- public function getNovelPageUri($intNSourceId, $intPage): string
- {
- $strUri = '';
-
- if ($intPage == 0) {
-
- $strUri = sprintf('/shu/%s.html', $intNSourceId);
- } else {
-
- $strUri = sprintf('/shu/%s_%s.html', $intNSourceId, $intPage);
- }
-
- return $strUri;
- }
-
-
- /**
- * Undocumented function
- *
- * @param object $Site
- * @param string $strUri
- * @return NovelPage
- */
- public function getNovelPage($Site, $strUri)
- {
- return new NovelPage($Site, $strUri);
- }
-
- /**
- * Undocumented function
- *
- * @param object $Site
- * @param string $strUri
- * @return ChapterPage
- */
- public function getChapterPage($Site, $strUri)
- {
- return new ChapterPage($Site, $strUri);
- }
-
- /**
- * Undocumented function
- *
- * @param object $Site
- * @param string $strUri
- * @return LatestListPage
- */
- public function getLatestListPage($Site, $strUri)
- {
- return new LatestListPage($Site, $strUri);
- }
-}
diff --git a/code/app/task/crawler/zw74/Scheduler.php b/code/app/task/crawler/zw74/Scheduler.php
deleted file mode 100644
index 6780f01..0000000
--- a/code/app/task/crawler/zw74/Scheduler.php
+++ /dev/null
@@ -1,37 +0,0 @@
-intSlice = 8;
- }
-
- /**
- * Undocumented function
- *
- * @return Site
- */
- public function getSite()
- {
- if ($this->Site == NULL) {
- $this->Site = new Site;
- }
- return $this->Site;
- }
-}
diff --git a/code/app/task/crawler/zw74/page/ChapterPage.php b/code/app/task/crawler/zw74/page/ChapterPage.php
deleted file mode 100644
index c2d49b1..0000000
--- a/code/app/task/crawler/zw74/page/ChapterPage.php
+++ /dev/null
@@ -1,9 +0,0 @@
-arrRelatedNovel) || empty($this->arrForgeNovel)) {
- $this->getQueryList()->find('.first_txt')->eq(0)->find("a")->map(function ($A) {
- $strName = $A->text();
- $strUri = $A->attr('href');
-
- if (is_numeric(strpos($strUri, 'http'))) {
- return;
- }
-
- $strPattern = '#^/\d+/(\d+)/$#';
-
- if (is_numeric(strpos($strUri, 'info'))) {
- $intNForgeId = (int)supperExtractFilename($strUri);
- $this->arrForgeNovel[] = [
- "n_forge_id" => $intNForgeId,
- "n_forge_title" => $strName,
- ];
- } elseif (preg_match($strPattern, $strUri, $arrMatches)) {
- $intNSourceId = (int)$arrMatches[1];
- $arrNovelInfo = $this->findOrCreateNovel($intNSourceId, $strName);
- $this->arrRelatedNovel[] = [
- "n_id" => $arrNovelInfo["n_id"],
- "n_source_id" => $arrNovelInfo["n_source_id"],
- "n_name" => $arrNovelInfo["n_name"],
- ];
- }
- });
- }
- }
-}
diff --git a/code/app/task/crawler/zw74/page/Site.php b/code/app/task/crawler/zw74/page/Site.php
deleted file mode 100644
index 298a260..0000000
--- a/code/app/task/crawler/zw74/page/Site.php
+++ /dev/null
@@ -1,152 +0,0 @@
- '1.1', // 强制用 HTTP/1.1,已有,保持
- 'base_uri' => $this->strDomain, // 基础域名,已有,保持
- 'http_errors' => false, // 不抛 HTTP 错误,已有,保持
- 'timeout' => 60, // 从 160 秒改为 60 秒
- 'connect_timeout' => 10, // 从 30 秒改为 10 秒
- 'curl' => [
- CURLOPT_TCP_KEEPALIVE => 1, // 启用 TCP Keep-Alive,已有,保持
- CURLOPT_TCP_KEEPIDLE => 120, // Keep-Alive 空闲时间
- CURLOPT_TCP_KEEPINTVL => 60, // Keep-Alive 探测间隔
- // CURLOPT_SSL_VERIFYPEER => true, // 验证 SSL,已有,保持
- ],
- 'headers' => [
- 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0',
- 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
- 'Accept-Language' => 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
- 'Referer' => $this->strDomain,
- 'Connection' => 'keep-alive',
- 'sec-ch-ua' => '"Microsoft Edge";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
- 'sec-ch-ua-mobile' => '?0',
- 'sec-ch-ua-platform' => '"Windows"',
- 'sec-fetch-dest' => 'document',
- 'sec-fetch-mode' => 'navigate',
- 'sec-fetch-site' => 'same-origin',
- 'sec-fetch-user' => '?1',
- 'upgrade-insecure-requests' => '1',
- ],
- 'pool_size' => 10,
- 'verify' => false,
- ];
-
- $arrProxy = config('proxy');
- if ($arrProxy['proxy_status']) {
-
- $strCode = $arrProxy['proxy_code'];
- $strProxyHost = $arrProxy['proxy_host'];
- $strKey = $arrProxy['proxy_key'];
- $strSecret = $arrProxy['proxy_secret'];
-
-
- switch ($strCode) {
- case 'XIONGMAO':
- $intTime = time();
- $strTxt = "orderno=" . $strKey . ",secret=" . $strSecret . ",timestamp=" . $intTime;
- $strSign = strtoupper(md5($strTxt));
- $strAuth = 'sign=' . $strSign . '&orderno=' . $strKey . '×tamp=' . $intTime;
- $arrConfig['proxy'] = $strProxyHost;
- $arrConfig['headers']['Proxy-Authorization'] = $strAuth;
- break;
- case 'KUAI':
- $arrConfig['proxy'] = $strProxyHost;
- $arrConfig['curl'][CURLOPT_PROXYAUTH] = CURLAUTH_BASIC;
- $arrConfig['curl'][CURLOPT_PROXYUSERPWD] = "$strKey:$strSecret";
- break;
- }
- }
-
-
- $this->Client = new Client($arrConfig);
- }
-
- /**
- * Undocumented function
- *
- * @param int $intNSourceId
- * @param int $intPage
- * @return string
- */
- public function getNovelPageUri($intNSourceId, $intPage): string
- {
- $intUriFirst = intdiv($intNSourceId, 1000);
-
- $strUri = '';
-
- if ($intPage == 0) {
- $strUri = sprintf('/%s/%s/', $intUriFirst, $intNSourceId);
- } else {
- $strUri = sprintf('/book/%s/list%s.html', $intNSourceId, $intPage);
- }
-
- return $strUri;
- }
-
- /**
- * Undocumented function
- *
- * @param object $Site
- * @param string $strUri
- * @return NovelPage
- */
- public function getNovelPage($Site, $strUri)
- {
- return new NovelPage($Site, $strUri);
- }
-
- /**
- * Undocumented function
- *
- * @param object $Site
- * @param string $strUri
- * @return ChapterPage
- */
- public function getChapterPage($Site, $strUri)
- {
- return new ChapterPage($Site, $strUri);
- }
-
- /**
- * Undocumented function
- *
- * @param object $Site
- * @param string $strUri
- * @return LatestListPage
- */
- public function getLatestListPage($Site, $strUri)
- {
- return new LatestListPage($Site, $strUri);
- }
-}
diff --git a/code/app/task/module/Listen.php b/code/app/task/module/Listen.php
deleted file mode 100644
index b9130df..0000000
--- a/code/app/task/module/Listen.php
+++ /dev/null
@@ -1,90 +0,0 @@
- 0) {
- $intLimit--;
- try {
- $strData = $QueueManage->get();
- if (empty($strData)) {
- sleep(1);
- continue;
- }
- $arrData = json_decode($strData, true);
- if (!is_array($arrData)) {
- echo '监听Redis队列读取到异常无法解析的数据[' . $strData . ']' . PHP_EOL;
- continue;
- }
- $Class = new $arrData['callback'][0];
- $Class->{$arrData['callback'][1]}($arrData['data']);
- unset($Class);
- } catch (\Throwable $t) {
- $strData = $strData ?? '';
- echo date('Y-m-d H:i:s') . ':出现致命错误需要处理' . PHP_EOL .
- ' 队列数据:' . $strData . PHP_EOL .
- ' 文件:' . $t->getFile() . PHP_EOL .
- ' 行数:' . $t->getLine() . PHP_EOL .
- ' 错误描述:' . $t->getMessage() . PHP_EOL .
- ' 堆栈跟踪:' . $t->getTraceAsString() . PHP_EOL;
- }
- }
- }
-}
diff --git a/code/app/task/module/PlanTask.php b/code/app/task/module/PlanTask.php
deleted file mode 100644
index 264f37c..0000000
--- a/code/app/task/module/PlanTask.php
+++ /dev/null
@@ -1,136 +0,0 @@
-select();
-
- foreach ($PlanTaskAll as $PlanTask) {
-
- if ($PlanTask->pt_last_exec != 0 && ($PlanTask->pt_last_exec + $PlanTask->pt_limit) > time()) continue;
-
- $PlanTask->pt_last_exec = time();
-
- $PlanTask->save();
-
- switch ($PlanTask->pt_code) {
-
- case 'PULL_630_ZW_NOVEL':
- self::pull630ZwNovel();
- break;
- case 'PULL_630_ZW_NOVEL_LATEST':
- self::pull630ZwNovelLatest();
- break;
-
- case 'PULL_74_ZW_NOVEL':
- self::pull74ZwNovel();
- break;
- case 'PULL_74_ZW_NOVEL_LATEST':
- self::pull74ZwNovelLatest();
- break;
-
- case 'PULL_YOU_ZHI_SHI_PIN':
- self::pullYouZhiShiPin();
- break;
-
- }
- }
- }
- /**
- * Undocumented function
- *
- * @return void
- */
- public static function pullYouZhiShiPin()
- {
- $arrTask = [
- 'callback' => [YouZhiScheduler::class, 'crawlFull'],
- 'data' => []
- ];
-
- $QueueManage = new QueueManage();
- $QueueManage->set($arrTask);
- }
-
-
- /**
- * Undocumented function
- *
- * @return void
- */
- public static function pull630ZwNovel()
- {
- $arrTask = [
- 'callback' => [Zw630Scheduler::class, 'crawlFull'],
- 'data' => []
- ];
-
- $QueueManage = new QueueManage();
- $QueueManage->set($arrTask);
- }
-
- /**
- * Undocumented function
- *
- * @return void
- */
- public static function pull630ZwNovelLatest()
- {
- $arrTask = [
- 'callback' => [Zw630Scheduler::class, 'crawLatest'],
- 'data' => []
- ];
-
- $QueueManage = new QueueManage();
- $QueueManage->set($arrTask);
- }
-
-
- /**
- * Undocumented function
- *
- * @return void
- */
- public static function pull74ZwNovel()
- {
- $arrTask = [
- 'callback' => [Zw74Scheduler::class, 'crawlFull'],
- 'data' => []
- ];
-
- $QueueManage = new QueueManage();
- $QueueManage->set($arrTask);
- }
-
- /**
- * Undocumented function
- *
- * @return void
- */
- public static function pull74ZwNovelLatest()
- {
- $arrTask = [
- 'callback' => [Zw74Scheduler::class, 'crawLatest'],
- 'data' => []
- ];
-
- $QueueManage = new QueueManage();
- $QueueManage->set($arrTask);
- }
-}
diff --git a/code/composer.json b/code/composer.json
deleted file mode 100644
index aefec70..0000000
--- a/code/composer.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "name": "topthink/think",
- "description": "the new thinkphp framework",
- "type": "project",
- "keywords": [
- "framework",
- "thinkphp",
- "ORM"
- ],
- "homepage": "https://www.thinkphp.cn/",
- "license": "Apache-2.0",
- "authors": [
- {
- "name": "liu21st",
- "email": "liu21st@gmail.com"
- },
- {
- "name": "yunwuxin",
- "email": "448901948@qq.com"
- }
- ],
- "require": {
- "php": ">=8.0.0",
- "topthink/framework": "^8.0",
- "topthink/think-orm": "^3.0|^4.0",
- "topthink/think-filesystem": "^2.0",
- "topthink/think-multi-app": "^1.1",
- "topthink/think-view": "^2.0",
- "guzzlehttp/guzzle": "^7.8",
- "jaeger/querylist": "^4.2",
- "topthink/think-migration": "^3.1",
- "topthink/think-helper": "^3.1",
- "fakerphp/faker": "^1.23",
- "aws/aws-sdk-php": "^3.337",
- "league/flysystem": "^1.1",
- "league/flysystem-aws-s3-v3": "^1.0",
- "topthink/think-throttle": "^2.0",
- "phpoffice/phpspreadsheet": "^4.1"
- },
- "require-dev": {
- "topthink/think-dumper": "^1.0",
- "topthink/think-trace": "^1.0",
- "mongodb/mongodb": "^1.21"
- },
- "autoload": {
- "psr-4": {
- "app\\": "app",
- "database\\": "database"
- },
- "psr-0": {
- "": "extend/"
- }
- },
- "config": {
- "preferred-install": "dist"
- },
- "scripts": {
- "post-autoload-dump": [
- "@php think service:discover",
- "@php think vendor:publish"
- ]
- }
-}
diff --git a/code/composer.lock b/code/composer.lock
deleted file mode 100644
index 5324ab2..0000000
--- a/code/composer.lock
+++ /dev/null
@@ -1,3113 +0,0 @@
-{
- "_readme": [
- "This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
- "This file is @generated automatically"
- ],
- "content-hash": "b478b1d55a2646f40e59782fcccfd100",
- "packages": [
- {
- "name": "aws/aws-crt-php",
- "version": "v1.2.7",
- "source": {
- "type": "git",
- "url": "https://github.com/awslabs/aws-crt-php.git",
- "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e",
- "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5",
- "yoast/phpunit-polyfills": "^1.0"
- },
- "suggest": {
- "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality."
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "AWS SDK Common Runtime Team",
- "email": "aws-sdk-common-runtime@amazon.com"
- }
- ],
- "description": "AWS Common Runtime for PHP",
- "homepage": "https://github.com/awslabs/aws-crt-php",
- "keywords": [
- "amazon",
- "aws",
- "crt",
- "sdk"
- ],
- "support": {
- "issues": "https://github.com/awslabs/aws-crt-php/issues",
- "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7"
- },
- "time": "2024-10-18T22:15:13+00:00"
- },
- {
- "name": "aws/aws-sdk-php",
- "version": "3.337.3",
- "source": {
- "type": "git",
- "url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "06dfc8f76423b49aaa181debd25bbdc724c346d6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/06dfc8f76423b49aaa181debd25bbdc724c346d6",
- "reference": "06dfc8f76423b49aaa181debd25bbdc724c346d6",
- "shasum": ""
- },
- "require": {
- "aws/aws-crt-php": "^1.2.3",
- "ext-json": "*",
- "ext-pcre": "*",
- "ext-simplexml": "*",
- "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5",
- "guzzlehttp/promises": "^1.4.0 || ^2.0",
- "guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
- "mtdowling/jmespath.php": "^2.6",
- "php": ">=7.2.5",
- "psr/http-message": "^1.0 || ^2.0"
- },
- "require-dev": {
- "andrewsville/php-token-reflection": "^1.4",
- "aws/aws-php-sns-message-validator": "~1.0",
- "behat/behat": "~3.0",
- "composer/composer": "^1.10.22",
- "dms/phpunit-arraysubset-asserts": "^0.4.0",
- "doctrine/cache": "~1.4",
- "ext-dom": "*",
- "ext-openssl": "*",
- "ext-pcntl": "*",
- "ext-sockets": "*",
- "nette/neon": "^2.3",
- "paragonie/random_compat": ">= 2",
- "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5",
- "psr/cache": "^1.0 || ^2.0 || ^3.0",
- "psr/simple-cache": "^1.0 || ^2.0 || ^3.0",
- "sebastian/comparator": "^1.2.3 || ^4.0",
- "yoast/phpunit-polyfills": "^1.0"
- },
- "suggest": {
- "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
- "doctrine/cache": "To use the DoctrineCacheAdapter",
- "ext-curl": "To send requests using cURL",
- "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
- "ext-sockets": "To use client-side monitoring"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "files": [
- "src/functions.php"
- ],
- "psr-4": {
- "Aws\\": "src/"
- },
- "exclude-from-classmap": [
- "src/data/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "Amazon Web Services",
- "homepage": "http://aws.amazon.com"
- }
- ],
- "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
- "homepage": "http://aws.amazon.com/sdkforphp",
- "keywords": [
- "amazon",
- "aws",
- "cloud",
- "dynamodb",
- "ec2",
- "glacier",
- "s3",
- "sdk"
- ],
- "support": {
- "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
- "issues": "https://github.com/aws/aws-sdk-php/issues",
- "source": "https://github.com/aws/aws-sdk-php/tree/3.337.3"
- },
- "time": "2025-01-21T19:10:05+00:00"
- },
- {
- "name": "composer/pcre",
- "version": "3.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/pcre.git",
- "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
- "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
- "shasum": ""
- },
- "require": {
- "php": "^7.4 || ^8.0"
- },
- "conflict": {
- "phpstan/phpstan": "<1.11.10"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.12 || ^2",
- "phpstan/phpstan-strict-rules": "^1 || ^2",
- "phpunit/phpunit": "^8 || ^9"
- },
- "type": "library",
- "extra": {
- "phpstan": {
- "includes": [
- "extension.neon"
- ]
- },
- "branch-alias": {
- "dev-main": "3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Composer\\Pcre\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- }
- ],
- "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
- "keywords": [
- "PCRE",
- "preg",
- "regex",
- "regular expression"
- ],
- "support": {
- "issues": "https://github.com/composer/pcre/issues",
- "source": "https://github.com/composer/pcre/tree/3.3.2"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2024-11-12T16:29:46+00:00"
- },
- {
- "name": "fakerphp/faker",
- "version": "v1.24.1",
- "source": {
- "type": "git",
- "url": "https://github.com/FakerPHP/Faker.git",
- "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5",
- "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5",
- "shasum": ""
- },
- "require": {
- "php": "^7.4 || ^8.0",
- "psr/container": "^1.0 || ^2.0",
- "symfony/deprecation-contracts": "^2.2 || ^3.0"
- },
- "conflict": {
- "fzaninotto/faker": "*"
- },
- "require-dev": {
- "bamarni/composer-bin-plugin": "^1.4.1",
- "doctrine/persistence": "^1.3 || ^2.0",
- "ext-intl": "*",
- "phpunit/phpunit": "^9.5.26",
- "symfony/phpunit-bridge": "^5.4.16"
- },
- "suggest": {
- "doctrine/orm": "Required to use Faker\\ORM\\Doctrine",
- "ext-curl": "Required by Faker\\Provider\\Image to download images.",
- "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
- "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
- "ext-mbstring": "Required for multibyte Unicode string functionality."
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Faker\\": "src/Faker/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "François Zaninotto"
- }
- ],
- "description": "Faker is a PHP library that generates fake data for you.",
- "keywords": [
- "data",
- "faker",
- "fixtures"
- ],
- "support": {
- "issues": "https://github.com/FakerPHP/Faker/issues",
- "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1"
- },
- "time": "2024-11-21T13:46:39+00:00"
- },
- {
- "name": "guzzlehttp/guzzle",
- "version": "7.9.2",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/guzzle.git",
- "reference": "d281ed313b989f213357e3be1a179f02196ac99b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b",
- "reference": "d281ed313b989f213357e3be1a179f02196ac99b",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
- "guzzlehttp/psr7": "^2.7.0",
- "php": "^7.2.5 || ^8.0",
- "psr/http-client": "^1.0",
- "symfony/deprecation-contracts": "^2.2 || ^3.0"
- },
- "provide": {
- "psr/http-client-implementation": "1.0"
- },
- "require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.2",
- "ext-curl": "*",
- "guzzle/client-integration-tests": "3.0.2",
- "php-http/message-factory": "^1.1",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20",
- "psr/log": "^1.1 || ^2.0 || ^3.0"
- },
- "suggest": {
- "ext-curl": "Required for CURL handler support",
- "ext-intl": "Required for Internationalized Domain Name (IDN) support",
- "psr/log": "Required for using the Log middleware"
- },
- "type": "library",
- "extra": {
- "bamarni-bin": {
- "bin-links": true,
- "forward-command": false
- }
- },
- "autoload": {
- "files": [
- "src/functions_include.php"
- ],
- "psr-4": {
- "GuzzleHttp\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- },
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "Jeremy Lindblom",
- "email": "jeremeamia@gmail.com",
- "homepage": "https://github.com/jeremeamia"
- },
- {
- "name": "George Mponos",
- "email": "gmponos@gmail.com",
- "homepage": "https://github.com/gmponos"
- },
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com",
- "homepage": "https://github.com/Nyholm"
- },
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com",
- "homepage": "https://github.com/sagikazarmark"
- },
- {
- "name": "Tobias Schultze",
- "email": "webmaster@tubo-world.de",
- "homepage": "https://github.com/Tobion"
- }
- ],
- "description": "Guzzle is a PHP HTTP client library",
- "keywords": [
- "client",
- "curl",
- "framework",
- "http",
- "http client",
- "psr-18",
- "psr-7",
- "rest",
- "web service"
- ],
- "support": {
- "issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.9.2"
- },
- "funding": [
- {
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://github.com/Nyholm",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
- "type": "tidelift"
- }
- ],
- "time": "2024-07-24T11:22:20+00:00"
- },
- {
- "name": "guzzlehttp/promises",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/promises.git",
- "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
- "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
- "shasum": ""
- },
- "require": {
- "php": "^7.2.5 || ^8.0"
- },
- "require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20"
- },
- "type": "library",
- "extra": {
- "bamarni-bin": {
- "bin-links": true,
- "forward-command": false
- }
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Promise\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- },
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com",
- "homepage": "https://github.com/Nyholm"
- },
- {
- "name": "Tobias Schultze",
- "email": "webmaster@tubo-world.de",
- "homepage": "https://github.com/Tobion"
- }
- ],
- "description": "Guzzle promises library",
- "keywords": [
- "promise"
- ],
- "support": {
- "issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://github.com/Nyholm",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
- "type": "tidelift"
- }
- ],
- "time": "2024-10-17T10:06:22+00:00"
- },
- {
- "name": "guzzlehttp/psr7",
- "version": "2.7.0",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/psr7.git",
- "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
- "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
- "shasum": ""
- },
- "require": {
- "php": "^7.2.5 || ^8.0",
- "psr/http-factory": "^1.0",
- "psr/http-message": "^1.1 || ^2.0",
- "ralouphie/getallheaders": "^3.0"
- },
- "provide": {
- "psr/http-factory-implementation": "1.0",
- "psr/http-message-implementation": "1.0"
- },
- "require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.2",
- "http-interop/http-factory-tests": "0.9.0",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20"
- },
- "suggest": {
- "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
- },
- "type": "library",
- "extra": {
- "bamarni-bin": {
- "bin-links": true,
- "forward-command": false
- }
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Psr7\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- },
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "George Mponos",
- "email": "gmponos@gmail.com",
- "homepage": "https://github.com/gmponos"
- },
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com",
- "homepage": "https://github.com/Nyholm"
- },
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com",
- "homepage": "https://github.com/sagikazarmark"
- },
- {
- "name": "Tobias Schultze",
- "email": "webmaster@tubo-world.de",
- "homepage": "https://github.com/Tobion"
- },
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com",
- "homepage": "https://sagikazarmark.hu"
- }
- ],
- "description": "PSR-7 message implementation that also provides common utility methods",
- "keywords": [
- "http",
- "message",
- "psr-7",
- "request",
- "response",
- "stream",
- "uri",
- "url"
- ],
- "support": {
- "issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.7.0"
- },
- "funding": [
- {
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://github.com/Nyholm",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
- "type": "tidelift"
- }
- ],
- "time": "2024-07-18T11:15:46+00:00"
- },
- {
- "name": "jaeger/g-http",
- "version": "V2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/jae-jae/GHttp.git",
- "reference": "29cb537c57f230980ca10622de190f04831e35e6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/jae-jae/GHttp/zipball/29cb537c57f230980ca10622de190f04831e35e6",
- "reference": "29cb537c57f230980ca10622de190f04831e35e6",
- "shasum": ""
- },
- "require": {
- "guzzlehttp/guzzle": "^6.0 || ^7.0",
- "php": ">=8.1",
- "symfony/cache": "^6.4 || ^7.0"
- },
- "require-dev": {
- "predis/predis": "^2.2"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Jaeger\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jaeger",
- "email": "JaegerCode@gmail.com"
- }
- ],
- "description": "Simple Http client base on GuzzleHttp",
- "support": {
- "issues": "https://github.com/jae-jae/GHttp/issues",
- "source": "https://github.com/jae-jae/GHttp/tree/V2.0.1"
- },
- "time": "2024-06-14T08:13:32+00:00"
- },
- {
- "name": "jaeger/phpquery-single",
- "version": "1.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/jae-jae/phpQuery-single.git",
- "reference": "39a650ade692a6b480c22220dce0c198d6a946fb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/jae-jae/phpQuery-single/zipball/39a650ade692a6b480c22220dce0c198d6a946fb",
- "reference": "39a650ade692a6b480c22220dce0c198d6a946fb",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "phpQuery.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Tobiasz Cudnik",
- "email": "tobiasz.cudnik@gmail.com",
- "homepage": "https://github.com/TobiaszCudnik",
- "role": "Developer"
- },
- {
- "name": "Jaeger",
- "role": "Packager"
- }
- ],
- "description": "phpQuery单文件版本,是Querylist的依赖(http://querylist.cc/),phpQuery项目主页:http://code.google.com/p/phpquery/",
- "homepage": "http://code.google.com/p/phpquery/",
- "support": {
- "issues": "https://github.com/jae-jae/phpQuery-single/issues",
- "source": "https://github.com/jae-jae/phpQuery-single/tree/1.1.1"
- },
- "time": "2022-03-26T15:01:16+00:00"
- },
- {
- "name": "jaeger/querylist",
- "version": "V4.4.6",
- "source": {
- "type": "git",
- "url": "https://github.com/jae-jae/QueryList.git",
- "reference": "939f4e41b94b4d3ef77071fb7f386abd2ceeb59a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/jae-jae/QueryList/zipball/939f4e41b94b4d3ef77071fb7f386abd2ceeb59a",
- "reference": "939f4e41b94b4d3ef77071fb7f386abd2ceeb59a",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "jaeger/g-http": "^2.0",
- "jaeger/phpquery-single": "^1",
- "php": ">=8.1",
- "symfony/var-dumper": ">3.4"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/Collect/Support/helpers.php",
- "src/Collect/Support/alias.php"
- ],
- "psr-4": {
- "QL\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jaeger",
- "email": "JaegerCode@gmail.com"
- }
- ],
- "description": "Simple, elegant, extensible PHP Web Scraper (crawler/spider),Use the css3 dom selector,Based on phpQuery! 简洁、优雅、可扩展的PHP采集工具(爬虫),基于phpQuery。",
- "homepage": "http://querylist.cc",
- "keywords": [
- "QueryList",
- "phpQuery",
- "spider"
- ],
- "support": {
- "issues": "https://github.com/jae-jae/QueryList/issues",
- "source": "https://github.com/jae-jae/QueryList/tree/V4.4.6"
- },
- "funding": [
- {
- "url": "https://opencollective.com/querylist",
- "type": "open_collective"
- }
- ],
- "time": "2024-12-13T06:16:14+00:00"
- },
- {
- "name": "league/flysystem",
- "version": "1.1.10",
- "source": {
- "type": "git",
- "url": "https://github.com/thephpleague/flysystem.git",
- "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1",
- "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1",
- "shasum": ""
- },
- "require": {
- "ext-fileinfo": "*",
- "league/mime-type-detection": "^1.3",
- "php": "^7.2.5 || ^8.0"
- },
- "conflict": {
- "league/flysystem-sftp": "<1.0.6"
- },
- "require-dev": {
- "phpspec/prophecy": "^1.11.1",
- "phpunit/phpunit": "^8.5.8"
- },
- "suggest": {
- "ext-ftp": "Allows you to use FTP server storage",
- "ext-openssl": "Allows you to use FTPS server storage",
- "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
- "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
- "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
- "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
- "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
- "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
- "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
- "league/flysystem-webdav": "Allows you to use WebDAV storage",
- "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
- "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
- "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "League\\Flysystem\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Frank de Jonge",
- "email": "info@frenky.net"
- }
- ],
- "description": "Filesystem abstraction: Many filesystems, one API.",
- "keywords": [
- "Cloud Files",
- "WebDAV",
- "abstraction",
- "aws",
- "cloud",
- "copy.com",
- "dropbox",
- "file systems",
- "files",
- "filesystem",
- "filesystems",
- "ftp",
- "rackspace",
- "remote",
- "s3",
- "sftp",
- "storage"
- ],
- "support": {
- "issues": "https://github.com/thephpleague/flysystem/issues",
- "source": "https://github.com/thephpleague/flysystem/tree/1.1.10"
- },
- "funding": [
- {
- "url": "https://offset.earth/frankdejonge",
- "type": "other"
- }
- ],
- "time": "2022-10-04T09:16:37+00:00"
- },
- {
- "name": "league/flysystem-aws-s3-v3",
- "version": "1.0.30",
- "source": {
- "type": "git",
- "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
- "reference": "af286f291ebab6877bac0c359c6c2cb017eb061d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/af286f291ebab6877bac0c359c6c2cb017eb061d",
- "reference": "af286f291ebab6877bac0c359c6c2cb017eb061d",
- "shasum": ""
- },
- "require": {
- "aws/aws-sdk-php": "^3.20.0",
- "league/flysystem": "^1.0.40",
- "php": ">=5.5.0"
- },
- "require-dev": {
- "henrikbjorn/phpspec-code-coverage": "~1.0.1",
- "phpspec/phpspec": "^2.0.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "League\\Flysystem\\AwsS3v3\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Frank de Jonge",
- "email": "info@frenky.net"
- }
- ],
- "description": "Flysystem adapter for the AWS S3 SDK v3.x",
- "support": {
- "issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues",
- "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/1.0.30"
- },
- "funding": [
- {
- "url": "https://offset.earth/frankdejonge",
- "type": "custom"
- },
- {
- "url": "https://github.com/frankdejonge",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/league/flysystem",
- "type": "tidelift"
- }
- ],
- "time": "2022-07-02T13:51:38+00:00"
- },
- {
- "name": "league/flysystem-cached-adapter",
- "version": "1.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/thephpleague/flysystem-cached-adapter.git",
- "reference": "7bb5cd9d996904cf43d7da8ba45a724ff8c7ef14"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem-cached-adapter/zipball/7bb5cd9d996904cf43d7da8ba45a724ff8c7ef14",
- "reference": "7bb5cd9d996904cf43d7da8ba45a724ff8c7ef14",
- "shasum": ""
- },
- "require": {
- "league/flysystem": "~1.0"
- },
- "require-dev": {
- "henrikbjorn/phpspec-code-coverage": "~1.0@dev",
- "mockery/mockery": "~0.9",
- "phpspec/phpspec": "~2.1",
- "phpunit/phpunit": "~4.1",
- "predis/predis": "~1.0",
- "tedivm/stash": "~0.12"
- },
- "suggest": {
- "ext-phpredis": "Pure C implemented extension for PHP"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "League\\Flysystem\\Cached\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "frankdejonge",
- "email": "info@frenky.net"
- }
- ],
- "description": "An adapter decorator to enable meta-data caching.",
- "support": {
- "issues": "https://github.com/thephpleague/flysystem-cached-adapter/issues",
- "source": "https://github.com/thephpleague/flysystem-cached-adapter/tree/master"
- },
- "time": "2015-07-09T21:00:39+00:00"
- },
- {
- "name": "league/mime-type-detection",
- "version": "1.16.0",
- "source": {
- "type": "git",
- "url": "https://github.com/thephpleague/mime-type-detection.git",
- "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9",
- "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9",
- "shasum": ""
- },
- "require": {
- "ext-fileinfo": "*",
- "php": "^7.4 || ^8.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^3.2",
- "phpstan/phpstan": "^0.12.68",
- "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "League\\MimeTypeDetection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Frank de Jonge",
- "email": "info@frankdejonge.nl"
- }
- ],
- "description": "Mime-type detection for Flysystem",
- "support": {
- "issues": "https://github.com/thephpleague/mime-type-detection/issues",
- "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0"
- },
- "funding": [
- {
- "url": "https://github.com/frankdejonge",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/league/flysystem",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-21T08:32:55+00:00"
- },
- {
- "name": "maennchen/zipstream-php",
- "version": "3.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/maennchen/ZipStream-PHP.git",
- "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/aeadcf5c412332eb426c0f9b4485f6accba2a99f",
- "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f",
- "shasum": ""
- },
- "require": {
- "ext-mbstring": "*",
- "ext-zlib": "*",
- "php-64bit": "^8.2"
- },
- "require-dev": {
- "brianium/paratest": "^7.7",
- "ext-zip": "*",
- "friendsofphp/php-cs-fixer": "^3.16",
- "guzzlehttp/guzzle": "^7.5",
- "mikey179/vfsstream": "^1.6",
- "php-coveralls/php-coveralls": "^2.5",
- "phpunit/phpunit": "^11.0",
- "vimeo/psalm": "^6.0"
- },
- "suggest": {
- "guzzlehttp/psr7": "^2.4",
- "psr/http-message": "^2.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "ZipStream\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Paul Duncan",
- "email": "pabs@pablotron.org"
- },
- {
- "name": "Jonatan Männchen",
- "email": "jonatan@maennchen.ch"
- },
- {
- "name": "Jesse Donat",
- "email": "donatj@gmail.com"
- },
- {
- "name": "András Kolesár",
- "email": "kolesar@kolesar.hu"
- }
- ],
- "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.",
- "keywords": [
- "stream",
- "zip"
- ],
- "support": {
- "issues": "https://github.com/maennchen/ZipStream-PHP/issues",
- "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.2"
- },
- "funding": [
- {
- "url": "https://github.com/maennchen",
- "type": "github"
- }
- ],
- "time": "2025-01-27T12:07:53+00:00"
- },
- {
- "name": "markbaker/complex",
- "version": "3.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/MarkBaker/PHPComplex.git",
- "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9",
- "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "require-dev": {
- "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
- "phpcompatibility/php-compatibility": "^9.3",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
- "squizlabs/php_codesniffer": "^3.7"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Complex\\": "classes/src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mark Baker",
- "email": "mark@lange.demon.co.uk"
- }
- ],
- "description": "PHP Class for working with complex numbers",
- "homepage": "https://github.com/MarkBaker/PHPComplex",
- "keywords": [
- "complex",
- "mathematics"
- ],
- "support": {
- "issues": "https://github.com/MarkBaker/PHPComplex/issues",
- "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2"
- },
- "time": "2022-12-06T16:21:08+00:00"
- },
- {
- "name": "markbaker/matrix",
- "version": "3.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/MarkBaker/PHPMatrix.git",
- "reference": "728434227fe21be27ff6d86621a1b13107a2562c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c",
- "reference": "728434227fe21be27ff6d86621a1b13107a2562c",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
- "phpcompatibility/php-compatibility": "^9.3",
- "phpdocumentor/phpdocumentor": "2.*",
- "phploc/phploc": "^4.0",
- "phpmd/phpmd": "2.*",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
- "sebastian/phpcpd": "^4.0",
- "squizlabs/php_codesniffer": "^3.7"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Matrix\\": "classes/src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mark Baker",
- "email": "mark@demon-angel.eu"
- }
- ],
- "description": "PHP Class for working with matrices",
- "homepage": "https://github.com/MarkBaker/PHPMatrix",
- "keywords": [
- "mathematics",
- "matrix",
- "vector"
- ],
- "support": {
- "issues": "https://github.com/MarkBaker/PHPMatrix/issues",
- "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1"
- },
- "time": "2022-12-02T22:17:43+00:00"
- },
- {
- "name": "mtdowling/jmespath.php",
- "version": "2.8.0",
- "source": {
- "type": "git",
- "url": "https://github.com/jmespath/jmespath.php.git",
- "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
- "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
- "shasum": ""
- },
- "require": {
- "php": "^7.2.5 || ^8.0",
- "symfony/polyfill-mbstring": "^1.17"
- },
- "require-dev": {
- "composer/xdebug-handler": "^3.0.3",
- "phpunit/phpunit": "^8.5.33"
- },
- "bin": [
- "bin/jp.php"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.8-dev"
- }
- },
- "autoload": {
- "files": [
- "src/JmesPath.php"
- ],
- "psr-4": {
- "JmesPath\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- },
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- }
- ],
- "description": "Declaratively specify how to extract elements from a JSON document",
- "keywords": [
- "json",
- "jsonpath"
- ],
- "support": {
- "issues": "https://github.com/jmespath/jmespath.php/issues",
- "source": "https://github.com/jmespath/jmespath.php/tree/2.8.0"
- },
- "time": "2024-09-04T18:46:31+00:00"
- },
- {
- "name": "phpoffice/phpspreadsheet",
- "version": "4.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
- "reference": "6ff18c3a8df3a945492f75ce455d77f7ad55dd5c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/6ff18c3a8df3a945492f75ce455d77f7ad55dd5c",
- "reference": "6ff18c3a8df3a945492f75ce455d77f7ad55dd5c",
- "shasum": ""
- },
- "require": {
- "composer/pcre": "^1||^2||^3",
- "ext-ctype": "*",
- "ext-dom": "*",
- "ext-fileinfo": "*",
- "ext-gd": "*",
- "ext-iconv": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-simplexml": "*",
- "ext-xml": "*",
- "ext-xmlreader": "*",
- "ext-xmlwriter": "*",
- "ext-zip": "*",
- "ext-zlib": "*",
- "maennchen/zipstream-php": "^2.1 || ^3.0",
- "markbaker/complex": "^3.0",
- "markbaker/matrix": "^3.0",
- "php": "^8.1",
- "psr/http-client": "^1.0",
- "psr/http-factory": "^1.0",
- "psr/simple-cache": "^1.0 || ^2.0 || ^3.0"
- },
- "require-dev": {
- "dealerdirect/phpcodesniffer-composer-installer": "dev-main",
- "dompdf/dompdf": "^2.0 || ^3.0",
- "friendsofphp/php-cs-fixer": "^3.2",
- "mitoteam/jpgraph": "^10.3",
- "mpdf/mpdf": "^8.1.1",
- "phpcompatibility/php-compatibility": "^9.3",
- "phpstan/phpstan": "^1.1",
- "phpstan/phpstan-phpunit": "^1.0",
- "phpunit/phpunit": "^10.5",
- "squizlabs/php_codesniffer": "^3.7",
- "tecnickcom/tcpdf": "^6.5"
- },
- "suggest": {
- "dompdf/dompdf": "Option for rendering PDF with PDF Writer",
- "ext-intl": "PHP Internationalization Functions",
- "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers",
- "mpdf/mpdf": "Option for rendering PDF with PDF Writer",
- "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Maarten Balliauw",
- "homepage": "https://blog.maartenballiauw.be"
- },
- {
- "name": "Mark Baker",
- "homepage": "https://markbakeruk.net"
- },
- {
- "name": "Franck Lefevre",
- "homepage": "https://rootslabs.net"
- },
- {
- "name": "Erik Tilt"
- },
- {
- "name": "Adrien Crivelli"
- }
- ],
- "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
- "homepage": "https://github.com/PHPOffice/PhpSpreadsheet",
- "keywords": [
- "OpenXML",
- "excel",
- "gnumeric",
- "ods",
- "php",
- "spreadsheet",
- "xls",
- "xlsx"
- ],
- "support": {
- "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
- "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/4.1.0"
- },
- "time": "2025-03-02T06:52:24+00:00"
- },
- {
- "name": "psr/cache",
- "version": "3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/cache.git",
- "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
- "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Cache\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interface for caching libraries",
- "keywords": [
- "cache",
- "psr",
- "psr-6"
- ],
- "support": {
- "source": "https://github.com/php-fig/cache/tree/3.0.0"
- },
- "time": "2021-02-03T23:26:27+00:00"
- },
- {
- "name": "psr/container",
- "version": "2.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/container.git",
- "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
- "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
- "shasum": ""
- },
- "require": {
- "php": ">=7.4.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Container\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common Container Interface (PHP FIG PSR-11)",
- "homepage": "https://github.com/php-fig/container",
- "keywords": [
- "PSR-11",
- "container",
- "container-interface",
- "container-interop",
- "psr"
- ],
- "support": {
- "issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/2.0.2"
- },
- "time": "2021-11-05T16:47:00+00:00"
- },
- {
- "name": "psr/http-client",
- "version": "1.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-client.git",
- "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
- "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
- "shasum": ""
- },
- "require": {
- "php": "^7.0 || ^8.0",
- "psr/http-message": "^1.0 || ^2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Client\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interface for HTTP clients",
- "homepage": "https://github.com/php-fig/http-client",
- "keywords": [
- "http",
- "http-client",
- "psr",
- "psr-18"
- ],
- "support": {
- "source": "https://github.com/php-fig/http-client"
- },
- "time": "2023-09-23T14:17:50+00:00"
- },
- {
- "name": "psr/http-factory",
- "version": "1.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-factory.git",
- "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
- "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1",
- "psr/http-message": "^1.0 || ^2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Message\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
- "keywords": [
- "factory",
- "http",
- "message",
- "psr",
- "psr-17",
- "psr-7",
- "request",
- "response"
- ],
- "support": {
- "source": "https://github.com/php-fig/http-factory"
- },
- "time": "2024-04-15T12:06:14+00:00"
- },
- {
- "name": "psr/http-message",
- "version": "1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-message.git",
- "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
- "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Message\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interface for HTTP messages",
- "homepage": "https://github.com/php-fig/http-message",
- "keywords": [
- "http",
- "http-message",
- "psr",
- "psr-7",
- "request",
- "response"
- ],
- "support": {
- "source": "https://github.com/php-fig/http-message/tree/1.1"
- },
- "time": "2023-04-04T09:50:52+00:00"
- },
- {
- "name": "psr/log",
- "version": "3.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/log.git",
- "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
- "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Log\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interface for logging libraries",
- "homepage": "https://github.com/php-fig/log",
- "keywords": [
- "log",
- "psr",
- "psr-3"
- ],
- "support": {
- "source": "https://github.com/php-fig/log/tree/3.0.2"
- },
- "time": "2024-09-11T13:17:53+00:00"
- },
- {
- "name": "psr/simple-cache",
- "version": "3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/simple-cache.git",
- "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865",
- "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\SimpleCache\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interfaces for simple caching",
- "keywords": [
- "cache",
- "caching",
- "psr",
- "psr-16",
- "simple-cache"
- ],
- "support": {
- "source": "https://github.com/php-fig/simple-cache/tree/3.0.0"
- },
- "time": "2021-10-29T13:26:27+00:00"
- },
- {
- "name": "ralouphie/getallheaders",
- "version": "3.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/ralouphie/getallheaders.git",
- "reference": "120b605dfeb996808c31b6477290a714d356e822"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
- "reference": "120b605dfeb996808c31b6477290a714d356e822",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6"
- },
- "require-dev": {
- "php-coveralls/php-coveralls": "^2.1",
- "phpunit/phpunit": "^5 || ^6.5"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/getallheaders.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ralph Khattar",
- "email": "ralph.khattar@gmail.com"
- }
- ],
- "description": "A polyfill for getallheaders.",
- "support": {
- "issues": "https://github.com/ralouphie/getallheaders/issues",
- "source": "https://github.com/ralouphie/getallheaders/tree/develop"
- },
- "time": "2019-03-08T08:55:37+00:00"
- },
- {
- "name": "symfony/cache",
- "version": "v7.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/cache.git",
- "reference": "d33cd9e14326e14a4145c21e600602eaf17cc9e7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/cache/zipball/d33cd9e14326e14a4145c21e600602eaf17cc9e7",
- "reference": "d33cd9e14326e14a4145c21e600602eaf17cc9e7",
- "shasum": ""
- },
- "require": {
- "php": ">=8.2",
- "psr/cache": "^2.0|^3.0",
- "psr/log": "^1.1|^2|^3",
- "symfony/cache-contracts": "^2.5|^3",
- "symfony/deprecation-contracts": "^2.5|^3.0",
- "symfony/service-contracts": "^2.5|^3",
- "symfony/var-exporter": "^6.4|^7.0"
- },
- "conflict": {
- "doctrine/dbal": "<3.6",
- "symfony/dependency-injection": "<6.4",
- "symfony/http-kernel": "<6.4",
- "symfony/var-dumper": "<6.4"
- },
- "provide": {
- "psr/cache-implementation": "2.0|3.0",
- "psr/simple-cache-implementation": "1.0|2.0|3.0",
- "symfony/cache-implementation": "1.1|2.0|3.0"
- },
- "require-dev": {
- "cache/integration-tests": "dev-master",
- "doctrine/dbal": "^3.6|^4",
- "predis/predis": "^1.1|^2.0",
- "psr/simple-cache": "^1.0|^2.0|^3.0",
- "symfony/clock": "^6.4|^7.0",
- "symfony/config": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/filesystem": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/messenger": "^6.4|^7.0",
- "symfony/var-dumper": "^6.4|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Cache\\": ""
- },
- "classmap": [
- "Traits/ValueWrapper.php"
- ],
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides extended PSR-6, PSR-16 (and tags) implementations",
- "homepage": "https://symfony.com",
- "keywords": [
- "caching",
- "psr6"
- ],
- "support": {
- "source": "https://github.com/symfony/cache/tree/v7.2.4"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2025-02-26T09:57:54+00:00"
- },
- {
- "name": "symfony/cache-contracts",
- "version": "v3.5.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/cache-contracts.git",
- "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b",
- "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1",
- "psr/cache": "^3.0"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/contracts",
- "name": "symfony/contracts"
- },
- "branch-alias": {
- "dev-main": "3.5-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Cache\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to caching",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-25T14:20:29+00:00"
- },
- {
- "name": "symfony/deprecation-contracts",
- "version": "v3.5.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
- "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/contracts",
- "name": "symfony/contracts"
- },
- "branch-alias": {
- "dev-main": "3.5-dev"
- }
- },
- "autoload": {
- "files": [
- "function.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "A generic function and convention to trigger deprecation notices",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-25T14:20:29+00:00"
- },
- {
- "name": "symfony/polyfill-mbstring",
- "version": "v1.31.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
- "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "provide": {
- "ext-mbstring": "*"
- },
- "suggest": {
- "ext-mbstring": "For best performance"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for the Mbstring extension",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
- },
- {
- "name": "symfony/service-contracts",
- "version": "v3.5.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
- "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1",
- "psr/container": "^1.1|^2.0",
- "symfony/deprecation-contracts": "^2.5|^3"
- },
- "conflict": {
- "ext-psr": "<1.1|>=2"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/contracts",
- "name": "symfony/contracts"
- },
- "branch-alias": {
- "dev-main": "3.5-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Service\\": ""
- },
- "exclude-from-classmap": [
- "/Test/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to writing services",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.5.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-25T14:20:29+00:00"
- },
- {
- "name": "symfony/var-dumper",
- "version": "v7.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/var-dumper.git",
- "reference": "82b478c69745d8878eb60f9a049a4d584996f73a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/82b478c69745d8878eb60f9a049a4d584996f73a",
- "reference": "82b478c69745d8878eb60f9a049a4d584996f73a",
- "shasum": ""
- },
- "require": {
- "php": ">=8.2",
- "symfony/polyfill-mbstring": "~1.0"
- },
- "conflict": {
- "symfony/console": "<6.4"
- },
- "require-dev": {
- "ext-iconv": "*",
- "symfony/console": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/process": "^6.4|^7.0",
- "symfony/uid": "^6.4|^7.0",
- "twig/twig": "^3.12"
- },
- "bin": [
- "Resources/bin/var-dump-server"
- ],
- "type": "library",
- "autoload": {
- "files": [
- "Resources/functions/dump.php"
- ],
- "psr-4": {
- "Symfony\\Component\\VarDumper\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides mechanisms for walking through any arbitrary PHP variable",
- "homepage": "https://symfony.com",
- "keywords": [
- "debug",
- "dump"
- ],
- "support": {
- "source": "https://github.com/symfony/var-dumper/tree/v7.2.3"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2025-01-17T11:39:41+00:00"
- },
- {
- "name": "symfony/var-exporter",
- "version": "v7.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/var-exporter.git",
- "reference": "4ede73aa7a73d81506002d2caadbbdad1ef5b69a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/var-exporter/zipball/4ede73aa7a73d81506002d2caadbbdad1ef5b69a",
- "reference": "4ede73aa7a73d81506002d2caadbbdad1ef5b69a",
- "shasum": ""
- },
- "require": {
- "php": ">=8.2"
- },
- "require-dev": {
- "symfony/property-access": "^6.4|^7.0",
- "symfony/serializer": "^6.4|^7.0",
- "symfony/var-dumper": "^6.4|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\VarExporter\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Allows exporting any serializable PHP data structure to plain PHP code",
- "homepage": "https://symfony.com",
- "keywords": [
- "clone",
- "construct",
- "export",
- "hydrate",
- "instantiate",
- "lazy-loading",
- "proxy",
- "serialize"
- ],
- "support": {
- "source": "https://github.com/symfony/var-exporter/tree/v7.2.4"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2025-02-13T10:27:23+00:00"
- },
- {
- "name": "topthink/framework",
- "version": "v8.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/framework.git",
- "reference": "8faec5c9b7a7f2a66ca3140a57e81bd6cd37567c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/top-think/framework/zipball/8faec5c9b7a7f2a66ca3140a57e81bd6cd37567c",
- "reference": "8faec5c9b7a7f2a66ca3140a57e81bd6cd37567c",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "ext-json": "*",
- "ext-mbstring": "*",
- "php": ">=8.0.0",
- "psr/http-message": "^1.0",
- "psr/log": "^1.0|^2.0|^3.0",
- "psr/simple-cache": "^1.0|^2.0|^3.0",
- "topthink/think-container": "^3.0",
- "topthink/think-helper": "^3.1",
- "topthink/think-orm": "^3.0|^4.0",
- "topthink/think-validate": "^3.0"
- },
- "require-dev": {
- "guzzlehttp/psr7": "^2.1.0",
- "mikey179/vfsstream": "^1.6",
- "mockery/mockery": "^1.2",
- "phpunit/phpunit": "^9.5"
- },
- "type": "library",
- "autoload": {
- "files": [],
- "psr-4": {
- "think\\": "src/think/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "liu21st",
- "email": "liu21st@gmail.com"
- },
- {
- "name": "yunwuxin",
- "email": "448901948@qq.com"
- }
- ],
- "description": "The ThinkPHP Framework.",
- "homepage": "http://thinkphp.cn/",
- "keywords": [
- "framework",
- "orm",
- "thinkphp"
- ],
- "support": {
- "issues": "https://github.com/top-think/framework/issues",
- "source": "https://github.com/top-think/framework/tree/v8.1.2"
- },
- "time": "2025-01-14T08:04:03+00:00"
- },
- {
- "name": "topthink/think-container",
- "version": "v3.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/think-container.git",
- "reference": "a24d442a02fb2a4716de232ff1a4f006c178a370"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/top-think/think-container/zipball/a24d442a02fb2a4716de232ff1a4f006c178a370",
- "reference": "a24d442a02fb2a4716de232ff1a4f006c178a370",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "psr/container": "^2.0",
- "topthink/think-helper": "^3.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.5"
- },
- "type": "library",
- "autoload": {
- "files": [],
- "psr-4": {
- "think\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "liu21st",
- "email": "liu21st@gmail.com"
- }
- ],
- "description": "PHP Container & Facade Manager",
- "support": {
- "issues": "https://github.com/top-think/think-container/issues",
- "source": "https://github.com/top-think/think-container/tree/v3.0.1"
- },
- "time": "2025-01-07T08:19:23+00:00"
- },
- {
- "name": "topthink/think-filesystem",
- "version": "v2.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/think-filesystem.git",
- "reference": "e8e51adb9f3a3f3aac2aa3ef73b7b439100f777d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/top-think/think-filesystem/zipball/e8e51adb9f3a3f3aac2aa3ef73b7b439100f777d",
- "reference": "e8e51adb9f3a3f3aac2aa3ef73b7b439100f777d",
- "shasum": ""
- },
- "require": {
- "league/flysystem": "^1.1.4",
- "league/flysystem-cached-adapter": "^1.0",
- "php": ">=7.2.5",
- "topthink/framework": "^6.1|^8.0"
- },
- "require-dev": {
- "mikey179/vfsstream": "^1.6",
- "mockery/mockery": "^1.2",
- "phpunit/phpunit": "^8.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "think\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "yunwuxin",
- "email": "448901948@qq.com"
- }
- ],
- "description": "The ThinkPHP6.1 Filesystem Package",
- "support": {
- "issues": "https://github.com/top-think/think-filesystem/issues",
- "source": "https://github.com/top-think/think-filesystem/tree/v2.0.3"
- },
- "time": "2024-10-16T03:37:24+00:00"
- },
- {
- "name": "topthink/think-helper",
- "version": "v3.1.10",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/think-helper.git",
- "reference": "ac66cc0859a12cd5d73258f50f338aadc95e9b46"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/top-think/think-helper/zipball/ac66cc0859a12cd5d73258f50f338aadc95e9b46",
- "reference": "ac66cc0859a12cd5d73258f50f338aadc95e9b46",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.5"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/helper.php"
- ],
- "psr-4": {
- "think\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "yunwuxin",
- "email": "448901948@qq.com"
- }
- ],
- "description": "The ThinkPHP6 Helper Package",
- "support": {
- "issues": "https://github.com/top-think/think-helper/issues",
- "source": "https://github.com/top-think/think-helper/tree/v3.1.10"
- },
- "time": "2024-11-21T01:47:51+00:00"
- },
- {
- "name": "topthink/think-migration",
- "version": "v3.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/think-migration.git",
- "reference": "22c44058e1454f3af1d346e7f6524fbe654de7fb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/top-think/think-migration/zipball/22c44058e1454f3af1d346e7f6524fbe654de7fb",
- "reference": "22c44058e1454f3af1d346e7f6524fbe654de7fb",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2",
- "topthink/framework": "^6.0 || ^8.0",
- "topthink/think-helper": "^3.0.3"
- },
- "require-dev": {
- "composer/composer": "^2.5.8",
- "fzaninotto/faker": "^1.8",
- "robmorgan/phinx": "^0.13.4"
- },
- "suggest": {
- "fzaninotto/faker": "Required to use the factory builder (^1.8)."
- },
- "type": "library",
- "extra": {
- "think": {
- "services": [
- "think\\migration\\Service"
- ]
- }
- },
- "autoload": {
- "psr-4": {
- "Phinx\\": "phinx",
- "think\\migration\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "yunwuxin",
- "email": "448901948@qq.com"
- }
- ],
- "support": {
- "issues": "https://github.com/top-think/think-migration/issues",
- "source": "https://github.com/top-think/think-migration/tree/v3.1.1"
- },
- "time": "2023-09-14T05:51:31+00:00"
- },
- {
- "name": "topthink/think-multi-app",
- "version": "v1.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/think-multi-app.git",
- "reference": "f93c604d5cfac2b613756273224ee2f88e457b88"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/top-think/think-multi-app/zipball/f93c604d5cfac2b613756273224ee2f88e457b88",
- "reference": "f93c604d5cfac2b613756273224ee2f88e457b88",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1.0",
- "topthink/framework": "^6.0|^8.0"
- },
- "type": "library",
- "extra": {
- "think": {
- "services": [
- "think\\app\\Service"
- ]
- }
- },
- "autoload": {
- "psr-4": {
- "think\\app\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "liu21st",
- "email": "liu21st@gmail.com"
- }
- ],
- "description": "thinkphp multi app support",
- "support": {
- "issues": "https://github.com/top-think/think-multi-app/issues",
- "source": "https://github.com/top-think/think-multi-app/tree/v1.1.1"
- },
- "time": "2024-11-25T08:52:44+00:00"
- },
- {
- "name": "topthink/think-orm",
- "version": "v4.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/think-orm.git",
- "reference": "0c951d1eb08b48211d31079a616164e195028e44"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/top-think/think-orm/zipball/0c951d1eb08b48211d31079a616164e195028e44",
- "reference": "0c951d1eb08b48211d31079a616164e195028e44",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-pdo": "*",
- "php": ">=8.0.0",
- "psr/log": ">=1.0",
- "psr/simple-cache": ">=1.0",
- "topthink/think-helper": "^3.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.6|^10"
- },
- "suggest": {
- "ext-mongodb": "provide mongodb support"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/helper.php",
- "stubs/load_stubs.php"
- ],
- "psr-4": {
- "think\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "liu21st",
- "email": "liu21st@gmail.com"
- }
- ],
- "description": "the PHP Database&ORM Framework",
- "keywords": [
- "database",
- "orm"
- ],
- "support": {
- "issues": "https://github.com/top-think/think-orm/issues",
- "source": "https://github.com/top-think/think-orm/tree/v4.0.3"
- },
- "time": "2025-02-13T06:09:45+00:00"
- },
- {
- "name": "topthink/think-template",
- "version": "v3.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/think-template.git",
- "reference": "0b88bd449f0f7626dd75b05f557c8bc208c08b0c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/top-think/think-template/zipball/0b88bd449f0f7626dd75b05f557c8bc208c08b0c",
- "reference": "0b88bd449f0f7626dd75b05f557c8bc208c08b0c",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0.0",
- "psr/simple-cache": ">=1.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "think\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "liu21st",
- "email": "liu21st@gmail.com"
- }
- ],
- "description": "the php template engine",
- "support": {
- "issues": "https://github.com/top-think/think-template/issues",
- "source": "https://github.com/top-think/think-template/tree/v3.0.2"
- },
- "time": "2024-10-16T03:41:06+00:00"
- },
- {
- "name": "topthink/think-throttle",
- "version": "v2.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/think-throttle.git",
- "reference": "99c479adecad951d578e5d1703ce4a05b0ebc800"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/top-think/think-throttle/zipball/99c479adecad951d578e5d1703ce4a05b0ebc800",
- "reference": "99c479adecad951d578e5d1703ce4a05b0ebc800",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0.0",
- "topthink/framework": "^8.0"
- },
- "require-dev": {
- "guzzlehttp/guzzle": "^7.7",
- "phpunit/phpunit": "^9.5",
- "topthink/think": "^8.0.0"
- },
- "type": "library",
- "extra": {
- "think": {
- "config": {
- "throttle": "src/config.php"
- }
- }
- },
- "autoload": {
- "psr-4": {
- "think\\middleware\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "hongweipeng",
- "email": "hongweichen8888@sina.com"
- }
- ],
- "description": "throttle middleware for thinkphp8",
- "support": {
- "issues": "https://github.com/top-think/think-throttle/issues",
- "source": "https://github.com/top-think/think-throttle/tree/v2.0.2"
- },
- "time": "2024-04-15T10:33:30+00:00"
- },
- {
- "name": "topthink/think-validate",
- "version": "v3.0.5",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/think-validate.git",
- "reference": "f7dd85675270e9f8c0b04a13362133067629f53c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/top-think/think-validate/zipball/f7dd85675270e9f8c0b04a13362133067629f53c",
- "reference": "f7dd85675270e9f8c0b04a13362133067629f53c",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "topthink/think-container": ">=3.0"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/helper.php"
- ],
- "psr-4": {
- "think\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "liu21st",
- "email": "liu21st@gmail.com"
- }
- ],
- "description": "think validate",
- "support": {
- "issues": "https://github.com/top-think/think-validate/issues",
- "source": "https://github.com/top-think/think-validate/tree/v3.0.5"
- },
- "time": "2025-03-05T06:11:48+00:00"
- },
- {
- "name": "topthink/think-view",
- "version": "v2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/think-view.git",
- "reference": "e6a68e4179baf8d795700d62b710da86d7c3f783"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/top-think/think-view/zipball/e6a68e4179baf8d795700d62b710da86d7c3f783",
- "reference": "e6a68e4179baf8d795700d62b710da86d7c3f783",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0.0",
- "topthink/think-template": "^3.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "think\\view\\driver\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "liu21st",
- "email": "liu21st@gmail.com"
- }
- ],
- "description": "thinkphp template driver",
- "support": {
- "issues": "https://github.com/top-think/think-view/issues",
- "source": "https://github.com/top-think/think-view/tree/v2.0.4"
- },
- "time": "2025-01-10T08:49:57+00:00"
- }
- ],
- "packages-dev": [
- {
- "name": "mongodb/mongodb",
- "version": "1.21.1",
- "source": {
- "type": "git",
- "url": "https://github.com/mongodb/mongo-php-library.git",
- "reference": "37bc8df3a67ddf8380704a5ba5dbd00e92ec1f6a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/37bc8df3a67ddf8380704a5ba5dbd00e92ec1f6a",
- "reference": "37bc8df3a67ddf8380704a5ba5dbd00e92ec1f6a",
- "shasum": ""
- },
- "require": {
- "composer-runtime-api": "^2.0",
- "ext-mongodb": "^1.21.0",
- "php": "^8.1",
- "psr/log": "^1.1.4|^2|^3"
- },
- "replace": {
- "mongodb/builder": "*"
- },
- "require-dev": {
- "doctrine/coding-standard": "^12.0",
- "phpunit/phpunit": "^10.5.35",
- "rector/rector": "^1.2",
- "squizlabs/php_codesniffer": "^3.7",
- "vimeo/psalm": "6.5.*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "files": [
- "src/functions.php"
- ],
- "psr-4": {
- "MongoDB\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "Andreas Braun",
- "email": "andreas.braun@mongodb.com"
- },
- {
- "name": "Jeremy Mikola",
- "email": "jmikola@gmail.com"
- },
- {
- "name": "Jérôme Tamarelle",
- "email": "jerome.tamarelle@mongodb.com"
- }
- ],
- "description": "MongoDB driver library",
- "homepage": "https://jira.mongodb.org/browse/PHPLIB",
- "keywords": [
- "database",
- "driver",
- "mongodb",
- "persistence"
- ],
- "support": {
- "issues": "https://github.com/mongodb/mongo-php-library/issues",
- "source": "https://github.com/mongodb/mongo-php-library/tree/1.21.1"
- },
- "time": "2025-02-28T17:24:20+00:00"
- },
- {
- "name": "topthink/think-dumper",
- "version": "v1.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/think-dumper.git",
- "reference": "49e6975cec4ffe7997c05fc902f98f1ab1f54150"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/top-think/think-dumper/zipball/49e6975cec4ffe7997c05fc902f98f1ab1f54150",
- "reference": "49e6975cec4ffe7997c05fc902f98f1ab1f54150",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0.2",
- "symfony/var-dumper": ">=6.0",
- "topthink/framework": "^6.0|^8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^11.4"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/helper.php"
- ],
- "psr-4": {
- "think\\dumper\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "yunwuxin",
- "email": "448901948@qq.com"
- }
- ],
- "description": "Dumper extend for thinkphp",
- "support": {
- "issues": "https://github.com/top-think/think-dumper/issues",
- "source": "https://github.com/top-think/think-dumper/tree/v1.0.4"
- },
- "time": "2025-01-17T09:41:46+00:00"
- },
- {
- "name": "topthink/think-trace",
- "version": "v1.6",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/think-trace.git",
- "reference": "136cd5d97e8bdb780e4b5c1637c588ed7ca3e142"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/top-think/think-trace/zipball/136cd5d97e8bdb780e4b5c1637c588ed7ca3e142",
- "reference": "136cd5d97e8bdb780e4b5c1637c588ed7ca3e142",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1.0",
- "topthink/framework": "^6.0|^8.0"
- },
- "type": "library",
- "extra": {
- "think": {
- "config": {
- "trace": "src/config.php"
- },
- "services": [
- "think\\trace\\Service"
- ]
- }
- },
- "autoload": {
- "psr-4": {
- "think\\trace\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "liu21st",
- "email": "liu21st@gmail.com"
- }
- ],
- "description": "thinkphp debug trace",
- "support": {
- "issues": "https://github.com/top-think/think-trace/issues",
- "source": "https://github.com/top-think/think-trace/tree/v1.6"
- },
- "time": "2023-02-07T08:36:32+00:00"
- }
- ],
- "aliases": [],
- "minimum-stability": "stable",
- "stability-flags": {},
- "prefer-stable": false,
- "prefer-lowest": false,
- "platform": {
- "php": ">=8.0.0"
- },
- "platform-dev": {},
- "plugin-api-version": "2.6.0"
-}
diff --git a/code/config/app.php b/code/config/app.php
deleted file mode 100644
index d29d17e..0000000
--- a/code/config/app.php
+++ /dev/null
@@ -1,47 +0,0 @@
- '',
-
- // 是否启用路由
- 'with_route' => true,
-
- // 默认应用
- 'default_app' => 'home',
-
- // 默认时区
- 'default_timezone' => 'Asia/Shanghai',
-
- // 应用映射(自动多应用模式有效)
- 'app_map' => [
- 'admin' => 'admin'
- ],
-
-
- // 域名绑定(自动多应用模式有效)
- 'domain_bind' => [
- '*' => 'home',
- 'adapi' => 'admin',
- 'api' => 'api',
- ],
-
- // 禁止URL访问的应用列表(自动多应用模式有效)
- 'deny_app_list' => [
- 'task',
- 'model',
- 'services',
- ],
-
- // 异常页面的模板文件
- 'exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl',
-
- // 错误显示信息,非调试模式有效
- 'error_message' => '页面错误!请稍后再试~',
-
- // 显示错误信息
- 'show_error_msg' => env('SHOW_ERROR_MSG', false),
-];
diff --git a/code/config/cache.php b/code/config/cache.php
deleted file mode 100644
index cbec626..0000000
--- a/code/config/cache.php
+++ /dev/null
@@ -1,50 +0,0 @@
- env('CACHE_DRIVER', 'file'),
-
- 'cache_time' => env('CACHE_TIME', 60 * 60 * 3), // 缓存时间 3小时
-
- // 缓存连接方式配置
- 'stores' => [
- 'file' => [
- // 驱动方式
- 'type' => 'File',
- // 缓存保存目录
- 'path' => '',
- // 缓存前缀
- 'prefix' => '',
- // 缓存有效期 0表示永久缓存
- 'expire' => 0,
- // 缓存标签前缀
- 'tag_prefix' => 'tag:',
- // 序列化机制 例如 ['serialize', 'unserialize']
- 'serialize' => [],
- ],
- // 更多的缓存连接
-
- // redis缓存
- 'redis' => [
- // 驱动方式
- 'type' => 'redis',
- // 服务器地址
- 'host' => env('REDIS_HOST', '127.0.0.1'),
- // 端口
- 'port' => env('REDIS_PORT', '6379'),
- // 密码
- 'password' => env('REDIS_PASSWORD', ''),
- // 缓存前缀
- 'prefix' => env('REDIS_PREFIX', ''),
- // 缓存前缀
- 'database' => env('REDIS_DATABASE', 0),
-
- // 缓存标签前缀
- 'tag_prefix' => '',
- ],
- ],
-];
diff --git a/code/config/console.php b/code/config/console.php
deleted file mode 100644
index 10089f1..0000000
--- a/code/config/console.php
+++ /dev/null
@@ -1,17 +0,0 @@
- [
- 'task' => 'microserver\ServerConsole',
- 'db:manage' => 'db\DatabaseManage',
- 'mongo:manage' => 'db\MongoMigrate',
- 'novel:manage' => 'db\NovelManage',
- ],
-];
diff --git a/code/config/cookie.php b/code/config/cookie.php
deleted file mode 100644
index d3b3aab..0000000
--- a/code/config/cookie.php
+++ /dev/null
@@ -1,20 +0,0 @@
- 0,
- // cookie 保存路径
- 'path' => '/',
- // cookie 有效域名
- 'domain' => '',
- // cookie 启用安全传输
- 'secure' => false,
- // httponly设置
- 'httponly' => false,
- // 是否使用 setcookie
- 'setcookie' => true,
- // samesite 设置,支持 'strict' 'lax'
- 'samesite' => '',
-];
diff --git a/code/config/database.php b/code/config/database.php
deleted file mode 100644
index b3625ef..0000000
--- a/code/config/database.php
+++ /dev/null
@@ -1,64 +0,0 @@
- env('DB_DRIVER', 'mysql'),
-
- // 自定义时间查询规则
- 'time_query_rule' => [],
-
- // 自动写入时间戳字段
- // true为自动识别类型 false关闭
- // 字符串则明确指定时间字段类型 支持 int timestamp datetime date
- 'auto_timestamp' => true,
-
- // 时间字段取出后的默认时间格式
- 'datetime_format' => 'Y-m-d H:i:s',
-
- // 时间字段配置 配置格式:create_time,update_time
- 'datetime_field' => '',
-
- // 数据库连接配置信息
- 'connections' => [
- 'mysql' => [
- // 数据库类型
- 'type' => env('DB_TYPE', 'mysql'),
- // 服务器地址
- 'hostname' => env('DB_HOST', '127.0.0.1'),
- // 数据库名
- 'database' => env('DB_NAME', ''),
- // 用户名
- 'username' => env('DB_USER', 'root'),
- // 密码
- 'password' => env('DB_PASS', ''),
- // 端口
- 'hostport' => env('DB_PORT', '3306'),
- // 数据库连接参数
- 'params' => [],
- // 数据库编码
- 'charset' => env('DB_CHARSET', 'utf8mb4'),
- // 数据库表前缀
- 'prefix' => env('DB_PREFIX', ''),
-
- // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
- 'deploy' => 0,
- // 数据库读写是否分离 主从式有效
- 'rw_separate' => false,
- // 读写分离后 主服务器数量
- 'master_num' => 1,
- // 指定从服务器序号
- 'slave_no' => '',
- // 是否严格检查字段是否存在
- 'fields_strict' => true,
- // 是否需要断线重连
- 'break_reconnect' => false,
- // 监听SQL
- 'trigger_sql' => env('DB_SQL_DEBUG', false),
- // 开启字段缓存
- 'fields_cache' => env('DB_FIELD_CACHE', true),
- ],
-
- // 更多的数据库配置信息
-
- ],
-];
diff --git a/code/config/filesystem.php b/code/config/filesystem.php
deleted file mode 100644
index 582a8f8..0000000
--- a/code/config/filesystem.php
+++ /dev/null
@@ -1,24 +0,0 @@
- 'local',
- // 磁盘列表
- 'disks' => [
- 'local' => [
- 'type' => 'local',
- 'root' => app()->getRuntimePath() . 'storage',
- ],
- 'public' => [
- // 磁盘类型
- 'type' => 'local',
- // 磁盘路径
- 'root' => app()->getRootPath() . 'public/storage',
- // 磁盘路径对应的外部URL路径
- 'url' => '/storage',
- // 可见性
- 'visibility' => 'public',
- ],
- // 更多的磁盘配置信息
- ],
-];
diff --git a/code/config/lang.php b/code/config/lang.php
deleted file mode 100644
index ccad14a..0000000
--- a/code/config/lang.php
+++ /dev/null
@@ -1,29 +0,0 @@
- env('DEFAULT_LANG', 'zh-cn'),
- // 自动侦测浏览器语言
- 'auto_detect_browser' => true,
- // 允许的语言列表
- 'allow_lang_list' => [],
- // 多语言自动侦测变量名
- 'detect_var' => 'lang',
- // 是否使用Cookie记录
- 'use_cookie' => true,
- // 多语言cookie变量
- 'cookie_var' => 'think_lang',
- // 多语言header变量
- 'header_var' => 'think-lang',
- // 扩展语言包
- 'extend_list' => [],
- // Accept-Language转义为对应语言包名称
- 'accept_language' => [
- 'zh-hans-cn' => 'zh-cn',
- ],
- // 是否支持语言分组
- 'allow_group' => false,
-];
diff --git a/code/config/log.php b/code/config/log.php
deleted file mode 100644
index 0d406f8..0000000
--- a/code/config/log.php
+++ /dev/null
@@ -1,45 +0,0 @@
- 'file',
- // 日志记录级别
- 'level' => [],
- // 日志类型记录的通道 ['error'=>'email',...]
- 'type_channel' => [],
- // 关闭全局日志写入
- 'close' => false,
- // 全局日志处理 支持闭包
- 'processor' => null,
-
- // 日志通道列表
- 'channels' => [
- 'file' => [
- // 日志记录方式
- 'type' => 'File',
- // 日志保存目录
- 'path' => '',
- // 单文件日志写入
- 'single' => false,
- // 独立日志级别
- 'apart_level' => [],
- // 最大日志文件数量
- 'max_files' => 0,
- // 使用JSON格式记录
- 'json' => false,
- // 日志处理
- 'processor' => null,
- // 关闭通道日志写入
- 'close' => false,
- // 日志输出格式化
- 'format' => '[%s][%s] %s',
- // 是否实时写入
- 'realtime_write' => false,
- ],
- // 其它日志通道配置
- ],
-
-];
diff --git a/code/config/middleware.php b/code/config/middleware.php
deleted file mode 100644
index 7e1972f..0000000
--- a/code/config/middleware.php
+++ /dev/null
@@ -1,8 +0,0 @@
- [],
- // 优先级设置,此数组中的中间件会按照数组中的顺序优先执行
- 'priority' => [],
-];
diff --git a/code/config/mongodb.php b/code/config/mongodb.php
deleted file mode 100644
index 12a90f0..0000000
--- a/code/config/mongodb.php
+++ /dev/null
@@ -1,19 +0,0 @@
- env('MONGO_HOST', '127.0.0.1'),
-
- // 端口
- 'hostport' => env('MONGO_PORT', '3306'),
-
- // 用户名
- 'username' => env('MONGO_USER', 'root'),
-
- // 密码
- 'password' => env('MONGO_PASSWORD', ''),
-
- // 数据库名
- 'database' => env('MONGO_DB', ''),
-];
diff --git a/code/config/proxy.php b/code/config/proxy.php
deleted file mode 100644
index 483e797..0000000
--- a/code/config/proxy.php
+++ /dev/null
@@ -1,12 +0,0 @@
- env('PROXY_STATUS', false),
- 'proxy_code' => env('PROXY_CODE', ''),
- 'proxy_host' => env('PROXY_HOST', ''),
- 'proxy_key' => env('PROXY_KEY', ''),
- 'proxy_secret' => env('PROXY_SECRET', ''),
-];
diff --git a/code/config/route.php b/code/config/route.php
deleted file mode 100644
index 41ba1ed..0000000
--- a/code/config/route.php
+++ /dev/null
@@ -1,51 +0,0 @@
- '/',
- // 是否开启路由延迟解析
- 'url_lazy_route' => false,
- // 是否强制使用路由
- 'url_route_must' => false,
- // 是否区分大小写
- 'url_case_sensitive' => false,
- // 合并路由规则
- 'route_rule_merge' => false,
- // 路由是否完全匹配
- 'route_complete_match' => false,
- // 去除斜杠
- 'remove_slash' => false,
- // 默认的路由变量规则
- 'default_route_pattern' => '[\w\.]+',
- // URL伪静态后缀
- 'url_html_suffix' => 'html',
- // 访问控制器层名称
- 'controller_layer' => 'controller',
- // 空控制器名
- 'empty_controller' => 'Error',
- // 是否使用控制器后缀
- 'controller_suffix' => false,
- // 默认模块名(开启自动多模块有效)
- 'default_module' => 'index',
- // 默认控制器名
- 'default_controller' => 'Index',
- // 默认操作名
- 'default_action' => 'index',
- // 操作方法后缀
- 'action_suffix' => '',
- // 非路由变量是否使用普通参数方式(用于URL生成)
- 'url_common_param' => true,
- // 操作方法的参数绑定方式 route get param
- 'action_bind_param' => 'get',
- // 请求缓存规则 true为自动规则
- 'request_cache_key' => true,
- // 请求缓存有效期
- 'request_cache_expire' => null,
- // 全局请求缓存排除规则
- 'request_cache_except' => [],
- // 请求缓存的Tag
- 'request_cache_tag' => '',
-];
diff --git a/code/config/session.php b/code/config/session.php
deleted file mode 100644
index c1ef6e1..0000000
--- a/code/config/session.php
+++ /dev/null
@@ -1,19 +0,0 @@
- 'PHPSESSID',
- // SESSION_ID的提交变量,解决flash上传跨域
- 'var_session_id' => '',
- // 驱动方式 支持file cache
- 'type' => 'file',
- // 存储连接标识 当type使用cache的时候有效
- 'store' => null,
- // 过期时间
- 'expire' => 1440,
- // 前缀
- 'prefix' => '',
-];
diff --git a/code/config/storage.php b/code/config/storage.php
deleted file mode 100644
index 2b2973c..0000000
--- a/code/config/storage.php
+++ /dev/null
@@ -1,24 +0,0 @@
- [
- // 端点
- 'endpoint' => env('MINIO_END_POINT', '127.0.0.1:9000'),
- // KEY
- 'key' => env('MINIO_KEY', ''),
- // 密钥
- 'secret' => env('MINIO_SECRET', ''),
- // 区域
- 'region' => env('MINIO_REGION', 'us-east-1'),
- // 桶
- 'bucket' => env('MINIO_BUCKET', 'my-bucket'),
-
- ],
- 'local' => [
- 'dir' => env('STORAGE_LOCAL_DIR', ''),
- ]
-
-];
diff --git a/code/config/task.php b/code/config/task.php
deleted file mode 100644
index 7e45e0b..0000000
--- a/code/config/task.php
+++ /dev/null
@@ -1,68 +0,0 @@
- [
- 1 => [
- 'name' => env('QUEUE_NAME_1', 'QueueKey01'), // 消费队列名
- 'exec_num' => env('QUEUE_EXEC_NUM_1', 20), // 单进程消费任务数后重启
- ],
- 2 => [
- 'name' => env('QUEUE_NAME_2', 'QueueKey02'),
- 'exec_num' => env('QUEUE_EXEC_NUM_2', 20),
- ]
- ],
-
-
- # Server Config
- 'service' => [
- /***** 监听SOCK文件 *****/
-
- //'host'=>runtime_path().'task.sock',
- 'host' => sys_get_temp_dir() . '/task.sock',
- 'port' => 0,
- 'mode' => SWOOLE_BASE,
- 'sockType' => SWOOLE_UNIX_STREAM,
- 'server_type' => 'TCP',
- /***********************/
-
-
- 'worker_num' => 1,
- 'log_file' => runtime_path() . 'task.log',
- 'pid_file' => runtime_path() . 'task.pid',
- 'task_worker_num' => 0,
- ],
-
- # Process Pool, NUM 为设置的任务组进程数 , 根据自身服务器情况增减
- 'process_pool' => [
- # 采集任务进程组 队列消费者
- [
- 'Name' => 'Inner Consume',
- 'Num' => env('TASK_PROCESS_NUM_01', 4),
- 'callback' => [app\task\module\Listen::class, 'innerConsume'],
- ],
-
- # 内部循环任务进程组 优先队列消费者
- [
- 'Name' => 'Inner Consume',
- 'Num' => env('TASK_PROCESS_NUM_02', 2),
- 'callback' => [app\task\module\Listen::class, 'innerConsume02'],
- ],
- ],
-
- # 计划任务
- 'scheduled_tasks_pool' => [
- [
- // 扫描数据表计划任务
- 'status' => true,
- 'name' => 'Plan Task ',
- 'execution_interval' => 1,
- 'callback' => [\app\task\module\PlanTask::class, 'scanPlanTask'],
- 'param' => [],
- ],
- ],
-];
diff --git a/code/config/throttle.php b/code/config/throttle.php
deleted file mode 100644
index 575662e..0000000
--- a/code/config/throttle.php
+++ /dev/null
@@ -1,33 +0,0 @@
- 'throttle_',
- // 缓存的键,true 表示使用来源ip
- 'key' => true,
- // 要被限制的请求类型, eg: GET POST PUT DELETE HEAD 等
- 'visit_method' => ['GET', 'HEAD'],
- // 设置访问频率,例如 '10/m' 指的是允许每分钟请求10次;'10/60'指允许每60秒请求10次。值 null 表示不限制, eg: null 10/m 20/h 300/d 200/300
- 'visit_rate' => '100/m',
- /*
- * 设置节流算法,组件提供了四种算法:
- * - CounterFixed :计数固定窗口
- * - CounterSlider: 滑动窗口
- * - TokenBucket : 令牌桶算法
- * - LeakyBucket : 漏桶限流算法
- */
- 'driver_name' => CounterFixed::class,
- // 响应体中设置速率限制的头部信息
- 'visit_enable_show_rate_limit' => true,
- // 访问受限时返回的响应
- 'visit_fail_response' => function (Throttle $throttle, Request $request, int $wait_seconds) {
- return Response::create('Too many requests, try again after ' . $wait_seconds . ' seconds.')->code(429);
- },
-];
diff --git a/code/config/trace.php b/code/config/trace.php
deleted file mode 100644
index fad2392..0000000
--- a/code/config/trace.php
+++ /dev/null
@@ -1,10 +0,0 @@
- 'Html',
- // 读取的日志通道名
- 'channel' => '',
-];
diff --git a/code/config/view.php b/code/config/view.php
deleted file mode 100644
index 2bdee2f..0000000
--- a/code/config/view.php
+++ /dev/null
@@ -1,40 +0,0 @@
- 'Think',
- // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 3 保持操作方法
- 'auto_rule' => 1,
- // 模板目录名
- 'view_dir_name' => 'view',
- // 模板后缀
- 'view_suffix' => 'html',
- // 模板文件名分隔符
- 'view_depr' => DIRECTORY_SEPARATOR,
- // 允许 PHP 函数调用
- 'tpl_deny_php' => false,
- // 模板引擎普通标签开始标记
- 'tpl_begin' => '{',
- // 模板引擎普通标签结束标记
- 'tpl_end' => '}',
- // 标签库标签开始标记
- 'taglib_begin' => '{',
- // 标签库标签结束标记
- 'taglib_end' => '}',
-
-
- // 自定义标签
- 'taglib_pre_load' => '\\template\\taglib\\Ad,\\template\\taglib\\Site,\\template\\taglib\\Rs,\\template\\taglib\\Novel,\\template\\taglib\\Chapter',
-
- // 模板渲染缓存
- 'display_cache' => env('VIEW_DISPLAY_CACHE', false),
-
- // 是否开启模板编译缓存,设为false则每次都会重新编译
- 'tpl_cache' => env('VIEW_TPL_CACHE', false),
-
- //页面数据缓存,实际是控制器数据缓存
- 'view_data_cache' => env('VIEW_DATA_CACHE', false),
-];
diff --git a/code/database/migrations/20240717191901_add_gg_pai_xu_colum_on_guang_gao_table.php b/code/database/migrations/20240717191901_add_gg_pai_xu_colum_on_guang_gao_table.php
deleted file mode 100644
index 5c7b011..0000000
--- a/code/database/migrations/20240717191901_add_gg_pai_xu_colum_on_guang_gao_table.php
+++ /dev/null
@@ -1,20 +0,0 @@
-table('guang_gao');
-
- // $Table->addColumn('gg_sort', 'integer', ['after' => 'gg_tiao_zhuan_di_zhi'])->setComment("排序")->save();
- }
-
- public function down()
- {
- // $Table = $this->table('guang_gao');
- // $Table->removeColumn('gg_sort')->save();
- }
-}
diff --git a/code/database/mongo/migrations/category.php b/code/database/mongo/migrations/category.php
deleted file mode 100644
index ed64e88..0000000
--- a/code/database/mongo/migrations/category.php
+++ /dev/null
@@ -1,10 +0,0 @@
- 'category',
- 'indexes' => [
- [
- 'key' => ['ca_name' => 1],
- 'options' => ['unique' => true]
- ],
- ]
-];
diff --git a/code/database/mongo/migrations/chapter.php b/code/database/mongo/migrations/chapter.php
deleted file mode 100644
index 7eb1d0e..0000000
--- a/code/database/mongo/migrations/chapter.php
+++ /dev/null
@@ -1,23 +0,0 @@
- 'chapter',
- 'indexes' => [
- [
- 'key' => ['c_source_uuid' => 1],
- 'options' => ['unique' => true]
- ],
-
- [
- 'key' => ['n_id' => 1],
- 'options' => ['unique' => false]
- ],
- [
- 'key' => ['c_sort_num' => 1],
- 'options' => ['unique' => false]
- ],
- [
- 'key' => ['c_page' => 1],
- 'options' => ['unique' => false]
- ],
- ]
-];
diff --git a/code/database/mongo/migrations/config_subject_fomart.php b/code/database/mongo/migrations/config_subject_fomart.php
deleted file mode 100644
index 2277de8..0000000
--- a/code/database/mongo/migrations/config_subject_fomart.php
+++ /dev/null
@@ -1,10 +0,0 @@
- 'config_subject_fomart',
- 'indexes' => [
- [
- 'key' => ['csf_key' => 1],
- 'options' => ['unique' => true]
- ],
- ]
-];
diff --git a/code/database/mongo/migrations/gan_rao_ma.php b/code/database/mongo/migrations/gan_rao_ma.php
deleted file mode 100644
index f8daf59..0000000
--- a/code/database/mongo/migrations/gan_rao_ma.php
+++ /dev/null
@@ -1,10 +0,0 @@
- 'gan_rao_ma',
- 'indexes' => [
- [
- 'key' => ['grm_domain' => 1, 'grm_page_code' => 1, 'grm_page_diff' => 1],
- 'options' => ['unique' => true]
- ],
- ]
-];
diff --git a/code/database/mongo/migrations/novel.php b/code/database/mongo/migrations/novel.php
deleted file mode 100644
index ae80f92..0000000
--- a/code/database/mongo/migrations/novel.php
+++ /dev/null
@@ -1,50 +0,0 @@
- 'novel',
- 'indexes' => [
- [
- 'key' => ['n_id' => 1],
- 'options' => ['unique' => true]
- ],
- [
- 'key' => ['n_name' => 1],
- 'options' => ['unique' => false]
- ],
- [
- 'key' => ['n_author' => 1],
- 'options' => ['unique' => false]
- ],
- [
- 'key' => ['n_description' => 1],
- 'options' => ['unique' => false]
- ],
- [
- 'key' => ['n_category' => 1],
- 'options' => ['unique' => false]
- ],
- [
- 'key' => ['n_category_sex_en' => 1],
- 'options' => ['unique' => false]
- ],
- [
- 'key' => ['n_status' => 1],
- 'options' => ['unique' => false]
- ],
- [
- 'key' => ['n_source_uuid' => 1],
- 'options' => ['unique' => true]
- ],
- [
- 'key' => ['n_related_novel.n_id' => 1],
- 'options' => ['unique' => false]
- ],
- [
- 'key' => ['n_forge_novel.n_forge_id' => 1],
- 'options' => ['unique' => false]
- ],
- [
- 'key' => ['n_have_chapter' => 1],
- 'options' => ['unique' => false]
- ],
- ]
-];
diff --git a/code/database/mongo/migrations/novel_clicks.php b/code/database/mongo/migrations/novel_clicks.php
deleted file mode 100644
index 66665a7..0000000
--- a/code/database/mongo/migrations/novel_clicks.php
+++ /dev/null
@@ -1,10 +0,0 @@
- 'novel_clicks',
- 'indexes' => [
- [
- 'key' => ['n_id' => 1, 'nc_date' => 1, 'nc_type' => 1],
- 'options' => ['unique' => true]
- ],
- ]
-];
diff --git a/code/database/schema/mysql-schema.dump b/code/database/schema/mysql-schema.dump
deleted file mode 100644
index 4d712f0..0000000
--- a/code/database/schema/mysql-schema.dump
+++ /dev/null
@@ -1,274 +0,0 @@
--- MySQL dump 10.13 Distrib 8.0.41, for Linux (x86_64)
---
--- Host: 127.0.0.1 Database: seo
--- ------------------------------------------------------
--- Server version 8.0.41
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!50503 SET NAMES utf8mb4 */;
-/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
-/*!40103 SET TIME_ZONE='+00:00' */;
-/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
-/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
-/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
-/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-
---
--- Table structure for table `admin_user`
---
-
-DROP TABLE IF EXISTS `admin_user`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `admin_user` (
- `au_id` int unsigned NOT NULL AUTO_INCREMENT,
- `au_status` tinyint DEFAULT '0',
- `au_name` varchar(255) DEFAULT NULL,
- `au_pwd` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
- `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
- `updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
- `deleted_at` timestamp NULL DEFAULT NULL,
- PRIMARY KEY (`au_id`),
- UNIQUE KEY `au_name` (`au_name`)
-) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `cai_ji_pei_zhi`
---
-
-DROP TABLE IF EXISTS `cai_ji_pei_zhi`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `cai_ji_pei_zhi` (
- `cjpz_id` int unsigned NOT NULL AUTO_INCREMENT,
- `cjpz_code` varchar(255) DEFAULT NULL,
- `cjpz_val` text,
- `cjpz_description` varchar(255) DEFAULT NULL,
- PRIMARY KEY (`cjpz_id`),
- KEY `cjpz_code` (`cjpz_code`)
-) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `domain`
---
-
-DROP TABLE IF EXISTS `domain`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `domain` (
- `d_id` int NOT NULL AUTO_INCREMENT COMMENT '域名ID',
- `d_domain` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '域名',
- `t_id` int DEFAULT NULL COMMENT '模板ID',
- `d_name` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '站点名',
- `d_keywords` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '站点关键词',
- `d_description` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '站点描述',
- `d_index_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '首页title模板',
- `d_index_keywords` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '首页keywords模板',
- `d_index_description` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '首页description模板',
- `d_statis` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '单域名统计',
- `d_logo_type` tinyint(1) DEFAULT NULL,
- `d_text_logo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
- `d_img_logo` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
- `d_content_encode` tinyint unsigned DEFAULT '0',
- `t_cfg` json DEFAULT NULL,
- `info_id` int DEFAULT '0' COMMENT '详情id',
- PRIMARY KEY (`d_id`),
- UNIQUE KEY `d_domain` (`d_domain`) USING BTREE,
- KEY `t_id` (`t_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='域名表';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `guang_gao`
---
-
-DROP TABLE IF EXISTS `guang_gao`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `guang_gao` (
- `gg_id` int unsigned NOT NULL AUTO_INCREMENT,
- `ggfz_id` int DEFAULT NULL,
- `gg_lei_xing` tinyint DEFAULT NULL,
- `gg_tu_pian` varchar(500) DEFAULT NULL,
- `gg_wen_zi` varchar(500) DEFAULT NULL,
- `gg_tiao_zhuan_di_zhi` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
- `gg_status` int DEFAULT '0',
- `gg_sort` int DEFAULT NULL,
- `site_id` int DEFAULT '1' COMMENT '站点ID',
- PRIMARY KEY (`gg_id`),
- KEY `ggfz_id` (`ggfz_id`),
- KEY `site_id` (`site_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `guang_gao_fen_zu`
---
-
-DROP TABLE IF EXISTS `guang_gao_fen_zu`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `guang_gao_fen_zu` (
- `ggfz_id` int unsigned NOT NULL AUTO_INCREMENT,
- `ggfz_code` varchar(255) DEFAULT NULL,
- `ggfz_name` varchar(255) DEFAULT NULL,
- `site_id` int DEFAULT '1' COMMENT '站点ID',
- PRIMARY KEY (`ggfz_id`),
- UNIQUE KEY `ggfz_code` (`ggfz_code`) USING BTREE,
- KEY `site_id` (`site_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `guang_gao_pei_zhi`
---
-
-DROP TABLE IF EXISTS `guang_gao_pei_zhi`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `guang_gao_pei_zhi` (
- `ggpz_id` int unsigned NOT NULL AUTO_INCREMENT,
- `ggpz_code` varchar(255) DEFAULT NULL,
- `ggpz_val` text,
- `ggpz_description` varchar(255) DEFAULT NULL,
- `site_id` int DEFAULT '1' COMMENT '站点ID',
- PRIMARY KEY (`ggpz_id`),
- KEY `ggpz_code` (`ggpz_code`),
- KEY `site_id` (`site_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `migrations`
---
-
-DROP TABLE IF EXISTS `migrations`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `migrations` (
- `version` bigint NOT NULL,
- `migration_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
- `start_time` timestamp NULL DEFAULT NULL,
- `end_time` timestamp NULL DEFAULT NULL,
- `breakpoint` tinyint(1) NOT NULL DEFAULT '0',
- PRIMARY KEY (`version`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `plan_task`
---
-
-DROP TABLE IF EXISTS `plan_task`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `plan_task` (
- `pt_id` int unsigned NOT NULL AUTO_INCREMENT,
- `pt_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
- `pt_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
- `pt_enable` tinyint unsigned NOT NULL DEFAULT '1',
- `pt_limit` int unsigned NOT NULL DEFAULT '0',
- `pt_last_exec` int unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`pt_id`) USING BTREE,
- KEY `pt_code` (`pt_code`) USING BTREE,
- KEY `pt_enable` (`pt_enable`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `subject_fomart`
---
-
-DROP TABLE IF EXISTS `subject_fomart`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `subject_fomart` (
- `sf_id` int unsigned NOT NULL AUTO_INCREMENT,
- `sfg_id` int DEFAULT NULL COMMENT '所属格式化分组ID',
- `sf_val` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '待格式化内容',
- PRIMARY KEY (`sf_id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=2468 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `subject_fomart_group`
---
-
-DROP TABLE IF EXISTS `subject_fomart_group`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `subject_fomart_group` (
- `sfg_id` int unsigned NOT NULL AUTO_INCREMENT,
- `sfg_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
- `sfg_description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
- PRIMARY KEY (`sfg_id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `system_config`
---
-
-DROP TABLE IF EXISTS `system_config`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `system_config` (
- `sc_id` int unsigned NOT NULL AUTO_INCREMENT,
- `sc_code` varchar(255) DEFAULT NULL,
- `sc_val` text,
- `sc_description` text,
- `site_id` int DEFAULT '1' COMMENT '站点ID',
- PRIMARY KEY (`sc_id`),
- KEY `site_id` (`site_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `templates`
---
-
-DROP TABLE IF EXISTS `templates`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `templates` (
- `t_id` int NOT NULL AUTO_INCREMENT COMMENT '视图模板ID',
- `t_default` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否默认模板',
- `t_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '模板编码',
- `t_path` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '模板位置',
- `t_cfg_template` json DEFAULT NULL COMMENT '模板需要配置的变量',
- PRIMARY KEY (`t_id`),
- KEY `t_code` (`t_code`)
-) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='模板表';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `zi_yuan_duan_dian`
---
-
-DROP TABLE IF EXISTS `zi_yuan_duan_dian`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `zi_yuan_duan_dian` (
- `zydd_id` int unsigned NOT NULL AUTO_INCREMENT,
- `zydd_ming_zi` varchar(255) DEFAULT NULL,
- `zydd_code` varchar(255) DEFAULT NULL,
- `zydd_domain` varchar(255) DEFAULT NULL,
- PRIMARY KEY (`zydd_id`),
- KEY `zydd_code` (`zydd_code`)
-) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
-
-/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
-/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
-/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
-/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-
--- Dump completed on 2025-04-21 15:51:05
diff --git a/code/database/seeders/AdminUserSeeder.php b/code/database/seeders/AdminUserSeeder.php
deleted file mode 100644
index eabe3ef..0000000
--- a/code/database/seeders/AdminUserSeeder.php
+++ /dev/null
@@ -1,20 +0,0 @@
-find();
-
- if (empty($AdminUserModel)) {
- AdminUserModel::insert([
- 'au_name' => 'admin',
- 'au_pwd' => md5('qq123123'),
- ]);
- }
- }
-}
diff --git a/code/database/seeders/PlanTaskSeeder.php b/code/database/seeders/PlanTaskSeeder.php
deleted file mode 100644
index 666f9d8..0000000
--- a/code/database/seeders/PlanTaskSeeder.php
+++ /dev/null
@@ -1,65 +0,0 @@
- '630小说全量扫描',
- 'pt_code' => 'PULL_630_ZW_NOVEL',
- 'pt_enable' => 0,
- 'pt_limit' => 10 * 24 * 3600 * 3,
- ],
- [
- 'pt_name' => '630小说每日增量',
- 'pt_code' => 'PULL_630_ZW_NOVEL_LATEST',
- 'pt_enable' => 0,
- 'pt_limit' => 1 * 24 * 3600,
- ],
-
-
-
- [
- 'pt_name' => '74小说全量扫描',
- 'pt_code' => 'PULL_74_ZW_NOVEL',
- 'pt_enable' => 0,
- 'pt_limit' => 10 * 24 * 3600 * 3,
- ],
- [
- 'pt_name' => '74小说每日增量',
- 'pt_code' => 'PULL_74_ZW_NOVEL_LATEST',
- 'pt_enable' => 0,
- 'pt_limit' => 1 * 24 * 3600,
- ],
-
-
- [
- 'pt_name' => '优质资源库全量采集',
- 'pt_code' => 'PULL_YOU_ZHI_SHI_PIN',
- 'pt_enable' => 0,
- 'pt_limit' => 1 * 24 * 3600,
- ],
- ];
-
- foreach ($arrDataNovel as $arrPlanTask) {
- $NovelOnePlanTaskModel = PlanTaskModel::where('pt_code', $arrPlanTask['pt_code'])->find();
-
- if (empty($NovelOnePlanTaskModel)) {
- PlanTaskModel::insert($arrPlanTask);
- }
- }
- }
-}
diff --git a/code/database/seeders/SeedManager.php b/code/database/seeders/SeedManager.php
deleted file mode 100644
index 71cb80d..0000000
--- a/code/database/seeders/SeedManager.php
+++ /dev/null
@@ -1,15 +0,0 @@
- 'YOU_XIANG',
- 'sc_val' => 'TEST@USA.COM',
- 'sc_description' => '邮箱',
- ],
- [
- 'sc_code' => 'LIAN_XI_FANG_SHI',
- 'sc_val' => '@111111',
- 'sc_description' => '联系方式',
- ],
- [
- 'sc_code' => 'STATIC_FILE_VERSION',
- 'sc_val' => time(),
- 'sc_description' => '静态文件版本号',
- ],
- [
- 'sc_code' => 'SHARE_DOMAIN',
- 'sc_val' => "https://share.com",
- 'sc_description' => '分享域名',
- ],
- [
- 'sc_code' => 'PUSH_API_DOMAIN',
- 'sc_val' => "api.test.com",
- 'sc_description' => 'api',
- ],
- [
- 'sc_code' => 'PUBLIC_TONGJI_CODE',
- 'sc_val' => "",
- 'sc_description' => '全局刚刚统计代码',
- ],
-
- ];
-
- foreach ($arrData as $arrSystemConfig) {
- $SystemConfigModel = SystemConfigModel::where('sc_code', $arrSystemConfig['sc_code'])->find();
-
- if (empty($SystemConfigModel)) {
- SystemConfigModel::insert($arrSystemConfig);
- }
- }
-
- SystemConfigModel::flushCache();
-
-
- $arrCaiJiPeiZhiData = [
-
- [
- 'cjpz_code' => 'AILISI_DOMAIN',
- 'cjpz_val' => 'https://www.123yqw.com',
- 'cjpz_description' => '123小说主站域名',
- ],
- [
- 'cjpz_code' => 'AILISI_COOKIE',
- 'cjpz_val' => 'fontFamily=null; fontColor=null; fontSize=null; bg=null; HstCfa4825157=1719515765978; HstCmu4825157=1719515765978; HstCnv4825157=1; __dtsu=104017181364393C07A241A233B7F357; lf_reader_num_33724=2; lf_reader_num_32663=7; PHPSESSID=rd7eervf3m5hsq6629va4ki0l6; lf_user_auth=think%3A%7B%22uid%22%3A%2263234%22%2C%22username%22%3A%22fuckusa%22%7D; lf_user_auth_sign=a72a7c954fed581c73cddc462847ff817c282a85; lf_user_recommend=1719516174; reader_config_web=0%7C18%7C1%7C0%7C1; lf_read_log=think%3A%7B%2232162%22%3A%2233724%257C5339f996a809d%257C1719515981%22%2C%2231743%22%3A%2232663%257C5d31940dbd7b3%257C1719516204%22%2C%2232083%22%3A%2233098%257Cf826dc7bf1eba%257C1719516318%22%2C%2230460%22%3A%2231268%257Ce18a0ef2441a3%257C1719516591%22%7D; lf___forward__=%2F; HstCns4825157=2; HstCla4825157=1719517404420; HstPn4825157=26; HstPt4825157=26',
- 'cjpz_description' => '小说主站登录COOKIE',
- ],
- [
- 'cjpz_code' => 'TIANLAI_DOMAIN',
- 'cjpz_val' => 'https://www.tzkczc.com',
- 'cjpz_description' => '天籁小说主站域名',
- ],
- [
- 'cjpz_code' => 'TIANLAI_COOKIE',
- 'cjpz_val' => 'fontFamily=null; fontColor=null; fontSize=null; bg=null; HstCfa4825157=1719515765978; HstCmu4825157=1719515765978; HstCnv4825157=1; __dtsu=104017181364393C07A241A233B7F357; lf_reader_num_33724=2; lf_reader_num_32663=7; PHPSESSID=rd7eervf3m5hsq6629va4ki0l6; lf_user_auth=think%3A%7B%22uid%22%3A%2263234%22%2C%22username%22%3A%22fuckusa%22%7D; lf_user_auth_sign=a72a7c954fed581c73cddc462847ff817c282a85; lf_user_recommend=1719516174; reader_config_web=0%7C18%7C1%7C0%7C1; lf_read_log=think%3A%7B%2232162%22%3A%2233724%257C5339f996a809d%257C1719515981%22%2C%2231743%22%3A%2232663%257C5d31940dbd7b3%257C1719516204%22%2C%2232083%22%3A%2233098%257Cf826dc7bf1eba%257C1719516318%22%2C%2230460%22%3A%2231268%257Ce18a0ef2441a3%257C1719516591%22%7D; lf___forward__=%2F; HstCns4825157=2; HstCla4825157=1719517404420; HstPn4825157=26; HstPt4825157=26',
- 'cjpz_description' => '天籁小说主站登录COOKIE',
- ],
- [
- 'cjpz_code' => 'BIQUXS_DOMAIN',
- 'cjpz_val' => 'http://www.biquxs.com',
- 'cjpz_description' => '笔趣阁biquxs小说主站域名',
- ],
- [
- 'cjpz_code' => '5CCC_DOMAIN',
- 'cjpz_val' => 'https://www.5ccc.org',
- 'cjpz_description' => '笔趣阁5ccc小说主站域名',
- ],
- [
- 'cjpz_code' => '630zw_DOMAIN',
- 'cjpz_val' => 'https://630zw.org',
- 'cjpz_description' => '笔趣阁630zw.org小说主站域名',
- ],
- [
- 'cjpz_code' => 'HEIMUER_DOMAIN',
- 'cjpz_val' => 'https://json02.heimuer.xyz',
- 'cjpz_description' => '黑木耳资源主站域名',
- ],
- [
- 'cjpz_code' => 'YZZY_DOMAIN',
- 'cjpz_val' => 'https://1080zyk1.com',
- 'cjpz_description' => '优质资源主站域名',
- ]
- ];
-
- foreach ($arrCaiJiPeiZhiData as $arrCaiJiPeiZhi) {
- $CaiJiPeiZhiModel = CaiJiPeiZhiModel::where('cjpz_code', $arrCaiJiPeiZhi['cjpz_code'])->find();
-
- if (empty($CaiJiPeiZhiModel)) {
- CaiJiPeiZhiModel::insert($arrCaiJiPeiZhi);
- }
- }
-
- CaiJiPeiZhiModel::flushCache();
-
- }
-}
diff --git a/code/database/seeders/TemplateSeeder.php b/code/database/seeders/TemplateSeeder.php
deleted file mode 100644
index f478254..0000000
--- a/code/database/seeders/TemplateSeeder.php
+++ /dev/null
@@ -1,540 +0,0 @@
- [
- 'description' => '首页Title 模板分组',
- 'sfg_id' => 1,
- 'arrSubjectFomart' => [
- '{strIndexTitle}',
- ]
- ],
- 'INDEX@INDEX@KEYWORDS' => [
- 'description' => '首页Keywords 模板分组',
- 'sfg_id' => 2,
- 'arrSubjectFomart' => [
- '{strIndexKeywords}',
- ]
- ],
- 'INDEX@INDEX@DESCRIPTION' => [
- 'description' => '首页Description 模板分组',
- 'sfg_id' => 3,
- 'arrSubjectFomart' => [
- '{strIndexDescription}',
- ]
- ],
-
- 'NOVEL@GETLIBRARY@TITLE' => [
- 'description' => '分类书库Title 模板分组',
- 'sfg_id' => 4,
- 'arrSubjectFomart' => [
- '{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页',
- ]
- ],
- 'NOVEL@GETLIBRARY@KEYWORDS' => [
- 'description' => '分类书库Keywords 模板分组',
- 'sfg_id' => 5,
- 'arrSubjectFomart' => [
- '{strNovelCategoryName}小说, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费小说, 在线阅读',
- ]
- ],
- 'NOVEL@GETLIBRARY@DESCRIPTION' => [
- 'description' => '分类书库Description 模板分组',
- 'sfg_id' => 6,
- 'arrSubjectFomart' => [
- '{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费在线阅读,第{intPage}页精选热门作品,畅享{strSiteDomain}!',
- ]
- ],
-
- 'NOVEL@GETNOVELCHANNEL@TITLE' => [
- 'description' => '男女生Title 模板分组',
- 'sfg_id' => 7,
- 'arrSubjectFomart' => [
- '{strNovelSex}小说 - {strSiteName} - 免费阅读 - 第{intPage}页',
- ]
- ],
- 'NOVEL@GETNOVELCHANNEL@KEYWORDS' => [
- 'description' => '男女生Keywords 模板分组',
- 'sfg_id' => 8,
- 'arrSubjectFomart' => [
- '{strNovelSex}小说 - {strSiteKeywords} - 免费阅读 - 第{intPage}页',
- ]
- ],
- 'NOVEL@GETNOVELCHANNEL@DESCRIPTION' => [
- 'description' => '男女生Description 模板分组',
- 'sfg_id' => 9,
- 'arrSubjectFomart' => [
- '{strNovelSex}小说 - {strSiteName} - 免费阅读 - 第{intPage}页',
- ]
- ],
-
- 'NOVEL@GETNOVELINFO@TITLE' => [
- 'description' => '详情Title 模板分组',
- 'sfg_id' => 10,
- 'arrSubjectFomart' => [
- '{strNovelName} - {strNovelAuthor}- {strNovelCategoryName} - 免费在线阅读 - {strSiteName}',
- ]
-
- ],
- 'NOVEL@GETNOVELINFO@KEYWORDS' => [
- 'description' => '详情Keywords 模板分组',
- 'sfg_id' => 11,
- 'arrSubjectFomart' => [
- '{strNovelName}, {strNovelAuthor}, {strNovelCategoryName}, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读',
- ]
- ],
- 'NOVEL@GETNOVELINFO@DESCRIPTION' => [
- 'description' => '详情Description 模板分组',
- 'sfg_id' => 12,
- 'arrSubjectFomart' => [
- '{strSiteName}提供{strNovelName}免费在线阅读,{strNovelAuthor}创作的{strNovelCategoryName}{strNovelStatus}小说,{strNovelDescription},欢迎体验{strSiteDomain}!',
- ]
- ],
-
- 'NOVEL@GETNOVELCATALOG@TITLE' => [
- 'description' => '目录Title 模板分组',
- 'sfg_id' => 13,
- 'arrSubjectFomart' => [
- '{strNovelName}章节目录 - {strNovelAuthor} - 免费查看 - {strSiteName} 第{intPage}页',
- ]
- ],
- 'NOVEL@GETNOVELCATALOG@KEYWORDS' => [
- 'description' => '目录Keywords 模板分组',
- 'sfg_id' => 14,
- 'arrSubjectFomart' => [
- '{strNovelName}, 章节目录, {strNovelAuthor}, {strNovelCategoryName}, 免费阅读,{strNovelSex}小说, {strSiteKeywords}, {strSiteName}',
- ]
- ],
- 'NOVEL@GETNOVELCATALOG@DESCRIPTION' => [
- 'description' => '目录Description 模板分组',
- 'sfg_id' => 15,
- 'arrSubjectFomart' => [
- '{strSiteName}提供{strNovelName}章节目录免费查看,第{intPage}页包含最新{strNovelStatus}章节,{strNovelAuthor}创作,畅享{strSiteDomain}!',
- ]
- ],
-
- 'NOVEL@GETNOVELCHAPTER@TITLE' => [
- 'description' => '内容Title 模板分组',
- 'sfg_id' => 16,
- 'arrSubjectFomart' => [
- '{strNovelName} {strNovelChapterName} - {strNovelAuthor} - 免费阅读 - {strSiteName}',
- ]
- ],
- 'NOVEL@GETNOVELCHAPTER@KEYWORDS' => [
- 'description' => '内容Keywords 模板分组',
- 'sfg_id' => 17,
- 'arrSubjectFomart' => [
- '{strNovelName}, {strNovelChapterName}, {strNovelAuthor}, {strSiteKeywords}, 免费阅读, {strSiteName}',
- ]
- ],
- 'NOVEL@GETNOVELCHAPTER@DESCRIPTION' => [
- 'description' => '内容Description 模板分组',
- 'sfg_id' => 18,
- 'arrSubjectFomart' => [
- '{strNovelName}{strNovelChapterName}免费在线阅读,{strNovelAuthor}著。{strChapterDescription},快来{strSiteName}畅读精彩章节!',
- ]
- ],
-
- 'NOVEL@GETNOVELRANK@TITLE' => [
- 'description' => '排行榜Title 模板分组',
- 'sfg_id' => 19,
- 'arrSubjectFomart' => [
- '小说排行榜 - {strSiteName} - 第{intPage}页',
- ]
- ],
- 'NOVEL@GETNOVELRANK@KEYWORDS' => [
- 'description' => '排行榜Keywords 模板分组',
- 'sfg_id' => 20,
- 'arrSubjectFomart' => [
- '小说排行榜, 热门小说, 小说推荐, {strSiteKeywords}, {strSiteName}, 免费阅读',
- ]
- ],
- 'NOVEL@GETNOVELRANK@DESCRIPTION' => [
- 'description' => '排行榜Description 模板分组',
- 'sfg_id' => 21,
- 'arrSubjectFomart' => [
- '{strSiteName}提供小说排行榜,第{intPage}页精选热门小说免费阅读,最新排行一览无余,畅享{strSiteDomain}!',
- ]
- ],
-
- 'NOVEL@GETSEARCHNOVEL@TITLE' => [
- 'description' => '搜索页Title 模板分组',
- 'sfg_id' => 22,
- 'arrSubjectFomart' => [
- '{strSearchKeywords} - {strSiteName}搜索 - 第{intPage}页',
- ]
- ],
- 'NOVEL@GETSEARCHNOVEL@KEYWORDS' => [
- 'description' => '搜索页Keywords 模板分组',
- 'sfg_id' => 23,
- 'arrSubjectFomart' => [
- '{strSearchKeywords}, {strSiteName}, 免费阅读, 在线搜索, 第{intPage}页',
- ]
- ],
- 'NOVEL@GETSEARCHNOVEL@DESCRIPTION' => [
- 'description' => '搜索页Description 模板分组',
- 'sfg_id' => 24,
- 'arrSubjectFomart' => [
- '{strSearchKeywords}搜索结果尽在{strSiteName},第{intPage}页提供免费阅读,访问{strSiteDomain}立即体验!',
- ]
- ],
-
- // URL
- 'CATEGORY_INFO_URL' => [
- 'description' => '分类书库URL 模板1',
- 'sfg_id' => 25,
- 'arrSubjectFomart' => [
- '/shuku/{strGender}/{strCategory}/{strStatus}/{strOrder}/page{intPage}',
- ]
- ],
- 'NAN_SHENG_URL' => [
- 'description' => '男生URL 模板1',
- 'sfg_id' => 26,
- 'arrSubjectFomart' => [
- '/nansheng-xiaoshuo',
- ]
- ],
- 'NV_SHENG_URL' => [
- 'description' => '女生URL 模板1',
- 'sfg_id' => 27,
- 'arrSubjectFomart' => [
- '/nvsheng-xiaoshuo',
- ]
- ],
- 'RANK_INFO_URL' => [
- 'description' => '排行榜URL 模板1',
- 'sfg_id' => 28,
- 'arrSubjectFomart' => [
- '/paihang/all',
- ]
- ],
- 'NOVEL_INFO_URL' => [
- 'description' => '小说详情URL 模板1',
- 'sfg_id' => 29,
- 'arrSubjectFomart' => [
- '/xiaoshuo/{strPinYin}-{intNId}',
- ]
- ],
- 'KAN_NOVEL_INFO_URL' => [
- 'description' => 'kan小说详情URL 模板1',
- 'sfg_id' => 30,
- 'arrSubjectFomart' => [
- '/kan-xiaoshuo/{strPinYin}-{intNId}-{intNForgeId}',
- ]
- ],
- 'NOVEL_CATALOG_URL' => [
- 'description' => '小说目录URL 模板1',
- 'sfg_id' => 31,
- 'arrSubjectFomart' => [
- '/xiaoshuo/{strPinYin}-{intNId}/mulu/{strOrder}/{intPage}',
- ]
- ],
- 'CONTENT_INFO_URL' => [
- 'description' => '内容章节URL 模板1',
- 'sfg_id' => 32,
- 'arrSubjectFomart' => [
- '/xiaoshuo/{strPinYin}-{intNId}/zhang-{intChapterSort}/{intChapterPage}',
- ]
- ],
- 'NEWS_CONTENT_INFO_URL' => [
- 'description' => '最新章节特殊页URL 模板1',
- 'sfg_id' => 33,
- 'arrSubjectFomart' => [
- '/xiaoshuo/{strPinYin}-{intNId}/chapter/latest',
- ]
- ],
- 'SEARCH_INFO_URL' => [
- 'description' => '搜索页URL 模板1',
- 'sfg_id' => 34,
- 'arrSubjectFomart' => [
- '/search.html?keyword={strSearchKeywords}&page={intPage}',
- ]
- ],
- 'HISTORY_INFO_URL' => [
- 'description' => '历史记录URL 模板1',
- 'sfg_id' => 89,
- 'arrSubjectFomart' => [
- '/history',
- ]
- ],
- 'SHUJIA_INFO_URL' => [
- 'description' => '书架URL 模板1',
- 'sfg_id' => 90,
- 'arrSubjectFomart' => [
- '/bookshelf',
- ]
- ],
- 'USER_INFO_URL' => [
- 'description' => '用户中心URL 模板1',
- 'sfg_id' => 91,
- 'arrSubjectFomart' => [
- '/user',
- ]
- ],
- 'PC_URL_PATH' => [
- 'description' => 'pc端URL目录 模板',
- 'sfg_id' => 107,
- 'arrSubjectFomart' => ['/pc', '/web', '/desktop', '/index', '/shouye', '/zhuomian']
- ],
- 'CATEGORY_INDEX_URL' => [
- 'description' => '书库首页URL 模板1',
- 'sfg_id' => 108,
- 'arrSubjectFomart' => ['/shuku/index',]
- ],
- 'SEARCH_INDEX_URL' => [
- 'description' => '搜索首页URL 模板1',
- 'sfg_id' => 114,
- 'arrSubjectFomart' => [
- '/search.html',
- ]
- ],
-
-
- // SEO 丰富内容
- 'INDEX_POPULAR_NOVELS' => [
- 'description' => '首页热门小说介绍 模板分组',
- 'sfg_id' => 35,
- 'arrSubjectFomart' => [
- '精选全网热评佳作,涵盖玄幻冒险、都市传奇、穿越重生等多种类型,带你领略最受欢迎的阅读热潮,快来发现你的下一本心动之作!',
- ]
- ],
- 'INDEX_NEWS_NOVELS' => [
- 'description' => '首页最新小说介绍 模板分组',
- 'sfg_id' => 37,
- 'arrSubjectFomart' => [
- '每日更新最新章节,囊括玄幻修真、都市爽文、重生逆袭等热门题材,紧跟作者步伐,第一时间畅读新鲜故事!',
- ]
- ],
- 'INDEX_RANK_NOVELS' => [
- 'description' => '首页小说排行榜介绍 模板分组',
- 'sfg_id' => 38,
- 'arrSubjectFomart' => [
- '汇聚读者最爱的小说排行,日榜、周榜、月榜一网打尽,玄幻巅峰、都市热血、完结经典全都有,助你快速找到高人气好书!',
- ]
- ],
-
- // 最新替换模板分组id 119
- ];
-
-
- /**
- * 视图模板 数据播种
- */
- $arrTemplateData = [
- [
- 't_id' => 1,
- 't_default' => 1,
- 't_code' => 'default',
- 't_path' => '/app/home/view/default/',
- 't_cfg_template' => $arrSubjectFomartGroupData,
- ],
- [
- 't_id' => 2,
- 't_default' => 0,
- 't_code' => 'kuangYu',
- 't_path' => '/app/home/view/kuangYu/',
- 't_cfg_template' => $arrSubjectFomartGroupData,
- ],
- // [
- // 't_id' => 3,
- // 't_default' => 0,
- // 't_code' => 'haoZi',
- // 't_path' => '/app/home/view/haoZi/',
- // ],
- // [
- // 't_id' => 4,
- // 't_default' => 0,
- // 't_code' => 'xiongMao',
- // 't_path' => '/app/home/view/xiongMao/',
- // ],
- // [
- // 't_id' => 5,
- // 't_default' => 0,
- // 't_code' => 'shiKong',
- // 't_path' => '/app/home/view/shiKong/',
- // ],
-
-
- ];
-
- /**
- * 站点列表 数据播种
- */
- $arrSiteData = [
- [
- 'd_id' => 1,
- 'd_domain' => 'seo.com',
- 'd_name' => '狂雨小说',
- 't_id' => '1',
- 'd_keywords' => '狂雨小说',
- 'd_description' => '欢迎来到狂雨小说 - 您的免费小说阅读天堂!这里汇聚了玄幻修真、穿越重生、都市热血、言情甜宠等多种热门小说类型,无论您是喜欢热血激战的主角成长故事,还是钟情于逆袭人生的穿越传奇,亦或是沉浸于都市生活的浪漫情缘,狂雨小说都能满足您的阅读渴望。我们每日更新最新章节,确保您第一时间追更心仪作品;更有小说排行榜精选全网热评佳作,从日榜到完结榜,助您轻松找到高人气好书。无需注册,免费畅读,狂雨小说致力于为您打造极致阅读体验,快来加入我们,开启属于您的故事冒险之旅吧!',
- 'd_index_title' => '狂雨小说 - 免费在线阅读热门玄幻、穿越、都市小说',
- 'd_index_keywords' => '狂雨小说, 小说在线阅读, 玄幻小说, 穿越小说, 热门小说排行榜',
- 'd_index_description' => '狂雨小说提供免费在线阅读,涵盖玄幻、穿越、都市等热门小说,最新排行榜每日更新,尽享阅读乐趣!',
- 'd_text_logo' => '热门小说阅读平台',
- 't_cfg' => $arrSubjectFomartGroupData,
- ],
- [
- 'd_id' => 2,
- 'd_domain' => 'novel2.com',
- 'd_name' => '狂雨小说',
- 't_id' => '2',
- 'd_keywords' => '狂雨小说',
- 'd_description' => '欢迎来到狂雨小说 - 您的免费小说阅读天堂!这里汇聚了玄幻修真、穿越重生、都市热血、言情甜宠等多种热门小说类型,无论您是喜欢热血激战的主角成长故事,还是钟情于逆袭人生的穿越传奇,亦或是沉浸于都市生活的浪漫情缘,狂雨小说都能满足您的阅读渴望。我们每日更新最新章节,确保您第一时间追更心仪作品;更有小说排行榜精选全网热评佳作,从日榜到完结榜,助您轻松找到高人气好书。无需注册,免费畅读,狂雨小说致力于为您打造极致阅读体验,快来加入我们,开启属于您的故事冒险之旅吧!',
- 'd_index_title' => '狂雨小说 - 免费在线阅读热门玄幻、穿越、都市小说',
- 'd_index_keywords' => '狂雨小说, 小说在线阅读, 玄幻小说, 穿越小说, 热门小说排行榜',
- 'd_index_description' => '狂雨小说提供免费在线阅读,涵盖玄幻、穿越、都市等热门小说,最新排行榜每日更新,尽享阅读乐趣!',
- 'd_text_logo' => '热门小说阅读平台',
- 't_cfg' => $arrSubjectFomartGroupData,
- ],
- [
- 'd_id' => 3,
- 'd_domain' => 'novel3.com',
- 'd_name' => '狂雨小说',
- 't_id' => '2',
- 'd_keywords' => '狂雨小说',
- 'd_description' => '欢迎来到狂雨小说 - 您的免费小说阅读天堂!这里汇聚了玄幻修真、穿越重生、都市热血、言情甜宠等多种热门小说类型,无论您是喜欢热血激战的主角成长故事,还是钟情于逆袭人生的穿越传奇,亦或是沉浸于都市生活的浪漫情缘,狂雨小说都能满足您的阅读渴望。我们每日更新最新章节,确保您第一时间追更心仪作品;更有小说排行榜精选全网热评佳作,从日榜到完结榜,助您轻松找到高人气好书。无需注册,免费畅读,狂雨小说致力于为您打造极致阅读体验,快来加入我们,开启属于您的故事冒险之旅吧!',
- 'd_index_title' => '狂雨小说 - 免费在线阅读热门玄幻、穿越、都市小说',
- 'd_index_keywords' => '狂雨小说, 小说在线阅读, 玄幻小说, 穿越小说, 热门小说排行榜',
- 'd_index_description' => '狂雨小说提供免费在线阅读,涵盖玄幻、穿越、都市等热门小说,最新排行榜每日更新,尽享阅读乐趣!',
- 'd_text_logo' => '热门小说阅读平台',
- 't_cfg' => $arrSubjectFomartGroupData,
- ],
- [
- 'd_id' => 4,
- 'd_domain' => 'novel4.com',
- 'd_name' => '狂雨小说',
- 't_id' => '2',
- 'd_keywords' => '狂雨小说',
- 'd_description' => '欢迎来到狂雨小说 - 您的免费小说阅读天堂!这里汇聚了玄幻修真、穿越重生、都市热血、言情甜宠等多种热门小说类型,无论您是喜欢热血激战的主角成长故事,还是钟情于逆袭人生的穿越传奇,亦或是沉浸于都市生活的浪漫情缘,狂雨小说都能满足您的阅读渴望。我们每日更新最新章节,确保您第一时间追更心仪作品;更有小说排行榜精选全网热评佳作,从日榜到完结榜,助您轻松找到高人气好书。无需注册,免费畅读,狂雨小说致力于为您打造极致阅读体验,快来加入我们,开启属于您的故事冒险之旅吧!',
- 'd_index_title' => '狂雨小说 - 免费在线阅读热门玄幻、穿越、都市小说',
- 'd_index_keywords' => '狂雨小说, 小说在线阅读, 玄幻小说, 穿越小说, 热门小说排行榜',
- 'd_index_description' => '狂雨小说提供免费在线阅读,涵盖玄幻、穿越、都市等热门小说,最新排行榜每日更新,尽享阅读乐趣!',
- 'd_text_logo' => '热门小说阅读平台',
- 't_cfg' => $arrSubjectFomartGroupData,
- ],
- ];
-
- self::initTemplate($arrTemplateData);
-
- self::initSubjectFomartGroup($arrSubjectFomartGroupData);
- self::initSubjectFomartGroup($arrUrlSubjectFomartGroupData);
- self::initSubjectFomartGroup($arrTkdSubjectFomartGroupData);
-
- self::initSite($arrSiteData);
- }
-
-
- /**
- * 视图模板 数据播种
- *
- * @param [type] $arrTemplateData
- * @return void
- */
- static public function initTemplate($arrTemplateData)
- {
- foreach ($arrTemplateData as $arrTemplate) {
- $TemplatesModel = TemplatesModel::where('t_id', $arrTemplate['t_id'])->find();
- foreach ($arrTemplate['t_cfg_template'] as $key => $arrCfgTemplate) {
- unset($arrTemplate['t_cfg_template'][$key]['arrSubjectFomart']);
- }
- if (empty($TemplatesModel)) {
- TemplatesModel::insert($arrTemplate);
- } else {
- // 如果记录存在,更新记录
- $TemplatesModel->update($arrTemplate);
- }
- }
-
- TemplatesModel::flushAllTemplateOnCache();
- }
-
- /**
- * 替换模板分组/替换模板 数据播种
- *
- * @param [type] $arrTemplateData
- * @return void
- */
- static public function initSubjectFomartGroup($arrSubjectFomartGroupData)
- {
- foreach ($arrSubjectFomartGroupData as $SubjectFomartGroup) {
- $SubjectFomartGroupModel = SubjectFomartGroupModel::where('sfg_id', $SubjectFomartGroup['sfg_id'])->find();
-
- $SubjectFomartGroupItem = [
- 'sfg_id' => $SubjectFomartGroup['sfg_id'],
- 'sfg_name' => str_replace(" 模板分组", "", $SubjectFomartGroup['description']),
- 'sfg_description' => str_replace(" 模板分组", "", $SubjectFomartGroup['description']),
- ];
-
- foreach ($SubjectFomartGroup['arrSubjectFomart'] as $SubjectFomart) {
- $SubjectFomartItem = [
- 'sfg_id' => $SubjectFomartGroup['sfg_id'],
- 'sf_val' => $SubjectFomart
- ];
- $SubjectFomartModel = SubjectFomartModel::where('sfg_id', $SubjectFomartItem['sfg_id'])->where('sf_val', $SubjectFomart)->find();
- if (empty($SubjectFomartModel)) {
- SubjectFomartModel::insert($SubjectFomartItem);
- }
- };
-
- if (empty($SubjectFomartGroupModel)) {
- SubjectFomartGroupModel::insert($SubjectFomartGroupItem);
- } else {
- // 如果记录存在,更新记录
- $SubjectFomartGroupModel->update($SubjectFomartGroupItem);
- }
- }
-
- // SubjectFomartGroupModel::flushCache();
- }
-
- /**
- * 站点列表 数据播种 --
- *
- * @param [type] $arrTemplateData
- * @return void
- */
- static public function initSite($arrSiteData)
- {
- foreach ($arrSiteData as $arrSite) {
- $SiteModel = DomainModel::where('d_id', $arrSite['d_id'])->find();
-
- if (empty($SiteModel)) {
- DomainModel::insert($arrSite);
- } else {
- // 如果记录存在,更新记录
- $SiteModel->update($arrSite);
- }
- }
-
- DomainModel::flushAllDomianOnCache();
- }
-}
diff --git a/code/database/seeders/ZiYuanDuanDianSeeder.php b/code/database/seeders/ZiYuanDuanDianSeeder.php
deleted file mode 100644
index a6b7891..0000000
--- a/code/database/seeders/ZiYuanDuanDianSeeder.php
+++ /dev/null
@@ -1,56 +0,0 @@
- '小说封面',
- 'zydd_code' => 'XS_COVER',
- 'zydd_domain' => '',
- ],
- [
- 'zydd_ming_zi' => '大地影视封面',
- 'zydd_code' => 'DADI_YINGSHI_COVER',
- 'zydd_domain' => '',
- ],
- [
- 'zydd_ming_zi' => '黑木耳资源封面',
- 'zydd_code' => 'HEIMUER_SOURCE_COVER',
- 'zydd_domain' => '',
- ],
- [
- 'zydd_ming_zi' => '黑木耳资源m3u8',
- 'zydd_code' => 'HEIMUER_SOURCE_PLAY',
- 'zydd_domain' => '',
- ],
- [
- 'zydd_ming_zi' => '优质资源封面',
- 'zydd_code' => 'YOUZHI_SOURCE_COVER',
- 'zydd_domain' => '',
- ],
- [
- 'zydd_ming_zi' => '优质耳资源m3u8',
- 'zydd_code' => 'YOUZHI_SOURCE_PLAY',
- 'zydd_domain' => '',
- ]
- ];
-
- foreach ($arrData as $arrDataOne) {
- $ZiYuanDuanDianModel = ZiYuanDuanDianModel::where('zydd_code', $arrDataOne['zydd_code'])->find();
-
- if (empty($ZiYuanDuanDianModel)) {
- ZiYuanDuanDianModel::insert($arrDataOne);
- }
- }
- }
-}
diff --git a/code/extend/db/DatabaseManage.php b/code/extend/db/DatabaseManage.php
deleted file mode 100644
index b1432a2..0000000
--- a/code/extend/db/DatabaseManage.php
+++ /dev/null
@@ -1,114 +0,0 @@
-setName('db:manage')
- ->addArgument('action', \think\console\input\Argument::OPTIONAL, 'The action to perform: backup or init or seed')
- ->setDescription('Manage the database: backup or initialize');
- }
-
- protected function execute(Input $input, Output $Output)
- {
- $strAction = $input->getArgument('action');
-
- if ($strAction === 'backup') {
- $this->backupDatabase($Output);
- } elseif ($strAction === 'init') {
- $this->initializeDatabase($Output);
- } elseif ($strAction === 'seed') {
- $this->seed($Output);
- } else {
- $Output->writeln("Invalid action. Use 'backup' or 'init'. or 'seed'");
- }
- }
-
- private function seed(Output $Output)
- {
- $SeedManager = new SeedManager;
- $Output->writeln("开始数据播种" . PHP_EOL);
- $SeedManager->handle();
- $Output->writeln("数据播种结束");
- }
-
- private function backupDatabase(Output $Output)
- {
- $arrConfig = config('database.connections.mysql');
- $strDb = $arrConfig['database'];
- $strUserName = $arrConfig['username'];
- $strPwd = $arrConfig['password'];
- $strHost = $arrConfig['hostname'];
- $strBackupFile = app()->getRootPath() . 'database/schema/mysql-schema.dump';
-
- $strTempFile = tempnam(sys_get_temp_dir(), 'mysql-schema-') . '.dump';
-
- $strCmd = "mysqldump -h{$strHost} -u{$strUserName} -p{$strPwd} --no-data {$strDb} > {$strTempFile}";
-
- system($strCmd, $intResultCode);
-
- if ($intResultCode === 0) {
- if (file_exists($strBackupFile)) {
- unlink($strBackupFile);
- }
-
- if (rename($strTempFile, $strBackupFile)) {
- $Output->writeln("Database backup successful: {$strBackupFile}");
- } else {
- $Output->writeln("Failed to move backup file to destination.");
- }
- } else {
- $Output->writeln("Database backup failed.");
- unlink($strTempFile);
- }
- }
-
- private function initializeDatabase(Output $Output)
- {
- $arrConfig = config('database.connections.mysql');
- $strDb = $arrConfig['database'];
- $strUserName = $arrConfig['username'];
- $strPwd = $arrConfig['password'];
- $strHost = $arrConfig['hostname'];
- $strPort = $arrConfig['hostport'];
- $strBackupFile = app()->getRootPath() . 'database/schema/mysql-schema.dump';
-
- $checkTableQuery = "SHOW TABLES LIKE 'migrations'";
- $boolMigrateExists = Db::query($checkTableQuery);
-
- if (!empty($boolMigrateExists)) {
- $Output->writeln("数据库已存在,跳过初始化导入");
- return;
- }
-
- $strTempFile = tempnam(sys_get_temp_dir(), 'mysql-schema-') . '.dump';
-
- if (!copy($strBackupFile, $strTempFile)) {
- $Output->writeln("创建临时导入文件失败.");
- return;
- }
-
- $strCmd = "mysql -h{$strHost} -P{$strPort} -u{$strUserName} -p{$strPwd} {$strDb} < {$strTempFile}";
-
- system($strCmd, $intResultCode);
-
- if ($intResultCode === 0) {
- $Output->writeln("成功导入初始化文件");
- } else {
- $Output->writeln("初始化文件导入失败");
- }
-
- unlink($strTempFile);
- }
-}
diff --git a/code/extend/db/MongoMigrate.php b/code/extend/db/MongoMigrate.php
deleted file mode 100644
index 2d84b68..0000000
--- a/code/extend/db/MongoMigrate.php
+++ /dev/null
@@ -1,176 +0,0 @@
-setName('mongo:manage')
- ->addArgument('action', \think\console\input\Argument::OPTIONAL, 'The action to perform: migrate')
- ->setDescription('Manage the mongo, migarte index or drop all index');
- }
-
- /**
- * Undocumented function
- *
- * @param Input $input
- * @param Output $Output
- * @return void
- */
- protected function execute(Input $input, Output $Output)
- {
- $strAction = $input->getArgument('action');
-
- if ($strAction === 'migrate') {
- $this->migrate($Output);
- } else if ($strAction === 'drop') {
- $this->dropAllIndexes($Output);
- } else {
- $Output->writeln("Invalid action. Use 'migrate' or 'drop'");
- }
- }
-
- /**
- * Undocumented function
- *
- * @param Output $Output
- * @return void
- */
- protected function dropAllIndexes(Output $Output)
- {
- try {
- DDLManage::load('MongoBase');
- $Db = MongoBase::getInstance()->getDb();
-
- $ColsInfo = $Db->listCollections();
-
- foreach ($ColsInfo as $ColInfo) {
- $strColName = $ColInfo->getName();
- $Col = $Db->selectCollection($strColName);
-
-
- $arrIndexes = iterator_to_array($Col->listIndexes());
- $arrIndexesToDrop = [];
-
-
- foreach ($arrIndexes as $Index) {
- $strIndexName = $Index->getName();
- if ($strIndexName !== '_id_') {
- $arrIndexesToDrop[] = $strIndexName;
- }
- }
-
-
- if (!empty($arrIndexesToDrop)) {
- foreach ($arrIndexesToDrop as $strIndexName) {
- $Col->dropIndex($strIndexName);
- $Output->writeln(" Dropped index: {$strIndexName} from collection: {$strColName}");
- }
- } else {
- $Output->writeln(" No non-_id indexes found in collection: {$strColName}");
- }
- }
- } catch (\Exception $e) {
- $Output->writeln("Failed to drop indexes: {$e->getMessage()}");
- }
- }
-
- /**
- * Undocumented function
- *
- * @param Output $Output
- * @return void
- */
- protected function migrate(Output $Output)
- {
- try {
- DDLManage::load('MongoBase');
- $strMigrationDir = root_path() . 'database/mongo/migrations';
-
-
- if (!is_dir($strMigrationDir)) {
- mkdir($strMigrationDir, 0755, true);
- $Output->writeln("Created migration directory: {$strMigrationDir}");
- }
-
-
- $arrFiles = glob($strMigrationDir . '/*.php');
- if (empty($arrFiles)) {
- $Output->writeln('No migration files found.');
- return 0;
- }
-
- sort($arrFiles);
-
- $Db = MongoBase::getInstance()->getDb();
-
- foreach ($arrFiles as $strFile) {
- $Output->writeln("Processing migration: " . basename($strFile));
-
-
- $arrMigration = require $strFile;
- if (!is_array($arrMigration) || !isset($arrMigration['collection']) || !isset($arrMigration['indexes'])) {
- $Output->writeln("Invalid migration format in {$strFile}");
- continue;
- }
-
- $strCollectionName = $arrMigration['collection'];
- $arrIndexes = $arrMigration['indexes'];
-
-
- $Col = $Db->selectCollection($strCollectionName);
-
-
- $arrExistingIndexes = iterator_to_array($Col->listIndexes());
-
- $arrExistingIndexKeys = [];
- foreach ($arrExistingIndexes as $Index) {
- $strKey = json_encode($Index->getKey());
- $arrExistingIndexKeys[$strKey] = $Index->getName();
- }
-
-
- foreach ($arrIndexes as $arrIndex) {
- $arrKey = $arrIndex['key'];
- $arrOptions = $arrIndex['options'] ?? [];
-
-
- $strKey = json_encode($arrKey);
-
-
- if (array_key_exists($strKey, $arrExistingIndexKeys)) {
- $Output->writeln(" Index for " . json_encode($arrKey) . " already exists as {$arrExistingIndexKeys[$strKey]}, skipping...");
- continue;
- }
-
-
- $arrIndexNameParts = [];
- foreach ($arrKey as $field => $direction) {
- $arrIndexNameParts[] = "{$field}_{$direction}";
- }
- $strIndexName = implode('_', $arrIndexNameParts);
-
-
- $arrOptions['name'] = $strIndexName;
- $Col->createIndex($arrKey, $arrOptions);
-
- $Output->writeln(" Created index: {$strIndexName} for " . json_encode($arrKey));
- }
- }
-
- $Output->writeln('Migration completed successfully!');
- return 0;
- } catch (\Exception $e) {
- $Output->writeln("Error: {$e->getMessage()}");
- return 1;
- }
- }
-}
diff --git a/code/extend/db/NovelManage.php b/code/extend/db/NovelManage.php
deleted file mode 100644
index 8f08888..0000000
--- a/code/extend/db/NovelManage.php
+++ /dev/null
@@ -1,114 +0,0 @@
-setName('novel:manage')
- ->addArgument('action', \think\console\input\Argument::OPTIONAL, 'The action to perform: reset')
- ->setDescription('Manage the novel data: reset or ...');
- }
-
- protected function execute(Input $input, Output $Output)
- {
- $strAction = $input->getArgument('action');
-
- if ($strAction === 'reset') {
- $this->resetData($Output);
- } else {
- $Output->writeln("Invalid action. Use 'reset' ");
- }
- }
-
- private function resetData(Output $Output)
- {
- DDLManage::load('MongoBase');
-
- $Db = MongoBase::getInstance()->getDb();
-
- $NovelCol = $Db->selectCollection('novel');
-
- $ChapterCol = $Db->selectCollection('chapter');
-
- $ChapterModel = ChapterModel::getInstance();
-
- $intBatchSize = 1000;
-
- $LastId = null;
-
- while (true) {
-
- $arrFilter = [];
- if (!is_null($LastId)) {
- $arrFilter['_id'] = ['$gt' => $LastId];
- }
- $arrOptions = [
- 'sort' => ['_id' => 1],
- 'limit' => $intBatchSize,
- 'noCursorTimeout' => true,
- ];
-
- $Cursor = $NovelCol->find($arrFilter, $arrOptions);
- $arrDocs = iterator_to_array($Cursor);
-
- if (empty($arrDocs)) {
- echo "全部处理完毕。\n";
- break;
- }
-
- $arrBulkOps = [];
-
- foreach ($arrDocs as $arrDoc) {
- $arrUpdateData = [];
-
- if (!empty($arrDoc['n_category'])) {
- $arrUpdateData['n_category_pinyin'] = CategoryModel::getPinYin($arrDoc['n_category']);
- $arrUpdateData['n_category_sex_en'] = CategoryModel::getSexEn($arrDoc['n_category']);
- $arrUpdateData['n_category_sex_zh'] = CategoryModel::getSexZh($arrDoc['n_category']);
- }
-
- $arrLasteChapter = $ChapterModel->getLatestChapterByNId($arrDoc['n_id'], false);
-
- if (!empty($arrLasteChapter)) {
- $arrUpdateData['n_have_chapter'] = 1;
- $arrUpdateData['n_latest_chapter_name'] = $arrLasteChapter['name'];
- }
-
- if (!empty($arrUpdateData)) {
- $arrBulkOps[] = [
- 'updateOne' => [
- ['_id' => $arrDoc['_id']],
- ['$set' => $arrUpdateData],
- ],
- ];
- }
-
- $LastId = $arrDoc['_id'];
- }
-
- if (!empty($arrBulkOps)) {
- $Result = $NovelCol->bulkWrite($arrBulkOps);
- printf("本批匹配 %d 条记录, 修改 %d 条记录\n", $Result->getMatchedCount(), $Result->getModifiedCount());
- } else {
- echo "本批无需要更新的记录。\n";
- }
-
- echo "已处理一批,最后 _id: " . (string)$LastId . "\n";
- }
- }
-}
diff --git a/code/extend/ddl/DDLManage.php b/code/extend/ddl/DDLManage.php
deleted file mode 100644
index 80a453b..0000000
--- a/code/extend/ddl/DDLManage.php
+++ /dev/null
@@ -1,65 +0,0 @@
- 'extend/ddl/MicroCore.ddl',
- 'MongoBase' => 'extend/ddl/MongoBase.ddl',
- ];
-
- /**
- * 加载指定模块
- * @param string $strModuleCode 模块编码
- * @return bool 加载是否成功
- */
- public static function load($strModuleCode)
- {
- if (isset(self::$arrLoadedModules[$strModuleCode])) {
- return true;
- }
-
- if (!isset(self::$arrModuleFiles[$strModuleCode])) {
- return false;
- }
-
- $filename = self::$arrModuleFiles[$strModuleCode];
-
- $strFileName = root_path() . $filename;
-
- if (!file_exists($strFileName)) {
- return false;
- }
-
- if (load_module_file($strFileName)) {
- self::$arrLoadedModules[$strModuleCode] = true;
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * 检查模块是否已加载
- * @param string $strModuleCode 类名
- * @return bool
- */
- public static function isLoaded($strModuleCode)
- {
- return isset(self::$arrLoadedModules[$strModuleCode]);
- }
-
- /**
- * 获取所有已加载的模块
- * @return array
- */
- public static function getarrLoadedModules()
- {
- return array_keys(self::$arrLoadedModules);
- }
-}
diff --git a/code/extend/ddl/MicroCore.ddl b/code/extend/ddl/MicroCore.ddl
deleted file mode 100644
index 4a8fe8f..0000000
Binary files a/code/extend/ddl/MicroCore.ddl and /dev/null differ
diff --git a/code/extend/ddl/MongoBase.ddl b/code/extend/ddl/MongoBase.ddl
deleted file mode 100644
index e06fd09..0000000
Binary files a/code/extend/ddl/MongoBase.ddl and /dev/null differ
diff --git a/code/extend/processor/ImageProcessor.php b/code/extend/processor/ImageProcessor.php
deleted file mode 100644
index e15e185..0000000
--- a/code/extend/processor/ImageProcessor.php
+++ /dev/null
@@ -1,133 +0,0 @@
-client = new Client([
- 'verify' => false // 忽略证书检测
- ]);
- $this->key = $key;
- }
-
- public static function getInstance($key = 0x88)
- {
- if (self::$instance == null) {
- self::$instance = new ImageProcessor($key = 0x88);
- }
- return self::$instance;
- }
-
- public function downloadAndEncryptImage($imageUrl, $directory)
- {
- try {
- // 下载图片
- $response = $this->client->get($imageUrl);
- if ($response->getStatusCode() !== 200) {
- throw new Exception("Failed to download image: $imageUrl");
- }
- $imageData = $response->getBody()->getContents();
-
- // 加密图片
- $encryptedData = $this->encrypt($imageData);
-
- // 生成目录路径
- $relativePath = $this->generatePath($directory);
-
- // 保存加密后的图片
- file_put_contents(public_path() . $relativePath, $encryptedData);
-
- return '/' . $relativePath;
- } catch (RequestException $e) {
- throw new Exception("Request Error: " . $e->getMessage());
- } catch (Exception $e) {
- throw new Exception("Error: " . $e->getMessage());
- }
- }
-
- public function downloadImage( $intXiaoShuoSourceId,$imageUrl, $directory)
- {
- try {
- // 下载图片
- $response = $this->client->get($imageUrl);
- if ($response->getStatusCode() !== 200) {
- throw new Exception("Failed to download image: $imageUrl");
- }
- $imageData = $response->getBody()->getContents();
-
- // 加密图片
- //$encryptedData = $this->encrypt($imageData);
-
- // 生成目录路径
- $relativePath = $this->generateImgPath($directory,$intXiaoShuoSourceId);
-
- // 保存图片
- file_put_contents(public_path() . $relativePath, $imageData);
-
- return '/' . $relativePath;
- } catch (RequestException $e) {
- throw new Exception("Request Error: " . $e->getMessage());
- } catch (Exception $e) {
- throw new Exception("Error: " . $e->getMessage());
- }
- }
-
- private function encrypt($data)
- {
- $bytes = array_values(unpack('C*', $data));
- $len = count($bytes);
-
- for ($i = 0; $i < $len; $i++) {
- $bytes[$i] ^= $this->key;
- }
-
- return pack('C*', ...$bytes);
- }
-
- private function generateImgPath($directory,$intXiaoShuoSourceId)
- {
- $relativePath = $directory . '/pic/'.$intXiaoShuoSourceId;
- $basePath = public_path() . $relativePath;
- if (!is_dir($basePath)) {
- mkdir($basePath, 0777, true);
- }
-
- $filePath = $relativePath . '.jpg'; ;
- return $filePath;
- }
-
- private function generatePath($directory)
- {
- $datePath = date('Y/m/d');
- $hash = md5(uniqid(rand(), true));
- $hashPath = substr($hash, 0, 2) . '/' . substr($hash, 2, 2);
-
- $relativePath = $directory . '/' . $datePath . '/' . $hashPath;
- $basePath = public_path() . $relativePath;
- if (!is_dir($basePath)) {
- mkdir($basePath, 0777, true);
- }
-
- $filePath = $relativePath . '/' . uniqid() . '.jpg';
- return $filePath;
- }
-}
-
-// // 示例用法
-// try {
-// $imageProcessor = ImageProcessor::getInstance();
-// $savedPath = $imageProcessor->downloadAndEncryptImage('https://example.com/path/to/image.jpg', 'abc');
-// echo "图片加密并保存到: " . $savedPath;
-// } catch (Exception $e) {
-// echo "错误: " . $e->getMessage();
-// }
diff --git a/code/extend/storage/StorageCore.php b/code/extend/storage/StorageCore.php
deleted file mode 100644
index 78d2612..0000000
--- a/code/extend/storage/StorageCore.php
+++ /dev/null
@@ -1,98 +0,0 @@
-Adapter = new Local(
- $arrConfig['local']['dir']
- );
-
- $this->Filesystem = new Filesystem($this->Adapter);
- }
-
- /**
- * Undocumented function
- *
- * @return self
- */
- public static function getInstance(): self
- {
- if (self::$instance == null) {
- self::$instance = new self();
- }
- return self::$instance;
- }
-
- public function set($strKey, $strContent)
- {
- $strContent = zstd_compress($strContent);
- return $this->Filesystem->write($strKey, $strContent);
- }
-
- public function writeStream(string $strPath, $Resource)
- {
- $this->Filesystem->writeStream($strPath, $Resource);
- }
-
- public function put($strKey, $strContent, array $arrConfig = [])
- {
- $strContent = zstd_compress($strContent);
- return $this->Filesystem->put($strKey, $strContent, $arrConfig);
- }
-
- public function write($strKey, $strContent, array $arrConfig = [])
- {
- $strContent = zstd_compress($strContent);
- return $this->Filesystem->write($strKey, $strContent, $arrConfig);
- }
-
- public function update($strKey, $strContent, array $arrConfig = [])
- {
- $strContent = zstd_compress($strContent);
- return $this->Filesystem->update($strKey, $strContent, $arrConfig);
- }
-
- public function read($strKey)
- {
- try {
- $Stream = $this->Filesystem->readStream($strKey);
- $strContent = stream_get_contents($Stream);
- $strContent = zstd_uncompress($strContent);
- return $strContent;
- } catch (\Exception $e) {
- return '';
- }
- }
-
- public function has($strKey)
- {
- return $this->Filesystem->has($strKey);
- }
-}
diff --git a/code/extend/template/page/CusteomPage.php b/code/extend/template/page/CusteomPage.php
deleted file mode 100644
index 89726d2..0000000
--- a/code/extend/template/page/CusteomPage.php
+++ /dev/null
@@ -1,215 +0,0 @@
-currentPage() <= 1) {
- return $this->getDisabledTextWrapper($text);
- }
-
- $url = $this->url(
- $this->currentPage() - 1
- );
-
- return $this->getPageLinkWrapper($url, $text);
- }
-
- /**
- * 下一页按钮
- * @param string $text
- * @return string
- */
- protected function getNextButton(string $text = '下一页'): string
- {
- if (!$this->hasMore) {
- return $this->getDisabledTextWrapper($text);
- }
-
- $url = $this->url($this->currentPage() + 1);
-
- return $this->getPageLinkWrapper($url, $text);
- }
-
- /**
- * 页码按钮
- * @return string
- */
- /**
- * 页码按钮
- * @return string
- */
- protected function getLinks(): string
- {
- if ($this->simple) {
- return '';
- }
-
- $block = [
- 'first' => null,
- 'slider' => null,
- 'last' => null,
- ];
-
- if ($this->lastPage <= 3) {
- // 如果总页数少于或等于3,显示所有页码
- $block['first'] = $this->getUrlRange(1, $this->lastPage);
- } else {
- if ($this->currentPage == 1) {
- // 如果当前页码是第一页,显示前两页和第三页
- $block['first'] = $this->getUrlRange(1, 3);
- } elseif ($this->currentPage == $this->lastPage) {
- // 如果当前页码是最后一页,显示最后三页
- $block['first'] = $this->getUrlRange($this->lastPage - 2, $this->lastPage);
- } else {
- // 否则,显示当前页码及其前后各一页
- $block['first'] = $this->getUrlRange($this->currentPage - 1, $this->currentPage + 1);
- }
- }
-
- $html = '';
-
- if (is_array($block['first'])) {
- $html .= $this->getUrlLinks($block['first']);
- }
-
- return $html;
- }
-
- /**
- * 渲染分页html
- * @return mixed
- */
- public function render()
- {
- if ($this->hasPages()) {
- if ($this->simple) {
- return sprintf(
- '',
- $this->getPreviousButton(),
- $this->getNextButton()
- );
- } else {
- return sprintf(
- '%s',
- $this->getPreviousButton(),
- $this->getLinks(),
- $this->getNextButton(),
- $this->getTotalInfo(),
- $this->getTargePage(),
- );
- }
- }
- }
-
- /**
- * 跳转
- *
- * @return string
- */
- protected function getTargePage(): string
- {
- return '
-
-
-
';
- }
-
- /**
- * 统计
- *
- * @return string
- */
- protected function getTotalInfo(): string
- {
- return '' . $this->currentPage() . '/' . $this->lastPage() . '';
- }
-
- /**
- * 生成一个可点击的按钮
- *
- * @param string $url
- * @param string $page
- * @return string
- */
- protected function getAvailablePageWrapper(string $url, string $page): string
- {
- return '' . $page . '';
- }
-
- /**
- * 生成一个禁用的按钮
- *
- * @param string $text
- * @return string
- */
- protected function getDisabledTextWrapper(string $text): string
- {
- return '' . $text . '';
- }
-
- /**
- * 生成一个激活的按钮
- *
- * @param string $text
- * @return string
- */
- protected function getActivePageWrapper(string $text): string
- {
- return '' . $text . '';
- }
-
- /**
- * 生成省略号按钮
- *
- * @return string
- */
- protected function getDots(): string
- {
- return $this->getDisabledTextWrapper('...');
- }
-
- /**
- * 批量生成页码按钮.
- *
- * @param array $urls
- * @return string
- */
- protected function getUrlLinks(array $urls): string
- {
- $html = '';
-
- foreach ($urls as $page => $url) {
- $html .= $this->getPageLinkWrapper($url, $page);
- }
-
- return $html;
- }
-
- /**
- * 生成普通页码按钮
- *
- * @param string $url
- * @param string $page
- * @return string
- */
- protected function getPageLinkWrapper(string $url, string $page): string
- {
- if ($this->currentPage() == $page) {
- return $this->getActivePageWrapper($page);
- }
-
- return $this->getAvailablePageWrapper($url, $page);
- }
-}
diff --git a/code/extend/template/page/CusteomPage02.php b/code/extend/template/page/CusteomPage02.php
deleted file mode 100644
index 4b51d7e..0000000
--- a/code/extend/template/page/CusteomPage02.php
+++ /dev/null
@@ -1,152 +0,0 @@
- '上一页',
- 'next' => '下一页',
- 'ellipsis' => '...'
- ];
- $labels = array_merge($defaultLabels, $buttonLabels);
-
- // 验证 totalButtons 必须大于 3
- if ($totalButtons < 3) {
- throw new \InvalidArgumentException('Total buttons must be greater than 3');
- }
-
- // 计算总页数
- $totalPages = ceil($totalItems / $itemsPerPage);
- if ($totalPages <= 1) return []; // 只有一页时返回空数组
-
- // 确保当前页码在有效范围内
- $currentPage = max(1, min($currentPage, $totalPages));
-
- // 计算除去“上一页”和“下一页”后可显示的页码按钮数
- $pageButtons = $totalButtons - 2; // 减去“上一页”和“下一页”
-
- // 初始化按钮数组
- $buttons = [];
-
- // 上一页按钮
- $buttons[] = [
- 'type' => 'prev',
- 'label' => $labels['prev'],
- 'url' => $currentPage > 1 ? str_replace('{page}', $currentPage - 1, $baseUrl) : null,
- 'rel' => $currentPage > 1 ? 'prev' : null,
- 'disabled' => $currentPage <= 1
- ];
-
- // 计算页码范围
- $half = floor($pageButtons / 2);
- $start = max(1, $currentPage - $half);
- $end = $start + $pageButtons - 1;
-
- // 调整范围,确保不超过总页数
- if ($end > $totalPages) {
- $end = $totalPages;
- $start = max(1, $end - $pageButtons + 1);
- }
-
- // 如果总页数大于可显示的页码数,添加省略号逻辑
- if ($totalPages > $pageButtons) {
- if ($start > 1) {
- $buttons[] = [
- 'type' => 'page',
- 'label' => '1',
- 'url' => str_replace('{page}', 1, $baseUrl),
- 'current' => false
- ];
- if ($start > 2) {
- $buttons[] = [
- 'type' => 'ellipsis',
- 'label' => $labels['ellipsis'],
- 'url' => null
- ];
- }
- }
-
- // 添加页码按钮
- for ($i = $start; $i <= $end; $i++) {
- $buttons[] = [
- 'type' => 'page',
- 'label' => (string)$i,
- 'url' => str_replace('{page}', $i, $baseUrl),
- 'current' => $i === $currentPage
- ];
- }
-
- if ($end < $totalPages) {
- if ($end < $totalPages - 1) {
- $buttons[] = [
- 'type' => 'ellipsis',
- 'label' => $labels['ellipsis'],
- 'url' => null
- ];
- }
- $buttons[] = [
- 'type' => 'page',
- 'label' => (string)$totalPages,
- 'url' => str_replace('{page}', $totalPages, $baseUrl),
- 'current' => false
- ];
- }
- } else {
- // 总页数少于等于可显示页码数,直接全部显示
- for ($i = 1; $i <= $totalPages; $i++) {
- $buttons[] = [
- 'type' => 'page',
- 'label' => (string)$i,
- 'url' => str_replace('{page}', $i, $baseUrl),
- 'current' => $i === $currentPage
- ];
- }
- }
-
- // 下一页按钮
- $buttons[] = [
- 'type' => 'next',
- 'label' => $labels['next'],
- 'url' => $currentPage < $totalPages ? str_replace('{page}', $currentPage + 1, $baseUrl) : null,
- 'rel' => $currentPage < $totalPages ? 'next' : null,
- 'disabled' => $currentPage >= $totalPages
- ];
-
- return $buttons;
- }
-}
-
-// // 测试示例 1:显示 5 个按钮
-// $currentPage = 3;
-// $totalItems = 100;
-// $itemsPerPage = 10;
-// $baseUrl = '/male/xuanhuan-xiuzhen/finished/page{page}';
-// $buttons = Pagination::generate($currentPage, $totalItems, $itemsPerPage, $baseUrl, 5);
-// print_r($buttons);
-
-// // 测试示例 2:显示 7 个按钮
-// $buttons = Pagination::generate($currentPage, $totalItems, $itemsPerPage, $baseUrl, 7);
-// print_r($buttons);
-//
diff --git a/code/extend/template/taglib/Ad.php b/code/extend/template/taglib/Ad.php
deleted file mode 100644
index 2b997d5..0000000
--- a/code/extend/template/taglib/Ad.php
+++ /dev/null
@@ -1,36 +0,0 @@
- ['attr' => 'code,order,limit,id', 'close' => 1]
- ];
-
- /**
- * list标签处理函数
- *
- * @param array $tag
- * @param string $content
- * @return string
- */
- public function tagList($tag, $content)
- {
- $code = $tag['code'] ?? '';
- $order = $tag['order'] ?? 'asc';
- $limit = isset($tag['limit']) ? (int)$tag['limit'] : 10;
- $id = $tag['id'] ?? 'ad';
-
- $parse = <<
-{volist name="adList" id="{$id}"}
-$content
-{/volist}
-EOD;
- return $parse;
- }
-}
diff --git a/code/extend/template/taglib/Chapter.php b/code/extend/template/taglib/Chapter.php
deleted file mode 100644
index c302390..0000000
--- a/code/extend/template/taglib/Chapter.php
+++ /dev/null
@@ -1,193 +0,0 @@
- ['attr' => 'count,n_category,sort_type,n_status,n_sex,key,diff_key,cache_life,d_key,d_val', 'close' => 1],
- 'pager' => ['attr' => 'page,limit,n_category,sort_type,n_status,n_sex,key,diff_key,cache_life,d_key,d_val,p_val,export_name', 'close' => 1],
- 'pagerexp' => ['attr' => 'page,limit,n_category,sort_type,n_status,n_sex,key,diff_key,cache_life,d_key,d_val,p_val,func,export_name', 'close' => 0],
- 'info' => ['attr' => 'n_id,n_key', 'close' => 0],
- ];
-
- private function customBuildVar($mixedArgs)
- {
- if (substr($mixedArgs, 0, 1) == '$') {
- return $this->autoBuildVar($mixedArgs);
- } else {
- return is_numeric($mixedArgs) ? $mixedArgs : "'" . $mixedArgs . "'";
- }
- }
-
-
- /**
- * pagerexp tag code
- *
- * @param array $tag
- * @param string $content
- * @return string
- */
- public function tagPagerExp($tag, $content)
- {
- return $this->tagPager($tag, $content);
- }
-
-
- /**
- * chapter pager
- *
- * @param arrya $tag
- * @param string $content
- * @return void
- */
- public function tagPager($tag, $content)
- {
- $page = $tag['page'] ?? '0';
- $limit = $tag['limit'] ?? '100';
- $button_num = $tag['button_num'] ?? '10';
- $n_id = $tag['n_id'] ?? '0';
- $sort_type = $tag['sort_type'] ?? "";
- $diff_key = $tag['diff_key'] ?? "";
- $cache_life = $tag['cache_life'] ?? '0';
- $d_key = $tag['d_key'] ?? 'd_key';
- $d_val = $tag['d_val'] ?? 'd_val';
- $p_val = $tag['p_val'] ?? 'p_val';
- $func = $tag['func'];
- $export_name = $tag['export_name'] ?? '';
-
- $n_id = $this->customBuildVar($n_id);
- $sort_type = $this->customBuildVar($sort_type);
- $button_num = $this->customBuildVar($button_num);
-
- $page = $this->customBuildVar($page);
- $limit = $this->customBuildVar($limit);
- $diff_key = $this->customBuildVar($diff_key);
- $cache_life = $this->customBuildVar($cache_life);
- $func = $this->customBuildVar($func);
-
- $arrDataName = randomString(5);
-
- $strParse = <<getNovelPager([
- 'page' => {$page},
- 'limit' => {$limit},
- 'button_num' => {$button_num},
- 'n_id' => {$n_id},
- 'sort_type' => {$sort_type},
- 'diff_key' => {$diff_key},
- 'cache_life' => {$cache_life},
- 'func' => {$func},
-]);
-EOT;
-
- if (empty($export_name)) {
- $strParse .= <<
-EOT;
- $strParse .= << \${$d_val}): ?>
-EOT;
- $strParse .= $content;
- $strParse .= <<
-
-EOT;
- } else {
- $strParse .= <<
-EOT;
- }
- return $strParse;
- }
-
- /**
- * chapter list
- *
- * @param arrya $tag
- * @param string $content
- * @return void
- */
- public function tagList($tag, $content)
- {
- $count = $tag['count'] ?? '100';
- $n_id = $tag['n_id'] ?? '0';
- $sort_type = $tag['sort_type'] ?? "";
- $diff_key = $tag['diff_key'] ?? "";
- $cache_life = $tag['cache_life'] ?? '0';
- $d_key = $tag['d_key'] ?? 'd_key';
- $d_val = $tag['d_val'] ?? 'd_val';
-
- $count = $this->customBuildVar($count);
- $n_id = $this->customBuildVar($n_id);
- $sort_type = $this->customBuildVar($sort_type);
- $diff_key = $this->customBuildVar($diff_key);
- $cache_life = $this->customBuildVar($cache_life);
- $arrDataName = randomString(5);
-
- $strParse = <<getChapterList([
- 'n_id' => {$n_id},
- 'count' => {$count},
- 'sort_type' => {$sort_type},
- 'diff_key' => {$diff_key},
- 'cache_life' => {$cache_life},
-]);
-
-if (!empty(\${$arrDataName}) && is_array(\${$arrDataName})):
-
-?>
-EOT;
- $strParse .= << \${$d_val}): ?>
-EOT;
- $strParse .= $content;
- $strParse .= <<
-
-EOT;
- return $strParse;
- }
-
-
- /**
- * chapter info
- *
- * @param arrya $tag
- * @param string $content
- * @return void
- */
- public function tagInfo($tag)
- {
- $n_id = $tag['n_id'] ?? '0';
- $c_sort_num = $tag['c_sort_num'] ?? 0;
- $c_page = $tag['c_page'] ?? 0;
- $c_key = $tag['c_key'] ?? 'arrChapter';
-
- $n_id = $this->customBuildVar($n_id);
- $c_sort_num = $this->customBuildVar($c_sort_num);
- $c_page = $this->customBuildVar($c_page);
-
- $strParse = <<getChapterInfo(
- {$n_id},
- {$c_sort_num},
- {$c_page}
-);
-
-
- \${$c_key} = \$arrChapter ?? [];
-?>
-EOT;
-
- return $strParse;
- }
-}
diff --git a/code/extend/template/taglib/Novel.php b/code/extend/template/taglib/Novel.php
deleted file mode 100644
index 872a2ab..0000000
--- a/code/extend/template/taglib/Novel.php
+++ /dev/null
@@ -1,403 +0,0 @@
- ['attr' => 'count,n_category,sort_type,n_status,n_sex,diff_key,cache_life,d_key,d_val', 'close' => 1],
- 'pager' => ['attr' => 'page,limit,n_category,sort_type,n_status,n_sex,key,diff_key,cache_life,d_key,d_val,p_val,func,export_name', 'close' => 1],
- 'pagerexp' => ['attr' => 'page,limit,n_category,sort_type,n_status,n_sex,key,diff_key,cache_life,d_key,d_val,p_val,func,export_name', 'close' => 0],
- 'info' => ['attr' => 'n_id,n_key', 'close' => 0],
- 'sort' => ['attr' => 'd_key,d_val'],
- 'status' => ['attr' => 'd_key,d_val'],
- 'sex' => ['attr' => 'd_key,d_val'],
- 'category' => ['attr' => 'd_key,d_val,n_sex'],
-
- 'ranklist' => ['attr' => 'count,sort_type,n_status,n_sex,diff_key,cache_life,d_key,d_val', 'close' => 1],
- ];
-
- private function customBuildVar($mixedArgs)
- {
- if (substr($mixedArgs, 0, 1) == '$') {
- return $this->autoBuildVar($mixedArgs);
- } else {
- return is_numeric($mixedArgs) ? $mixedArgs : "'" . $mixedArgs . "'";
- }
- }
-
-
-
- /**
- * tagRankList
- *
- * @param array $tag
- * @param string $content
- * @return void
- */
- public function tagRankList($tag, $content)
- {
- $count = $tag['count'] ?? '10';
- $sort_type = $tag['sort_type'] ?? "";
- $n_status = $tag['n_status'] ?? "all";
- $n_sex = $tag['n_sex'] ?? "all";
-
- $diff_key = $tag['diff_key'] ?? "";
- $cache_life = $tag['cache_life'] ?? '0';
- $d_key = $tag['d_key'] ?? 'd_key';
- $d_val = $tag['d_val'] ?? 'd_val';
-
- $sort_type = $this->customBuildVar($sort_type);
- $n_status = $this->customBuildVar($n_status);
- $n_sex = $this->customBuildVar($n_sex);
- $diff_key = $this->customBuildVar($diff_key);
- $cache_life = $this->customBuildVar($cache_life);
-
- $arrDataName = randomString(5);
-
- $strParse = <<getRankList([
-'count' => {$count},
-'sort_type' => {$sort_type},
-'n_status' => {$n_status},
-'n_sex' => {$n_sex},
-'diff_key' => {$diff_key},
-'cache_life' => {$cache_life}
-]);
-
-if (!empty(\${$arrDataName}) && is_array(\${$arrDataName})):
-
-?>
-EOT;
- $strParse .= << \${$d_val}): ?>
-EOT;
- $strParse .= $content;
- $strParse .= <<
-
-EOT;
- return $strParse;
- }
-
-
- /**
- * tagPagerExp
- *
- * @param array $tag
- * @param string $content
- * @return void
- */
- public function tagPagerExp($tag, $content)
- {
- return $this->tagPager($tag, $content);
- }
-
- /**
- * tagPager
- *
- * @param array $tag
- * @param string $content
- * @return void
- */
- public function tagPager($tag, $content)
- {
- $page = $tag['page'] ?? '0';
- $limit = $tag['limit'] ?? '10';
- $button_num = $tag['button_num'] ?? '10';
- $n_category = $tag['n_category'] ?? "all";
- $sort_type = $tag['sort_type'] ?? "";
- $n_status = $tag['n_status'] ?? "";
- $n_sex = $tag['n_sex'] ?? "";
- $key = $tag['key'] ?? "";
- $diff_key = $tag['diff_key'] ?? "";
- $cache_life = $tag['cache_life'] ?? '0';
- $d_key = $tag['d_key'] ?? 'd_key';
- $d_val = $tag['d_val'] ?? 'd_val';
- $p_val = $tag['p_val'] ?? 'p_val';
-
- $export_name = $tag['export_name'] ?? '';
-
- $func = $tag['func'];
-
- $page = $this->customBuildVar($page);
- $limit = $this->customBuildVar($limit);
- $button_num = $this->customBuildVar($button_num);
- $n_category = $this->customBuildVar($n_category);
- $sort_type = $this->customBuildVar($sort_type);
- $n_status = $this->customBuildVar($n_status);
- $n_sex = $this->customBuildVar($n_sex);
- $key = $this->customBuildVar($key);
- $diff_key = $this->customBuildVar($diff_key);
- $cache_life = $this->customBuildVar($cache_life);
- $func = $this->customBuildVar($func);
-
- $arrDataName = randomString(5);
-
- $strParse = <<getNovelPager([
- 'page' => {$page},
- 'limit' => {$limit},
- 'button_num' => {$button_num},
- 'n_category' => {$n_category},
- 'sort_type' => {$sort_type},
- 'n_status' => {$n_status},
- 'n_sex' => {$n_sex},
- 'key' => {$key},
- 'diff_key' => {$diff_key},
- 'cache_life' => {$cache_life},
- 'func' => {$func},
-]);
-EOT;
-
-
- if (empty($export_name)) {
- $strParse .= <<
-EOT;
- $strParse .= << \${$d_val}): ?>
-EOT;
- $strParse .= $content;
- $strParse .= <<
-
-EOT;
- } else {
- $strParse .= <<
-EOT;
- }
-
- return $strParse;
- }
-
- /**
- * tagList
- *
- * @param array $tag
- * @param string $content
- * @return void
- */
- public function tagList($tag, $content)
- {
- $count = $tag['count'] ?? '10';
- $n_category = $tag['n_category'] ?? "all";
- $sort_type = $tag['sort_type'] ?? "";
- $n_status = $tag['n_status'] ?? "all";
- $n_sex = $tag['n_sex'] ?? "all";
- $diff_key = $tag['diff_key'] ?? "";
- $cache_life = $tag['cache_life'] ?? '0';
- $d_key = $tag['d_key'] ?? 'd_key';
- $d_val = $tag['d_val'] ?? 'd_val';
-
-
- $n_category = $this->customBuildVar($n_category);
- $sort_type = $this->customBuildVar($sort_type);
- $n_status = $this->customBuildVar($n_status);
- $n_sex = $this->customBuildVar($n_sex);
- $diff_key = $this->customBuildVar($diff_key);
- $cache_life = $this->customBuildVar($cache_life);
-
- $arrDataName = randomString(5);
-
- $strParse = <<getNovelList([
- 'count' => {$count},
- 'n_category' => {$n_category},
- 'sort_type' => {$sort_type},
- 'n_status' => {$n_status},
- 'n_sex' => {$n_sex},
- 'diff_key' => {$diff_key},
- 'cache_life' => {$cache_life}
-]);
-
-if (!empty(\${$arrDataName}) && is_array(\${$arrDataName})):
-
-?>
-EOT;
- $strParse .= << \${$d_val}): ?>
-EOT;
- $strParse .= $content;
- $strParse .= <<
-
-EOT;
- return $strParse;
- }
-
-
-
-
-
- /**
- * 获取小说详情
- *
- * @param array $tag
- * @param string $content
- * @return void
- */
- public function tagInfo($tag)
- {
- $n_id = $tag['n_id'] ?? '0';
- $n_forge_id = $tag['n_forge_id'] ?? 0;
-
- $n_key = $tag['n_key'] ?? 'arrNovel';
-
- $n_id = $this->customBuildVar($n_id);
-
- $strParse = <<getNovelByNId(
- {$n_id},
- {$n_forge_id}
-);
-
- \${$n_key} = \$novelData ?? [];
-?>
-EOT;
-
- return $strParse;
- }
-
- /**
- * 获取排序筛选参数
- *
- * @param array $tag
- * @param string $content
- * @return string
- */
- public function tagSort($tag, $content)
- {
-
- $d_key = $tag['d_key'] ?? 'd_key';
- $d_val = $tag['d_val'] ?? 'd_val';
-
- $strParse = <<arrSortType;
-
-if (!empty(\$arrSort) && is_array(\$arrSort)):
-
-?>
-EOT;
- $strParse .= << \${$d_val}): ?>
-EOT;
- $strParse .= $content;
- $strParse .= <<
-
-EOT;
- return $strParse;
- }
-
- /**
- * 获取状态筛选参数
- *
- * @param array $tag
- * @param string $content
- * @return string
- */
- public function tagStatus($tag, $content)
- {
-
- $d_key = $tag['d_key'] ?? 'd_key';
- $d_val = $tag['d_val'] ?? 'd_val';
-
- $strParse = <<arrStatus;
-
-if (!empty(\$arrStatus) && is_array(\$arrStatus)):
-
-?>
-EOT;
- $strParse .= << \${$d_val}): ?>
-EOT;
- $strParse .= $content;
- $strParse .= <<
-
-EOT;
- return $strParse;
- }
-
-
- /**
- * 获取状态筛选参数
- *
- * @param array $tag
- * @param string $content
- * @return string
- */
- public function tagSex($tag, $content)
- {
-
- $d_key = $tag['d_key'] ?? 'd_key';
- $d_val = $tag['d_val'] ?? 'd_val';
-
- $strParse = <<arrSex;
-
-if (!empty(\$arrSex) && is_array(\$arrSex)):
-
-?>
-EOT;
- $strParse .= << \${$d_val}): ?>
-EOT;
- $strParse .= $content;
- $strParse .= <<
-
-EOT;
- return $strParse;
- }
-
- /**
- * 获取状态筛选参数
- *
- * @param array $tag
- * @param string $content
- * @return string
- */
- public function tagCategory($tag, $content)
- {
-
- $d_key = $tag['d_key'] ?? 'd_key';
- $d_val = $tag['d_val'] ?? 'd_val';
- $n_sex = $tag['n_sex'] ?? '';
-
- $n_sex = $this->customBuildVar($n_sex);
-
- $strParse = <<getCategoryFilter( {$n_sex});
-
-if (!empty(\$arrCategory) && is_array(\$arrCategory)):
-
-?>
-EOT;
- $strParse .= << \${$d_val}): ?>
-EOT;
- $strParse .= $content;
- $strParse .= <<
-
-EOT;
- return $strParse;
- }
-}
diff --git a/code/extend/template/taglib/Rs.php b/code/extend/template/taglib/Rs.php
deleted file mode 100644
index 680db23..0000000
--- a/code/extend/template/taglib/Rs.php
+++ /dev/null
@@ -1,35 +0,0 @@
- ['attr' => 'order,limit,id', 'close' => 1]
- ];
-
- /**
- * list标签处理函数
- *
- * @param array $tag
- * @param string $content
- * @return string
- */
- public function tagList($tag, $content)
- {
- $order = $tag['order'] ?? 'asc';
- $limit = isset($tag['limit']) ? (int)$tag['limit'] : 10;
- $id = $tag['id'] ?? 'vo';
-
- $parse = <<
-{volist name="adRs" id="{$id}"}
-$content
-{/volist}
-EOD;
- return $parse;
- }
-}
diff --git a/code/extend/template/taglib/Site.php b/code/extend/template/taglib/Site.php
deleted file mode 100644
index d2c86bd..0000000
--- a/code/extend/template/taglib/Site.php
+++ /dev/null
@@ -1,364 +0,0 @@
- ['attr' => 'code,encode', 'close' => 0],
- 'wz' => ['attr' => 'wz', 'close' => 0],
- 'nurl' => ['attr' => 'n_id,n_py', 'close' => 0],
- 'nnurl' => ['attr' => 'n_id,n_py,n_fid', 'close' => 0],
- 'souurl' => ['attr' => 'key', 'close' => 0],
- 'cpurl' => ['attr' => 'n_id,n_py,c_sort,c_page', 'close' => 0],
- 'lcpurl' => ['attr' => 'n_id,n_py', 'close' => 0],
- 'nclurl' => ['attr' => 'n_id,n_py,order,page', 'close' => 0],
- 'nflurl' => ['attr' => 'gender,category,status,order,page', 'close' => 0],
- 'grm' => ['attr' => 'domain,code,line,diff,start,end,index,type', 'close' => 0],
- 'replace' => ['attr' => 'code', 'close' => 0],
-
- 'forgelist' => ['attr' => 'count,diff_key,cache_life,d_key,d_val', 'close' => 1],
- ];
-
- private function customBuildVar($mixedArgs)
- {
- if (substr($mixedArgs, 0, 1) == '$') {
- return $this->autoBuildVar($mixedArgs);
- } else {
- return is_numeric($mixedArgs) ? $mixedArgs : "'" . $mixedArgs . "'";
- }
- }
-
-
- /**
- * tagRankList
- *
- * @param array $tag
- * @param string $content
- * @return void
- */
- public function tagForgeList($tag, $content)
- {
- $count = $tag['count'] ?? '10';
- $diff_key = $tag['diff_key'] ?? "";
- $cache_life = $tag['cache_life'] ?? '0';
- $d_key = $tag['d_key'] ?? 'd_key';
- $d_val = $tag['d_val'] ?? 'd_val';
-
- $diff_key = $this->customBuildVar($diff_key);
- $cache_life = $this->customBuildVar($cache_life);
-
- $arrDataName = randomString(5);
-
- $strParse = <<getForgeList([
-'count' => {$count},
-'diff_key' => {$diff_key},
-'cache_life' => {$cache_life}
-]);
-
-if (!empty(\${$arrDataName}) && is_array(\${$arrDataName})):
-
-?>
-EOT;
- $strParse .= << \${$d_val}): ?>
-EOT;
- $strParse .= $content;
- $strParse .= <<
-
-EOT;
- return $strParse;
- }
-
- /**
- * cfg 标签处理函数-系统配置
- *
- * @param array $tag
- * @param string $content
- * @return string
- */
- public function tagCfg($tag)
- {
- $code = isset($tag['code']) ? $tag['code'] : '';
- $encode = isset($tag['encode']) ? $tag['encode'] : 'false';
-
- $parse = <<
-EOD;
- return $parse;
- }
-
- /**
- * 文字处理函数
- *
- * @param array $tag
- * @param string $content
- * @return string
- */
- public function tagWz($tag)
- {
- $strWords = isset($tag['wz']) ? $tag['wz'] : '';
-
- $parse = <<
-EOD;
- return $parse;
- }
-
- /**
- * 小说详情URL生成器
- *
- * @param array $n_id
- * @return string
- */
- public function tagNUrl($tag)
- {
- $intNId = isset($tag['n_id']) ? $tag['n_id'] : '';
- $strNPy = isset($tag['n_py']) ? $tag['n_py'] : '';
-
- $intNId = $this->customBuildVar($intNId);
- $strNPy = $this->customBuildVar($strNPy);
-
- $strParse = <<getNovelInfoUrl({$intNId},{$strNPy});
- echo \$strUrl;
-?>
-EOD;
- return $strParse;
- }
-
- /**
- * 伪小说详情URL生成器
- *
- * @param array $n_id
- * @return string
- */
- public function tagNNUrl($tag)
- {
- $intNId = isset($tag['n_id']) ? $tag['n_id'] : '';
- $strNPy = isset($tag['n_py']) ? $tag['n_py'] : '';
- $intNForgeId = isset($tag['n_fid']) ? $tag['n_fid'] : '';
-
- $intNId = $this->customBuildVar($intNId);
- $strNPy = $this->customBuildVar($strNPy);
- $intNForgeId = $this->customBuildVar($intNForgeId);
-
- $strParse = <<getForgeNovelInfoUrl({$intNId},{$strNPy},{$intNForgeId});
- echo \$strUrl;
-?>
-EOD;
- return $strParse;
- }
-
- /**
- * 小说章节URL生成器
- *
- * @param array $n_id
- * @return string
- */
- public function tagCPUrl($tag)
- {
- $intNId = isset($tag['n_id']) ? $tag['n_id'] : '';
- $strNPy = isset($tag['n_py']) ? $tag['n_py'] : '';
- $intChapterSort = isset($tag['c_sort']) ? $tag['c_sort'] : '';
- $intChapterPage = isset($tag['c_page']) ? $tag['c_page'] : 0;
-
- $intNId = $this->customBuildVar($intNId);
- $strNPy = $this->customBuildVar($strNPy);
- $intChapterSort = $this->customBuildVar($intChapterSort);
- $intChapterPage = $this->customBuildVar($intChapterPage);
-
- $strParse = <<getNovelChapterUrl({$intNId},{$strNPy},{$intChapterSort},{$intChapterPage});
- echo \$strUrl;
-?>
-EOD;
- return $strParse;
- }
-
- /**
- * 小说最新章节URL生成器
- *
- * @param array $n_id
- * @return string
- */
- public function tagLCPUrl($tag)
- {
- $intNId = isset($tag['n_id']) ? $tag['n_id'] : '';
- $strNPy = isset($tag['n_py']) ? $tag['n_py'] : '';
-
- $intNId = $this->customBuildVar($intNId);
- $strNPy = $this->customBuildVar($strNPy);
-
- $strParse = <<getNovelLasterChapterUrl({$intNId},{$strNPy});
- echo \$strUrl;
-?>
-EOD;
- return $strParse;
- }
-
- /**
- * 小说目录URL生成器
- *
- * @param array $n_id
- * @return string
- */
- public function tagNClUrl($tag)
- {
- $intNId = isset($tag['n_id']) ? $tag['n_id'] : '';
- $strNPy = isset($tag['n_py']) ? $tag['n_py'] : '';
- $strOrder = isset($tag['order']) ? $tag['order'] : '';
- $intPage = isset($tag['page']) ? $tag['page'] : '';
-
- $intNId = $this->customBuildVar($intNId);
- $strNPy = $this->customBuildVar($strNPy);
- $strOrder = $this->customBuildVar($strOrder);
- $intPage = $this->customBuildVar($intPage);
-
- $strParse = <<getNovelCatalogUrl({$intNId},{$strNPy},{$strOrder},{$intPage});
- echo \$strUrl;
-?>
-EOD;
- return $strParse;
- }
-
- /**
- * 小说书库/分类 URL生成器
- *
- * @param array $n_id
- * @return string
- */
- public function tagNFLUrl($tag)
- {
- $strGender = isset($tag['gender']) ? $tag['gender'] : 'all';
- $strCategory = isset($tag['category']) ? $tag['category'] : 'all';
- $strStatus = isset($tag['status']) ? $tag['status'] : 'all';
- $strOrder = isset($tag['order']) ? $tag['order'] : 'all';
- $intPage = isset($tag['page']) ? $tag['page'] : 1;
-
- $strGender = $this->customBuildVar($strGender);
- $strCategory = $this->customBuildVar($strCategory);
- $strStatus = $this->customBuildVar($strStatus);
- $strOrder = $this->customBuildVar($strOrder);
- $intPage = $this->customBuildVar($intPage);
-
- $strParse = <<getNovelCategoryUrl({$strGender},{$strCategory},{$strStatus},{$strOrder},{$intPage});
- echo \$strUrl;
-?>
-EOD;
- return $strParse;
- }
-
- /**
- * 搜索页URL生成器
- *
- * @param array $key
- * @return string
- */
- public function tagSouUrl($tag)
- {
- $strKey = isset($tag['key']) ? $tag['key'] : '';
- $intPage = isset($tag['p']) ? $tag['p'] : '';
-
- $strKey = $this->customBuildVar($strKey);
- $intPage = $this->customBuildVar($intPage);
-
- $strParse = <<getNovelSearchUrl({$strKey},{$intPage});
- echo \$strUrl;
-?>
-EOD;
- return $strParse;
- }
-
-
-
-
-
-
- /**
- * 内容替换
- *
- * @param array
- * @return string
- */
- public function tagReplace($tag)
- {
- $strCode = isset($tag['code']) ? $tag['code'] : '';
-
- $strParse = <<converterTemplate("{$strCode}");
- echo \$strUrl;
-?>
-EOD;
- return $strParse;
- }
-
-
-
- /**
- * get grm
- *
- * @param arrya $tag
- * @param string $content
- * @return void
- */
- public function tagGrm($tag)
- {
-
- $page_code = $tag['page_code'] ?? '';
- $diff = $tag['diff'] ?? '';
- $num = $tag['num'] ?? 1;
- $g_key = $tag['g_key'] ?? 'arrGrm';
-
- $page_code = $this->customBuildVar($page_code);
- $diff = $this->customBuildVar($diff);
- $num = $this->customBuildVar($num);
- // var_dump($page_code);
- // var_dump($diff);
- // var_dump($num);
- // exit;
- $arrDataName = randomString(5);
-
- $strParse = <<generateGrm(
- {$page_code},
- {$diff},
- {$num}
-);
-
- \${$g_key} = \${$arrDataName} ?? [];
-?>
-EOT;
-
- return $strParse;
- }
-}
diff --git a/code/extend/template/ziku/WordsEntities.php b/code/extend/template/ziku/WordsEntities.php
deleted file mode 100644
index a478f99..0000000
--- a/code/extend/template/ziku/WordsEntities.php
+++ /dev/null
@@ -1,17 +0,0 @@
-
- Options +FollowSymlinks -Multiviews
- RewriteEngine On
-
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
-
diff --git a/code/public/403.html b/code/public/403.html
deleted file mode 100644
index eac94be..0000000
--- a/code/public/403.html
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
- 404 - 页面未找到
-
-
-
-
-
-
403
-
Too Many Requests
-
5 秒后将自动返回上一页。
-
倒计时:5 秒
-
或者 点击这里返回首页。
-
-
-
diff --git a/code/public/404.html b/code/public/404.html
deleted file mode 100644
index 06ab31e..0000000
--- a/code/public/404.html
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
- 404 - 页面未找到
-
-
-
-
-
-
404
-
抱歉,您访问的页面不存在。
-
5 秒后将自动返回上一页。
-
倒计时:5 秒
-
或者 点击这里返回首页。
-
-
-
diff --git a/code/public/favicon.ico b/code/public/favicon.ico
deleted file mode 100644
index 3f2817f..0000000
Binary files a/code/public/favicon.ico and /dev/null differ
diff --git a/code/public/index.php b/code/public/index.php
deleted file mode 100644
index c3b7842..0000000
--- a/code/public/index.php
+++ /dev/null
@@ -1,25 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-use think\App;
-
-// [ 应用入口文件 ]
-
-require __DIR__ . '/../vendor/autoload.php';
-
-// 执行HTTP应用并响应
-$http = (new App())->http;
-
-$response = $http->run();
-
-$response->send();
-
-$http->end($response);
diff --git a/code/public/initdata/novel/getCatalog/description.php b/code/public/initdata/novel/getCatalog/description.php
deleted file mode 100644
index 113263f..0000000
--- a/code/public/initdata/novel/getCatalog/description.php
+++ /dev/null
@@ -1,155 +0,0 @@
- [
- 'description' => '首页Title 模板分组',
- 'sfg_id' => 1,
- 'arrSubjectFomart' => [
- '{strIndexTitle}',
- ]
- ],
- 'INDEX@INDEX@KEYWORDS' => [
- 'description' => '首页Keywords 模板分组',
- 'sfg_id' => 2,
- 'arrSubjectFomart' => [
- '{strIndexKeywords}',
- ]
- ],
- 'INDEX@INDEX@DESCRIPTION' => [
- 'description' => '首页Description 模板分组',
- 'sfg_id' => 3,
- 'arrSubjectFomart' => [
- '{strIndexDescription}',
- ]
- ],
-
- 'NOVEL@GETLIBRARY@TITLE' => [
- 'description' => '分类书库Title 模板分组',
- 'sfg_id' => 4,
- 'arrSubjectFomart' => $arrLibraryTitleTemp,
- ],
- 'NOVEL@GETLIBRARY@KEYWORDS' => [
- 'description' => '分类书库Keywords 模板分组',
- 'sfg_id' => 5,
- 'arrSubjectFomart' => $arrLibraryKeyswordTemp,
- ],
- 'NOVEL@GETLIBRARY@DESCRIPTION' => [
- 'description' => '分类书库Description 模板分组',
- 'sfg_id' => 6,
- 'arrSubjectFomart' => $arrLibraryDescriptionTemp,
- ],
-
- 'NOVEL@GETNOVELCHANNEL@TITLE' => [
- 'description' => '男女生Title 模板分组',
- 'sfg_id' => 7,
- 'arrSubjectFomart' => $arrSexTitleTemp,
- ],
- 'NOVEL@GETNOVELCHANNEL@KEYWORDS' => [
- 'description' => '男女生Keywords 模板分组',
- 'sfg_id' => 8,
- 'arrSubjectFomart' => $arrSexTitleTemp,
- ],
- 'NOVEL@GETNOVELCHANNEL@DESCRIPTION' => [
- 'description' => '男女生Description 模板分组',
- 'sfg_id' => 9,
- 'arrSubjectFomart' => $arrSexKeyswordTemp,
- ],
-
- 'NOVEL@GETNOVELINFO@TITLE' => [
- 'description' => '详情Title 模板分组',
- 'sfg_id' => 10,
- 'arrSubjectFomart' => $arrSexDescriptionTemp,
-
- ],
- 'NOVEL@GETNOVELINFO@KEYWORDS' => [
- 'description' => '详情Keywords 模板分组',
- 'sfg_id' => 11,
- 'arrSubjectFomart' => $arrNovelKeyswordTemp,
- ],
- 'NOVEL@GETNOVELINFO@DESCRIPTION' => [
- 'description' => '详情Description 模板分组',
- 'sfg_id' => 12,
- 'arrSubjectFomart' => $arrNovelDescriptionTemp,
- ],
-
- 'NOVEL@GETNOVELCATALOG@TITLE' => [
- 'description' => '目录Title 模板分组',
- 'sfg_id' => 13,
- 'arrSubjectFomart' => $arrCatalogTitleTemp,
- ],
- 'NOVEL@GETNOVELCATALOG@KEYWORDS' => [
- 'description' => '目录Keywords 模板分组',
- 'sfg_id' => 14,
- 'arrSubjectFomart' => $arrCatalogKeyswordTemp,
- ],
- 'NOVEL@GETNOVELCATALOG@DESCRIPTION' => [
- 'description' => '目录Description 模板分组',
- 'sfg_id' => 15,
- 'arrSubjectFomart' => $arrCatalogDescriptionTemp,
- ],
-
- 'NOVEL@GETNOVELCHAPTER@TITLE' => [
- 'description' => '内容Title 模板分组',
- 'sfg_id' => 16,
- 'arrSubjectFomart' => $arrChapterTitleTemp
- ],
- 'NOVEL@GETNOVELCHAPTER@KEYWORDS' => [
- 'description' => '内容Keywords 模板分组',
- 'sfg_id' => 17,
- 'arrSubjectFomart' => $arrChapterKeyswordTemp,
- ],
- 'NOVEL@GETNOVELCHAPTER@DESCRIPTION' => [
- 'description' => '内容Description 模板分组',
- 'sfg_id' => 18,
- 'arrSubjectFomart' => $arrChapterDescriptionTemp,
- ],
-
- 'NOVEL@GETNOVELRANK@TITLE' => [
- 'description' => '排行榜Title 模板分组',
- 'sfg_id' => 19,
- 'arrSubjectFomart' => $arrRankTitleTemp,
- ],
- 'NOVEL@GETNOVELRANK@KEYWORDS' => [
- 'description' => '排行榜Keywords 模板分组',
- 'sfg_id' => 20,
- 'arrSubjectFomart' => $arrRankKeyswordTemp,
- ],
- 'NOVEL@GETNOVELRANK@DESCRIPTION' => [
- 'description' => '排行榜Description 模板分组',
- 'sfg_id' => 21,
- 'arrSubjectFomart' => $arrRankDescriptionTemp,
- ],
- 'NOVEL@GETSEARCHNOVEL@TITLE' => [
- 'description' => '搜索页Title 模板分组',
- 'sfg_id' => 22,
- 'arrSubjectFomart' => $arrSearchTitleTemp,
- ],
- 'NOVEL@GETSEARCHNOVEL@KEYWORDS' => [
- 'description' => '搜索页Keywords 模板分组',
- 'sfg_id' => 23,
- 'arrSubjectFomart' => $arrSearchKeyswordTemp,
- ],
- 'NOVEL@GETSEARCHNOVEL@DESCRIPTION' => [
- 'description' => '搜索页Description 模板分组',
- 'sfg_id' => 24,
- 'arrSubjectFomart' => $arrSearchDescriptionTemp,
- ],
-
- // SEO 丰富内容
- 'INDEX_POPULAR_NOVELS' => [
- 'description' => '首页热门小说介绍 模板分组',
- 'sfg_id' => 35,
- 'arrSubjectFomart' => $arrIndexHostTemp,
- ],
- 'INDEX_NEWS_NOVELS' => [
- 'description' => '首页最新小说介绍 模板分组',
- 'sfg_id' => 37,
- 'arrSubjectFomart' => $arrIndexNewsTemp,
- ],
- 'INDEX_RANK_NOVELS' => [
- 'description' => '首页小说排行榜介绍 模板分组',
- 'sfg_id' => 38,
- 'arrSubjectFomart' => $arrIndexRankTemp,
- ],
-];
-return $arrTKDSubjectFomartGroupData;
diff --git a/code/public/initdata/novel/urlSubjectFomartGroup.php b/code/public/initdata/novel/urlSubjectFomartGroup.php
deleted file mode 100644
index e2d8d91..0000000
--- a/code/public/initdata/novel/urlSubjectFomartGroup.php
+++ /dev/null
@@ -1,575 +0,0 @@
- [
- 'description' => '分类书库URL 模板2',
- 'sfg_id' => 39,
- 'arrSubjectFomart' => [
- '/books/{strGender}/{strCategory}/{strStatus}/{strOrder}/page{intPage}',
- ]
- ],
- 'CATEGORY_INFO_URL_T3' => [
- 'description' => '分类书库URL 模板3',
- 'sfg_id' => 40,
- 'arrSubjectFomart' => [
- '/library/{strGender}/{strCategory}/{strStatus}/{strOrder}/page{intPage}',
- ]
- ],
- 'CATEGORY_INFO_URL_T4' => [
- 'description' => '分类书库URL 模板4',
- 'sfg_id' => 41,
- 'arrSubjectFomart' => [
- '/fenlei/{strGender}/{strCategory}/{strStatus}/{strOrder}/page{intPage}',
- ]
- ],
- 'CATEGORY_INFO_URL_T5' => [
- 'description' => '分类书库URL 模板5',
- 'sfg_id' => 42,
- 'arrSubjectFomart' => [
- '/class/{strGender}/{strCategory}/{strStatus}/{strOrder}/page{intPage}',
- ]
- ],
- 'CATEGORY_INFO_URL_T6' => [
- 'description' => '分类书库URL 模板6',
- 'sfg_id' => 43,
- 'arrSubjectFomart' => [
- '/category/{strGender}/{strCategory}/{strStatus}/{strOrder}/page{intPage}',
- ]
- ],
-
- // 男生小说频道URL 模板1
- 'NAN_SHENG_URL_T2' => [
- 'description' => '男生URL 模板2',
- 'sfg_id' => 44,
- 'arrSubjectFomart' => [
- '/boys-novel'
- ]
- ],
- 'NAN_SHENG_URL_T3' => [
- 'description' => '男生URL 模板3',
- 'sfg_id' => 45,
- 'arrSubjectFomart' => [
- '/nansheng-shu'
- ]
- ],
- 'NAN_SHENG_URL_T4' => [
- 'description' => '男生URL 模板4',
- 'sfg_id' => 46,
- 'arrSubjectFomart' => [
- '/man-read'
- ]
- ],
- 'NAN_SHENG_URL_T5' => [
- 'description' => '男生URL 模板5',
- 'sfg_id' => 47,
- 'arrSubjectFomart' => [
- '/nansheng-book'
- ]
- ],
- 'NAN_SHENG_URL_T6' => [
- 'description' => '男生URL 模板6',
- 'sfg_id' => 48,
- 'arrSubjectFomart' => [
- '/male-novels'
- ]
- ],
-
-
- // 女生小说频道URL 模板1
- 'NV_SHENG_URL_T2' => [
- 'description' => '女生URL 模板2',
- 'sfg_id' => 49,
- 'arrSubjectFomart' => [
- '/girls-novel'
- ]
- ],
- 'NV_SHENG_URL_T3' => [
- 'description' => '女生URL 模板3',
- 'sfg_id' => 50,
- 'arrSubjectFomart' => [
- '/nvsheng-shu'
- ]
- ],
- 'NV_SHENG_URL_T4' => [
- 'description' => '女生URL 模板4',
- 'sfg_id' => 51,
- 'arrSubjectFomart' => [
- '/woman-read'
- ]
- ],
- 'NV_SHENG_URL_T5' => [
- 'description' => '女生URL 模板5',
- 'sfg_id' => 52,
- 'arrSubjectFomart' => [
- '/nvsheng-book'
- ]
- ],
- 'NV_SHENG_URL_T6' => [
- 'description' => '女生URL 模板6',
- 'sfg_id' => 53,
- 'arrSubjectFomart' => [
- '/female-novels'
- ]
- ],
-
- // 排行榜
- 'RANK_INFO_URL_T2' => [
- 'description' => '排行榜URL 模板2',
- 'sfg_id' => 54,
- 'arrSubjectFomart' => [
- '/rank/all'
- ]
- ],
- 'RANK_INFO_URL_T3' => [
- 'description' => '排行榜URL 模板3',
- 'sfg_id' => 55,
- 'arrSubjectFomart' => [
- '/paihang-quan'
- ]
- ],
- 'RANK_INFO_URL_T4' => [
- 'description' => '排行榜URL 模板4',
- 'sfg_id' => 56,
- 'arrSubjectFomart' => [
- '/top/all'
- ]
- ],
- 'RANK_INFO_URL_T5' => [
- 'description' => '排行榜URL 模板5',
- 'sfg_id' => 57,
- 'arrSubjectFomart' => [
- '/paihang-bang'
- ]
- ],
- 'RANK_INFO_URL_T6' => [
- 'description' => '排行榜URL 模板6',
- 'sfg_id' => 58,
- 'arrSubjectFomart' => [
- '/ranks/all'
- ]
- ],
-
- // 小说详情 url
- 'NOVEL_INFO_URL_T2' => [
- 'description' => '小说详情URL 模板2',
- 'sfg_id' => 59,
- 'arrSubjectFomart' => [
- '/novel/{strPinYin}-{intNId}',
- ]
- ],
- 'NOVEL_INFO_URL_T3' => [
- 'description' => '小说详情URL 模板3',
- 'sfg_id' => 60,
- 'arrSubjectFomart' => [
- '/book/{strPinYin}-{intNId}',
- ]
- ],
- 'NOVEL_INFO_URL_T4' => [
- 'description' => '小说详情URL 模板4',
- 'sfg_id' => 61,
- 'arrSubjectFomart' => [
- '/xiaoshuo-{strPinYin}-{intNId}',
- ]
- ],
- 'NOVEL_INFO_URL_T5' => [
- 'description' => '小说详情URL 模板5',
- 'sfg_id' => 62,
- 'arrSubjectFomart' => [
- '/novel-{strPinYin}-{intNId}',
- ]
- ],
- 'NOVEL_INFO_URL_T6' => [
- 'description' => '小说详情URL 模板6',
- 'sfg_id' => 63,
- 'arrSubjectFomart' => [
- '/book-{strPinYin}-{intNId}',
- ]
- ],
-
- // 伪小说详情 url
- 'KAN_NOVEL_INFO_URL_T2' => [
- 'description' => '伪小说详情URL 模板2',
- 'sfg_id' => 64,
- 'arrSubjectFomart' => [
- '/kan-novel/{strPinYin}-{intNId}-{intNForgeId}',
- ]
- ],
- 'KAN_NOVEL_INFO_URL_T3' => [
- 'description' => '伪小说详情URL 模板3',
- 'sfg_id' => 65,
- 'arrSubjectFomart' => [
- '/kan-book/{strPinYin}-{intNId}-{intNForgeId}',
- ]
- ],
- 'KAN_NOVEL_INFO_URL_T4' => [
- 'description' => '伪小说详情URL 模板4',
- 'sfg_id' => 66,
- 'arrSubjectFomart' => [
- '/kan-xiaoshuo-{strPinYin}-{intNId}-{intNForgeId}',
- ]
- ],
- 'KAN_NOVEL_INFO_URL_T5' => [
- 'description' => '伪小说详情URL 模板5',
- 'sfg_id' => 67,
- 'arrSubjectFomart' => [
- '/kan-novel-{strPinYin}-{intNId}-{intNForgeId}',
- ]
- ],
- 'KAN_NOVEL_INFO_URL_T6' => [
- 'description' => '伪小说详情URL 模板6',
- 'sfg_id' => 68,
- 'arrSubjectFomart' => [
- '/kan-book-{strPinYin}-{intNId}-{intNForgeId}',
- ]
- ],
-
- // 小说详情目录 url
- 'NOVEL_CATALOG_URL_T2' => [
- 'description' => '小说目录URL 模板2',
- 'sfg_id' => 69,
- 'arrSubjectFomart' => [
- '/novel/{strPinYin}-{intNId}/catalog/{strOrder}/{intPage}',
- ]
- ],
- 'NOVEL_CATALOG_URL_T3' => [
- 'description' => '小说目录URL 模板3',
- 'sfg_id' => 70,
- 'arrSubjectFomart' => [
- '/book/{strPinYin}-{intNId}/table/{strOrder}/{intPage}',
- ]
- ],
- 'NOVEL_CATALOG_URL_T4' => [
- 'description' => '小说目录URL 模板4',
- 'sfg_id' => 71,
- 'arrSubjectFomart' => [
- '/xiaoshuo-{strPinYin}-{intNId}/mulu/{strOrder}/{intPage}',
- ]
- ],
- 'NOVEL_CATALOG_URL_T5' => [
- 'description' => '小说目录URL 模板5',
- 'sfg_id' => 72,
- 'arrSubjectFomart' => [
- '/novel-{strPinYin}-{intNId}/catalog/{strOrder}/{intPage}',
- ]
- ],
- 'NOVEL_CATALOG_URL_T6' => [
- 'description' => '小说目录URL 模板6',
- 'sfg_id' => 73,
- 'arrSubjectFomart' => [
- '/book-{strPinYin}-{intNId}/table/{strOrder}/{intPage}',
- ]
- ],
-
- // 小说章节 url
- 'CONTENT_INFO_URL_T2' => [
- 'description' => '内容章节URL 模板2',
- 'sfg_id' => 74,
- 'arrSubjectFomart' => [
- '/novel/{strPinYin}-{intNId}/zhang-{intChapterSort}/{intChapterPage}',
- ]
- ],
- 'CONTENT_INFO_URL_T3' => [
- 'description' => '内容章节URL 模板3',
- 'sfg_id' => 75,
- 'arrSubjectFomart' => [
- '/book/{strPinYin}-{intNId}/zhang-{intChapterSort}/{intChapterPage}',
- ]
- ],
- 'CONTENT_INFO_URL_T4' => [
- 'description' => '内容章节URL 模板4',
- 'sfg_id' => 76,
- 'arrSubjectFomart' => [
- '/xiaoshuo-{strPinYin}-{intNId}/zhang-{intChapterSort}/{intChapterPage}',
- ]
- ],
- 'CONTENT_INFO_URL_T5' => [
- 'description' => '内容章节URL 模板5',
- 'sfg_id' => 77,
- 'arrSubjectFomart' => [
- '/novel-{strPinYin}-{intNId}/zhang-{intChapterSort}/{intChapterPage}',
- ]
- ],
- 'CONTENT_INFO_URL_T6' => [
- 'description' => '内容章节URL 模板6',
- 'sfg_id' => 78,
- 'arrSubjectFomart' => [
- '/book-{strPinYin}-{intNId}/zhang-{intChapterSort}/{intChapterPage}',
- ]
- ],
-
- /**
- * 小说最新内容 url
- * '/xiaoshuo/{strPinYin}-{intNId}/chapter/latest',
- * '/novel/{strPinYin}-{intNId}/chapter/latest',
- * '/book/{strPinYin}-{intNId}/chapter/latest',
- * '/xiaoshuo-{strPinYin}-{intNId}/chapter/latest',
- * '/novel-{strPinYin}-{intNId}/chapter/latest',
- * '/book-{strPinYin}-{intNId}/chapter/latest',
- */
- 'NEWS_CONTENT_INFO_URL_T2' => [
- 'description' => '最新内容章节URL 模板2',
- 'sfg_id' => 79,
- 'arrSubjectFomart' => [
- '/novel/{strPinYin}-{intNId}/chapter/latest',
- ]
- ],
- 'NEWS_CONTENT_INFO_URL_T3' => [
- 'description' => '最新内容章节URL 模板3',
- 'sfg_id' => 80,
- 'arrSubjectFomart' => [
- '/book/{strPinYin}-{intNId}/chapter/latest',
- ]
- ],
- 'NEWS_CONTENT_INFO_URL_T4' => [
- 'description' => '最新内容章节URL 模板4',
- 'sfg_id' => 81,
- 'arrSubjectFomart' => [
- '/xiaoshuo-{strPinYin}-{intNId}/chapter/latest',
- ]
- ],
- 'NEWS_CONTENT_INFO_URL_T5' => [
- 'description' => '最新内容章节URL 模板5',
- 'sfg_id' => 82,
- 'arrSubjectFomart' => [
- '/novel-{strPinYin}-{intNId}/chapter/latest',
- ]
- ],
- 'NEWS_CONTENT_INFO_URL_T6' => [
- 'description' => '最新内容章节URL 模板6',
- 'sfg_id' => 83,
- 'arrSubjectFomart' => [
- '/book-{strPinYin}-{intNId}/chapter/latest',
- ]
- ],
-
- // 搜索页
- 'SEARCH_INFO_URL_T2' => [
- 'description' => '搜索页URL 模板2',
- 'sfg_id' => 84,
- 'arrSubjectFomart' => [
- '/explore.html?keyword={strSearchKeywords}&page={intPage}',
- ]
- ],
- 'SEARCH_INFO_URL_T3' => [
- 'description' => '搜索页URL 模板3',
- 'sfg_id' => 85,
- 'arrSubjectFomart' => [
- '/sousuo.html?keyword={strSearchKeywords}&page={intPage}',
- ]
- ],
- 'SEARCH_INFO_URL_T4' => [
- 'description' => '搜索页URL 模板4',
- 'sfg_id' => 86,
- 'arrSubjectFomart' => [
- '/find.html?keyword={strSearchKeywords}&page={intPage}',
- ]
- ],
- 'SEARCH_INFO_URL_T5' => [
- 'description' => '搜索页URL 模板5',
- 'sfg_id' => 87,
- 'arrSubjectFomart' => [
- '/query.html?keyword={strSearchKeywords}&page={intPage}',
- ]
- ],
- 'SEARCH_INFO_URL_T6' => [
- 'description' => '搜索页URL 模板6',
- 'sfg_id' => 88,
- 'arrSubjectFomart' => [
- '/keywords.html?keyword={strSearchKeywords}&page={intPage}',
- ]
- ],
-
- // 历史记录
- 'HISTORY_INFO_URL_T2' => [
- 'description' => '历史记录URL 模板2',
- 'sfg_id' => 92,
- 'arrSubjectFomart' => [
- '/reading-history',
- ]
- ],
- 'HISTORY_INFO_URL_T3' => [
- 'description' => '历史记录URL 模板3',
- 'sfg_id' => 93,
- 'arrSubjectFomart' => [
- '/read-record',
- ]
- ],
- 'HISTORY_INFO_URL_T4' => [
- 'description' => '历史记录URL 模板4',
- 'sfg_id' => 94,
- 'arrSubjectFomart' => [
- '/lishi',
- ]
- ],
- 'HISTORY_INFO_URL_T5' => [
- 'description' => '历史记录URL 模板5',
- 'sfg_id' => 95,
- 'arrSubjectFomart' => [
- '/yuedu-lishi',
- ]
- ],
- 'HISTORY_INFO_URL_T6' => [
- 'description' => '历史记录URL 模板6',
- 'sfg_id' => 96,
- 'arrSubjectFomart' => [
- '/browse-past',
- ]
- ],
-
- // 书架
- 'SHUJIA_INFO_URL_T2' => [
- 'description' => '书架URL 模板2',
- 'sfg_id' => 97,
- 'arrSubjectFomart' => [
- '/book-shelf',
- ]
- ],
- 'SHUJIA_INFO_URL_T3' => [
- 'description' => '书架URL 模板3',
- 'sfg_id' => 98,
- 'arrSubjectFomart' => [
- '/reading-shelf',
- ]
- ],
- 'SHUJIA_INFO_URL_T4' => [
- 'description' => '书架URL 模板4',
- 'sfg_id' => 99,
- 'arrSubjectFomart' => [
- '/shujia',
- ]
- ],
- 'SHUJIA_INFO_URL_T5' => [
- 'description' => '书架URL 模板5',
- 'sfg_id' => 100,
- 'arrSubjectFomart' => [
- '/yuedu-shujia',
- ]
- ],
- 'SHUJIA_INFO_URL_T6' => [
- 'description' => '书架URL 模板6',
- 'sfg_id' => 101,
- 'arrSubjectFomart' => [
- '/book-collection',
- ]
- ],
-
- // 用户中心
- 'USER_INFO_URL_T2' => [
- 'description' => '用户中心URL 模板2',
- 'sfg_id' => 102,
- 'arrSubjectFomart' => [
- '/my-account',
- ]
- ],
- 'USER_INFO_URL_T3' => [
- 'description' => '用户中心URL 模板3',
- 'sfg_id' => 103,
- 'arrSubjectFomart' => [
- '/profile',
- ]
- ],
- 'USER_INFO_URL_T4' => [
- 'description' => '用户中心URL 模板4',
- 'sfg_id' => 104,
- 'arrSubjectFomart' => [
- '/yonghu',
- ]
- ],
- 'USER_INFO_URL_T5' => [
- 'description' => '用户中心URL 模板5',
- 'sfg_id' => 105,
- 'arrSubjectFomart' => [
- '/wode-zhongxin',
- ]
- ],
- 'USER_INFO_URL_T6' => [
- 'description' => '用户中心URL 模板6',
- 'sfg_id' => 106,
- 'arrSubjectFomart' => [
- '/personal-center',
- ]
- ],
-
- // 书库首页
- 'CATEGORY_INDEX_URL_T2' => [
- 'description' => '书库首页URL 模板2',
- 'sfg_id' => 109,
- 'arrSubjectFomart' => [
- '/books/index',
- ]
- ],
- 'CATEGORY_INDEX_URL_T3' => [
- 'description' => '书库首页URL 模板3',
- 'sfg_id' => 110,
- 'arrSubjectFomart' => [
- '/library/index',
- ]
- ],
- 'CATEGORY_INDEX_URL_T4' => [
- 'description' => '书库首页URL 模板4',
- 'sfg_id' => 111,
- 'arrSubjectFomart' => [
- '/fenlei/index',
- ]
- ],
- 'CATEGORY_INDEX_URL_T5' => [
- 'description' => '书库首页URL 模板5',
- 'sfg_id' => 112,
- 'arrSubjectFomart' => [
- '/class/index',
- ]
- ],
- 'CATEGORY_INDEX_URL_T6' => [
- 'description' => '书库首页URL 模板6',
- 'sfg_id' => 113,
- 'arrSubjectFomart' => [
- '/category/index',
- ]
- ],
-
- // 搜索首页
- 'SEARCH_INDEX_URL_T2' => [
- 'description' => '搜索首页URL 模板2',
- 'sfg_id' => 115,
- 'arrSubjectFomart' => [
- '/explore.html',
- ]
- ],
- 'SEARCH_INDEX_URL_T3' => [
- 'description' => '搜索首页URL 模板3',
- 'sfg_id' => 116,
- 'arrSubjectFomart' => [
- '/sousuo.html',
- ]
- ],
- 'SEARCH_INDEX_URL_T4' => [
- 'description' => '搜索首页URL 模板4',
- 'sfg_id' => 117,
- 'arrSubjectFomart' => [
- '/find.html',
- ]
- ],
- 'SEARCH_INDEX_URL_T5' => [
- 'description' => '搜索首页URL 模板5',
- 'sfg_id' => 118,
- 'arrSubjectFomart' => [
- '/query.html',
- ]
- ],
- 'SEARCH_INDEX_URL_T6' => [
- 'description' => '搜索首页URL 模板6',
- 'sfg_id' => 119,
- 'arrSubjectFomart' => [
- '/keywords.html',
- ]
- ],
-
-
- // 最新替换模板分组id 119
-
-];
diff --git a/code/public/public/jquery/jquery-3.7.1.min.js b/code/public/public/jquery/jquery-3.7.1.min.js
deleted file mode 100644
index 1cded40..0000000
--- a/code/public/public/jquery/jquery-3.7.1.min.js
+++ /dev/null
@@ -1,4146 +0,0 @@
-/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
-!function(e, t) {
- "use strict";
- "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function(e) {
- if (!e.document)
- throw new Error("jQuery requires a window with a document");
- return t(e)
- }
- : t(e)
-}("undefined" != typeof window ? window : this, function(ie, e) {
- "use strict";
- var oe = []
- , r = Object.getPrototypeOf
- , ae = oe.slice
- , g = oe.flat ? function(e) {
- return oe.flat.call(e)
- }
- : function(e) {
- return oe.concat.apply([], e)
- }
- , s = oe.push
- , se = oe.indexOf
- , n = {}
- , i = n.toString
- , ue = n.hasOwnProperty
- , o = ue.toString
- , a = o.call(Object)
- , le = {}
- , v = function(e) {
- return "function" == typeof e && "number" != typeof e.nodeType && "function" != typeof e.item
- }
- , y = function(e) {
- return null != e && e === e.window
- }
- , C = ie.document
- , u = {
- type: !0,
- src: !0,
- nonce: !0,
- noModule: !0
- };
- function m(e, t, n) {
- var r, i, o = (n = n || C).createElement("script");
- if (o.text = e,
- t)
- for (r in u)
- (i = t[r] || t.getAttribute && t.getAttribute(r)) && o.setAttribute(r, i);
- n.head.appendChild(o).parentNode.removeChild(o)
- }
- function x(e) {
- return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n[i.call(e)] || "object" : typeof e
- }
- var t = "3.7.1"
- , l = /HTML$/i
- , ce = function(e, t) {
- return new ce.fn.init(e,t)
- };
- function c(e) {
- var t = !!e && "length"in e && e.length
- , n = x(e);
- return !v(e) && !y(e) && ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e)
- }
- function fe(e, t) {
- return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
- }
- ce.fn = ce.prototype = {
- jquery: t,
- constructor: ce,
- length: 0,
- toArray: function() {
- return ae.call(this)
- },
- get: function(e) {
- return null == e ? ae.call(this) : e < 0 ? this[e + this.length] : this[e]
- },
- pushStack: function(e) {
- var t = ce.merge(this.constructor(), e);
- return t.prevObject = this,
- t
- },
- each: function(e) {
- return ce.each(this, e)
- },
- map: function(n) {
- return this.pushStack(ce.map(this, function(e, t) {
- return n.call(e, t, e)
- }))
- },
- slice: function() {
- return this.pushStack(ae.apply(this, arguments))
- },
- first: function() {
- return this.eq(0)
- },
- last: function() {
- return this.eq(-1)
- },
- even: function() {
- return this.pushStack(ce.grep(this, function(e, t) {
- return (t + 1) % 2
- }))
- },
- odd: function() {
- return this.pushStack(ce.grep(this, function(e, t) {
- return t % 2
- }))
- },
- eq: function(e) {
- var t = this.length
- , n = +e + (e < 0 ? t : 0);
- return this.pushStack(0 <= n && n < t ? [this[n]] : [])
- },
- end: function() {
- return this.prevObject || this.constructor()
- },
- push: s,
- sort: oe.sort,
- splice: oe.splice
- },
- ce.extend = ce.fn.extend = function() {
- var e, t, n, r, i, o, a = arguments[0] || {}, s = 1, u = arguments.length, l = !1;
- for ("boolean" == typeof a && (l = a,
- a = arguments[s] || {},
- s++),
- "object" == typeof a || v(a) || (a = {}),
- s === u && (a = this,
- s--); s < u; s++)
- if (null != (e = arguments[s]))
- for (t in e)
- r = e[t],
- "__proto__" !== t && a !== r && (l && r && (ce.isPlainObject(r) || (i = Array.isArray(r))) ? (n = a[t],
- o = i && !Array.isArray(n) ? [] : i || ce.isPlainObject(n) ? n : {},
- i = !1,
- a[t] = ce.extend(l, o, r)) : void 0 !== r && (a[t] = r));
- return a
- }
- ,
- ce.extend({
- expando: "jQuery" + (t + Math.random()).replace(/\D/g, ""),
- isReady: !0,
- error: function(e) {
- throw new Error(e)
- },
- noop: function() {},
- isPlainObject: function(e) {
- var t, n;
- return !(!e || "[object Object]" !== i.call(e)) && (!(t = r(e)) || "function" == typeof (n = ue.call(t, "constructor") && t.constructor) && o.call(n) === a)
- },
- isEmptyObject: function(e) {
- var t;
- for (t in e)
- return !1;
- return !0
- },
- globalEval: function(e, t, n) {
- m(e, {
- nonce: t && t.nonce
- }, n)
- },
- each: function(e, t) {
- var n, r = 0;
- if (c(e)) {
- for (n = e.length; r < n; r++)
- if (!1 === t.call(e[r], r, e[r]))
- break
- } else
- for (r in e)
- if (!1 === t.call(e[r], r, e[r]))
- break;
- return e
- },
- text: function(e) {
- var t, n = "", r = 0, i = e.nodeType;
- if (!i)
- while (t = e[r++])
- n += ce.text(t);
- return 1 === i || 11 === i ? e.textContent : 9 === i ? e.documentElement.textContent : 3 === i || 4 === i ? e.nodeValue : n
- },
- makeArray: function(e, t) {
- var n = t || [];
- return null != e && (c(Object(e)) ? ce.merge(n, "string" == typeof e ? [e] : e) : s.call(n, e)),
- n
- },
- inArray: function(e, t, n) {
- return null == t ? -1 : se.call(t, e, n)
- },
- isXMLDoc: function(e) {
- var t = e && e.namespaceURI
- , n = e && (e.ownerDocument || e).documentElement;
- return !l.test(t || n && n.nodeName || "HTML")
- },
- merge: function(e, t) {
- for (var n = +t.length, r = 0, i = e.length; r < n; r++)
- e[i++] = t[r];
- return e.length = i,
- e
- },
- grep: function(e, t, n) {
- for (var r = [], i = 0, o = e.length, a = !n; i < o; i++)
- !t(e[i], i) !== a && r.push(e[i]);
- return r
- },
- map: function(e, t, n) {
- var r, i, o = 0, a = [];
- if (c(e))
- for (r = e.length; o < r; o++)
- null != (i = t(e[o], o, n)) && a.push(i);
- else
- for (o in e)
- null != (i = t(e[o], o, n)) && a.push(i);
- return g(a)
- },
- guid: 1,
- support: le
- }),
- "function" == typeof Symbol && (ce.fn[Symbol.iterator] = oe[Symbol.iterator]),
- ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(e, t) {
- n["[object " + t + "]"] = t.toLowerCase()
- });
- var pe = oe.pop
- , de = oe.sort
- , he = oe.splice
- , ge = "[\\x20\\t\\r\\n\\f]"
- , ve = new RegExp("^" + ge + "+|((?:^|[^\\\\])(?:\\\\.)*)" + ge + "+$","g");
- ce.contains = function(e, t) {
- var n = t && t.parentNode;
- return e === n || !(!n || 1 !== n.nodeType || !(e.contains ? e.contains(n) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(n)))
- }
- ;
- var f = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
- function p(e, t) {
- return t ? "\0" === e ? "\ufffd" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e
- }
- ce.escapeSelector = function(e) {
- return (e + "").replace(f, p)
- }
- ;
- var ye = C
- , me = s;
- !function() {
- var e, b, w, o, a, T, r, C, d, i, k = me, S = ce.expando, E = 0, n = 0, s = W(), c = W(), u = W(), h = W(), l = function(e, t) {
- return e === t && (a = !0),
- 0
- }, f = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", t = "(?:\\\\[\\da-fA-F]{1,6}" + ge + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", p = "\\[" + ge + "*(" + t + ")(?:" + ge + "*([*^$|!~]?=)" + ge + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + t + "))|)" + ge + "*\\]", g = ":(" + t + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + p + ")*)|.*)\\)|)", v = new RegExp(ge + "+","g"), y = new RegExp("^" + ge + "*," + ge + "*"), m = new RegExp("^" + ge + "*([>+~]|" + ge + ")" + ge + "*"), x = new RegExp(ge + "|>"), j = new RegExp(g), A = new RegExp("^" + t + "$"), D = {
- ID: new RegExp("^#(" + t + ")"),
- CLASS: new RegExp("^\\.(" + t + ")"),
- TAG: new RegExp("^(" + t + "|[*])"),
- ATTR: new RegExp("^" + p),
- PSEUDO: new RegExp("^" + g),
- CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + ge + "*(even|odd|(([+-]|)(\\d*)n|)" + ge + "*(?:([+-]|)" + ge + "*(\\d+)|))" + ge + "*\\)|)","i"),
- bool: new RegExp("^(?:" + f + ")$","i"),
- needsContext: new RegExp("^" + ge + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + ge + "*((?:-\\d)?\\d*)" + ge + "*\\)|)(?=[^-]|$)","i")
- }, N = /^(?:input|select|textarea|button)$/i, q = /^h\d$/i, L = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, H = /[+~]/, O = new RegExp("\\\\[\\da-fA-F]{1,6}" + ge + "?|\\\\([^\\r\\n\\f])","g"), P = function(e, t) {
- var n = "0x" + e.slice(1) - 65536;
- return t || (n < 0 ? String.fromCharCode(n + 65536) : String.fromCharCode(n >> 10 | 55296, 1023 & n | 56320))
- }, M = function() {
- V()
- }, R = J(function(e) {
- return !0 === e.disabled && fe(e, "fieldset")
- }, {
- dir: "parentNode",
- next: "legend"
- });
- try {
- k.apply(oe = ae.call(ye.childNodes), ye.childNodes),
- oe[ye.childNodes.length].nodeType
- } catch (e) {
- k = {
- apply: function(e, t) {
- me.apply(e, ae.call(t))
- },
- call: function(e) {
- me.apply(e, ae.call(arguments, 1))
- }
- }
- }
- function I(t, e, n, r) {
- var i, o, a, s, u, l, c, f = e && e.ownerDocument, p = e ? e.nodeType : 9;
- if (n = n || [],
- "string" != typeof t || !t || 1 !== p && 9 !== p && 11 !== p)
- return n;
- if (!r && (V(e),
- e = e || T,
- C)) {
- if (11 !== p && (u = L.exec(t)))
- if (i = u[1]) {
- if (9 === p) {
- if (!(a = e.getElementById(i)))
- return n;
- if (a.id === i)
- return k.call(n, a),
- n
- } else if (f && (a = f.getElementById(i)) && I.contains(e, a) && a.id === i)
- return k.call(n, a),
- n
- } else {
- if (u[2])
- return k.apply(n, e.getElementsByTagName(t)),
- n;
- if ((i = u[3]) && e.getElementsByClassName)
- return k.apply(n, e.getElementsByClassName(i)),
- n
- }
- if (!(h[t + " "] || d && d.test(t))) {
- if (c = t,
- f = e,
- 1 === p && (x.test(t) || m.test(t))) {
- (f = H.test(t) && U(e.parentNode) || e) == e && le.scope || ((s = e.getAttribute("id")) ? s = ce.escapeSelector(s) : e.setAttribute("id", s = S)),
- o = (l = Y(t)).length;
- while (o--)
- l[o] = (s ? "#" + s : ":scope") + " " + Q(l[o]);
- c = l.join(",")
- }
- try {
- return k.apply(n, f.querySelectorAll(c)),
- n
- } catch (e) {
- h(t, !0)
- } finally {
- s === S && e.removeAttribute("id")
- }
- }
- }
- return re(t.replace(ve, "$1"), e, n, r)
- }
- function W() {
- var r = [];
- return function e(t, n) {
- return r.push(t + " ") > b.cacheLength && delete e[r.shift()],
- e[t + " "] = n
- }
- }
- function F(e) {
- return e[S] = !0,
- e
- }
- function $(e) {
- var t = T.createElement("fieldset");
- try {
- return !!e(t)
- } catch (e) {
- return !1
- } finally {
- t.parentNode && t.parentNode.removeChild(t),
- t = null
- }
- }
- function B(t) {
- return function(e) {
- return fe(e, "input") && e.type === t
- }
- }
- function _(t) {
- return function(e) {
- return (fe(e, "input") || fe(e, "button")) && e.type === t
- }
- }
- function z(t) {
- return function(e) {
- return "form"in e ? e.parentNode && !1 === e.disabled ? "label"in e ? "label"in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && R(e) === t : e.disabled === t : "label"in e && e.disabled === t
- }
- }
- function X(a) {
- return F(function(o) {
- return o = +o,
- F(function(e, t) {
- var n, r = a([], e.length, o), i = r.length;
- while (i--)
- e[n = r[i]] && (e[n] = !(t[n] = e[n]))
- })
- })
- }
- function U(e) {
- return e && "undefined" != typeof e.getElementsByTagName && e
- }
- function V(e) {
- var t, n = e ? e.ownerDocument || e : ye;
- return n != T && 9 === n.nodeType && n.documentElement && (r = (T = n).documentElement,
- C = !ce.isXMLDoc(T),
- i = r.matches || r.webkitMatchesSelector || r.msMatchesSelector,
- r.msMatchesSelector && ye != T && (t = T.defaultView) && t.top !== t && t.addEventListener("unload", M),
- le.getById = $(function(e) {
- return r.appendChild(e).id = ce.expando,
- !T.getElementsByName || !T.getElementsByName(ce.expando).length
- }),
- le.disconnectedMatch = $(function(e) {
- return i.call(e, "*")
- }),
- le.scope = $(function() {
- return T.querySelectorAll(":scope")
- }),
- le.cssHas = $(function() {
- try {
- return T.querySelector(":has(*,:jqfake)"),
- !1
- } catch (e) {
- return !0
- }
- }),
- le.getById ? (b.filter.ID = function(e) {
- var t = e.replace(O, P);
- return function(e) {
- return e.getAttribute("id") === t
- }
- }
- ,
- b.find.ID = function(e, t) {
- if ("undefined" != typeof t.getElementById && C) {
- var n = t.getElementById(e);
- return n ? [n] : []
- }
- }
- ) : (b.filter.ID = function(e) {
- var n = e.replace(O, P);
- return function(e) {
- var t = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id");
- return t && t.value === n
- }
- }
- ,
- b.find.ID = function(e, t) {
- if ("undefined" != typeof t.getElementById && C) {
- var n, r, i, o = t.getElementById(e);
- if (o) {
- if ((n = o.getAttributeNode("id")) && n.value === e)
- return [o];
- i = t.getElementsByName(e),
- r = 0;
- while (o = i[r++])
- if ((n = o.getAttributeNode("id")) && n.value === e)
- return [o]
- }
- return []
- }
- }
- ),
- b.find.TAG = function(e, t) {
- return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : t.querySelectorAll(e)
- }
- ,
- b.find.CLASS = function(e, t) {
- if ("undefined" != typeof t.getElementsByClassName && C)
- return t.getElementsByClassName(e)
- }
- ,
- d = [],
- $(function(e) {
- var t;
- r.appendChild(e).innerHTML = "",
- e.querySelectorAll("[selected]").length || d.push("\\[" + ge + "*(?:value|" + f + ")"),
- e.querySelectorAll("[id~=" + S + "-]").length || d.push("~="),
- e.querySelectorAll("a#" + S + "+*").length || d.push(".#.+[+~]"),
- e.querySelectorAll(":checked").length || d.push(":checked"),
- (t = T.createElement("input")).setAttribute("type", "hidden"),
- e.appendChild(t).setAttribute("name", "D"),
- r.appendChild(e).disabled = !0,
- 2 !== e.querySelectorAll(":disabled").length && d.push(":enabled", ":disabled"),
- (t = T.createElement("input")).setAttribute("name", ""),
- e.appendChild(t),
- e.querySelectorAll("[name='']").length || d.push("\\[" + ge + "*name" + ge + "*=" + ge + "*(?:''|\"\")")
- }),
- le.cssHas || d.push(":has"),
- d = d.length && new RegExp(d.join("|")),
- l = function(e, t) {
- if (e === t)
- return a = !0,
- 0;
- var n = !e.compareDocumentPosition - !t.compareDocumentPosition;
- return n || (1 & (n = (e.ownerDocument || e) == (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !le.sortDetached && t.compareDocumentPosition(e) === n ? e === T || e.ownerDocument == ye && I.contains(ye, e) ? -1 : t === T || t.ownerDocument == ye && I.contains(ye, t) ? 1 : o ? se.call(o, e) - se.call(o, t) : 0 : 4 & n ? -1 : 1)
- }
- ),
- T
- }
- for (e in I.matches = function(e, t) {
- return I(e, null, null, t)
- }
- ,
- I.matchesSelector = function(e, t) {
- if (V(e),
- C && !h[t + " "] && (!d || !d.test(t)))
- try {
- var n = i.call(e, t);
- if (n || le.disconnectedMatch || e.document && 11 !== e.document.nodeType)
- return n
- } catch (e) {
- h(t, !0)
- }
- return 0 < I(t, T, null, [e]).length
- }
- ,
- I.contains = function(e, t) {
- return (e.ownerDocument || e) != T && V(e),
- ce.contains(e, t)
- }
- ,
- I.attr = function(e, t) {
- (e.ownerDocument || e) != T && V(e);
- var n = b.attrHandle[t.toLowerCase()]
- , r = n && ue.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !C) : void 0;
- return void 0 !== r ? r : e.getAttribute(t)
- }
- ,
- I.error = function(e) {
- throw new Error("Syntax error, unrecognized expression: " + e)
- }
- ,
- ce.uniqueSort = function(e) {
- var t, n = [], r = 0, i = 0;
- if (a = !le.sortStable,
- o = !le.sortStable && ae.call(e, 0),
- de.call(e, l),
- a) {
- while (t = e[i++])
- t === e[i] && (r = n.push(i));
- while (r--)
- he.call(e, n[r], 1)
- }
- return o = null,
- e
- }
- ,
- ce.fn.uniqueSort = function() {
- return this.pushStack(ce.uniqueSort(ae.apply(this)))
- }
- ,
- (b = ce.expr = {
- cacheLength: 50,
- createPseudo: F,
- match: D,
- attrHandle: {},
- find: {},
- relative: {
- ">": {
- dir: "parentNode",
- first: !0
- },
- " ": {
- dir: "parentNode"
- },
- "+": {
- dir: "previousSibling",
- first: !0
- },
- "~": {
- dir: "previousSibling"
- }
- },
- preFilter: {
- ATTR: function(e) {
- return e[1] = e[1].replace(O, P),
- e[3] = (e[3] || e[4] || e[5] || "").replace(O, P),
- "~=" === e[2] && (e[3] = " " + e[3] + " "),
- e.slice(0, 4)
- },
- CHILD: function(e) {
- return e[1] = e[1].toLowerCase(),
- "nth" === e[1].slice(0, 3) ? (e[3] || I.error(e[0]),
- e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])),
- e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && I.error(e[0]),
- e
- },
- PSEUDO: function(e) {
- var t, n = !e[6] && e[2];
- return D.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && j.test(n) && (t = Y(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t),
- e[2] = n.slice(0, t)),
- e.slice(0, 3))
- }
- },
- filter: {
- TAG: function(e) {
- var t = e.replace(O, P).toLowerCase();
- return "*" === e ? function() {
- return !0
- }
- : function(e) {
- return fe(e, t)
- }
- },
- CLASS: function(e) {
- var t = s[e + " "];
- return t || (t = new RegExp("(^|" + ge + ")" + e + "(" + ge + "|$)")) && s(e, function(e) {
- return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "")
- })
- },
- ATTR: function(n, r, i) {
- return function(e) {
- var t = I.attr(e, n);
- return null == t ? "!=" === r : !r || (t += "",
- "=" === r ? t === i : "!=" === r ? t !== i : "^=" === r ? i && 0 === t.indexOf(i) : "*=" === r ? i && -1 < t.indexOf(i) : "$=" === r ? i && t.slice(-i.length) === i : "~=" === r ? -1 < (" " + t.replace(v, " ") + " ").indexOf(i) : "|=" === r && (t === i || t.slice(0, i.length + 1) === i + "-"))
- }
- },
- CHILD: function(d, e, t, h, g) {
- var v = "nth" !== d.slice(0, 3)
- , y = "last" !== d.slice(-4)
- , m = "of-type" === e;
- return 1 === h && 0 === g ? function(e) {
- return !!e.parentNode
- }
- : function(e, t, n) {
- var r, i, o, a, s, u = v !== y ? "nextSibling" : "previousSibling", l = e.parentNode, c = m && e.nodeName.toLowerCase(), f = !n && !m, p = !1;
- if (l) {
- if (v) {
- while (u) {
- o = e;
- while (o = o[u])
- if (m ? fe(o, c) : 1 === o.nodeType)
- return !1;
- s = u = "only" === d && !s && "nextSibling"
- }
- return !0
- }
- if (s = [y ? l.firstChild : l.lastChild],
- y && f) {
- p = (a = (r = (i = l[S] || (l[S] = {}))[d] || [])[0] === E && r[1]) && r[2],
- o = a && l.childNodes[a];
- while (o = ++a && o && o[u] || (p = a = 0) || s.pop())
- if (1 === o.nodeType && ++p && o === e) {
- i[d] = [E, a, p];
- break
- }
- } else if (f && (p = a = (r = (i = e[S] || (e[S] = {}))[d] || [])[0] === E && r[1]),
- !1 === p)
- while (o = ++a && o && o[u] || (p = a = 0) || s.pop())
- if ((m ? fe(o, c) : 1 === o.nodeType) && ++p && (f && ((i = o[S] || (o[S] = {}))[d] = [E, p]),
- o === e))
- break;
- return (p -= g) === h || p % h == 0 && 0 <= p / h
- }
- }
- },
- PSEUDO: function(e, o) {
- var t, a = b.pseudos[e] || b.setFilters[e.toLowerCase()] || I.error("unsupported pseudo: " + e);
- return a[S] ? a(o) : 1 < a.length ? (t = [e, e, "", o],
- b.setFilters.hasOwnProperty(e.toLowerCase()) ? F(function(e, t) {
- var n, r = a(e, o), i = r.length;
- while (i--)
- e[n = se.call(e, r[i])] = !(t[n] = r[i])
- }) : function(e) {
- return a(e, 0, t)
- }
- ) : a
- }
- },
- pseudos: {
- not: F(function(e) {
- var r = []
- , i = []
- , s = ne(e.replace(ve, "$1"));
- return s[S] ? F(function(e, t, n, r) {
- var i, o = s(e, null, r, []), a = e.length;
- while (a--)
- (i = o[a]) && (e[a] = !(t[a] = i))
- }) : function(e, t, n) {
- return r[0] = e,
- s(r, null, n, i),
- r[0] = null,
- !i.pop()
- }
- }),
- has: F(function(t) {
- return function(e) {
- return 0 < I(t, e).length
- }
- }),
- contains: F(function(t) {
- return t = t.replace(O, P),
- function(e) {
- return -1 < (e.textContent || ce.text(e)).indexOf(t)
- }
- }),
- lang: F(function(n) {
- return A.test(n || "") || I.error("unsupported lang: " + n),
- n = n.replace(O, P).toLowerCase(),
- function(e) {
- var t;
- do {
- if (t = C ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang"))
- return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-")
- } while ((e = e.parentNode) && 1 === e.nodeType);
- return !1
- }
- }),
- target: function(e) {
- var t = ie.location && ie.location.hash;
- return t && t.slice(1) === e.id
- },
- root: function(e) {
- return e === r
- },
- focus: function(e) {
- return e === function() {
- try {
- return T.activeElement
- } catch (e) {}
- }() && T.hasFocus() && !!(e.type || e.href || ~e.tabIndex)
- },
- enabled: z(!1),
- disabled: z(!0),
- checked: function(e) {
- return fe(e, "input") && !!e.checked || fe(e, "option") && !!e.selected
- },
- selected: function(e) {
- return e.parentNode && e.parentNode.selectedIndex,
- !0 === e.selected
- },
- empty: function(e) {
- for (e = e.firstChild; e; e = e.nextSibling)
- if (e.nodeType < 6)
- return !1;
- return !0
- },
- parent: function(e) {
- return !b.pseudos.empty(e)
- },
- header: function(e) {
- return q.test(e.nodeName)
- },
- input: function(e) {
- return N.test(e.nodeName)
- },
- button: function(e) {
- return fe(e, "input") && "button" === e.type || fe(e, "button")
- },
- text: function(e) {
- var t;
- return fe(e, "input") && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase())
- },
- first: X(function() {
- return [0]
- }),
- last: X(function(e, t) {
- return [t - 1]
- }),
- eq: X(function(e, t, n) {
- return [n < 0 ? n + t : n]
- }),
- even: X(function(e, t) {
- for (var n = 0; n < t; n += 2)
- e.push(n);
- return e
- }),
- odd: X(function(e, t) {
- for (var n = 1; n < t; n += 2)
- e.push(n);
- return e
- }),
- lt: X(function(e, t, n) {
- var r;
- for (r = n < 0 ? n + t : t < n ? t : n; 0 <= --r; )
- e.push(r);
- return e
- }),
- gt: X(function(e, t, n) {
- for (var r = n < 0 ? n + t : n; ++r < t; )
- e.push(r);
- return e
- })
- }
- }).pseudos.nth = b.pseudos.eq,
- {
- radio: !0,
- checkbox: !0,
- file: !0,
- password: !0,
- image: !0
- })
- b.pseudos[e] = B(e);
- for (e in {
- submit: !0,
- reset: !0
- })
- b.pseudos[e] = _(e);
- function G() {}
- function Y(e, t) {
- var n, r, i, o, a, s, u, l = c[e + " "];
- if (l)
- return t ? 0 : l.slice(0);
- a = e,
- s = [],
- u = b.preFilter;
- while (a) {
- for (o in n && !(r = y.exec(a)) || (r && (a = a.slice(r[0].length) || a),
- s.push(i = [])),
- n = !1,
- (r = m.exec(a)) && (n = r.shift(),
- i.push({
- value: n,
- type: r[0].replace(ve, " ")
- }),
- a = a.slice(n.length)),
- b.filter)
- !(r = D[o].exec(a)) || u[o] && !(r = u[o](r)) || (n = r.shift(),
- i.push({
- value: n,
- type: o,
- matches: r
- }),
- a = a.slice(n.length));
- if (!n)
- break
- }
- return t ? a.length : a ? I.error(e) : c(e, s).slice(0)
- }
- function Q(e) {
- for (var t = 0, n = e.length, r = ""; t < n; t++)
- r += e[t].value;
- return r
- }
- function J(a, e, t) {
- var s = e.dir
- , u = e.next
- , l = u || s
- , c = t && "parentNode" === l
- , f = n++;
- return e.first ? function(e, t, n) {
- while (e = e[s])
- if (1 === e.nodeType || c)
- return a(e, t, n);
- return !1
- }
- : function(e, t, n) {
- var r, i, o = [E, f];
- if (n) {
- while (e = e[s])
- if ((1 === e.nodeType || c) && a(e, t, n))
- return !0
- } else
- while (e = e[s])
- if (1 === e.nodeType || c)
- if (i = e[S] || (e[S] = {}),
- u && fe(e, u))
- e = e[s] || e;
- else {
- if ((r = i[l]) && r[0] === E && r[1] === f)
- return o[2] = r[2];
- if ((i[l] = o)[2] = a(e, t, n))
- return !0
- }
- return !1
- }
- }
- function K(i) {
- return 1 < i.length ? function(e, t, n) {
- var r = i.length;
- while (r--)
- if (!i[r](e, t, n))
- return !1;
- return !0
- }
- : i[0]
- }
- function Z(e, t, n, r, i) {
- for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++)
- (o = e[s]) && (n && !n(o, r, i) || (a.push(o),
- l && t.push(s)));
- return a
- }
- function ee(d, h, g, v, y, e) {
- return v && !v[S] && (v = ee(v)),
- y && !y[S] && (y = ee(y, e)),
- F(function(e, t, n, r) {
- var i, o, a, s, u = [], l = [], c = t.length, f = e || function(e, t, n) {
- for (var r = 0, i = t.length; r < i; r++)
- I(e, t[r], n);
- return n
- }(h || "*", n.nodeType ? [n] : n, []), p = !d || !e && h ? f : Z(f, u, d, n, r);
- if (g ? g(p, s = y || (e ? d : c || v) ? [] : t, n, r) : s = p,
- v) {
- i = Z(s, l),
- v(i, [], n, r),
- o = i.length;
- while (o--)
- (a = i[o]) && (s[l[o]] = !(p[l[o]] = a))
- }
- if (e) {
- if (y || d) {
- if (y) {
- i = [],
- o = s.length;
- while (o--)
- (a = s[o]) && i.push(p[o] = a);
- y(null, s = [], i, r)
- }
- o = s.length;
- while (o--)
- (a = s[o]) && -1 < (i = y ? se.call(e, a) : u[o]) && (e[i] = !(t[i] = a))
- }
- } else
- s = Z(s === t ? s.splice(c, s.length) : s),
- y ? y(null, t, s, r) : k.apply(t, s)
- })
- }
- function te(e) {
- for (var i, t, n, r = e.length, o = b.relative[e[0].type], a = o || b.relative[" "], s = o ? 1 : 0, u = J(function(e) {
- return e === i
- }, a, !0), l = J(function(e) {
- return -1 < se.call(i, e)
- }, a, !0), c = [function(e, t, n) {
- var r = !o && (n || t != w) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n));
- return i = null,
- r
- }
- ]; s < r; s++)
- if (t = b.relative[e[s].type])
- c = [J(K(c), t)];
- else {
- if ((t = b.filter[e[s].type].apply(null, e[s].matches))[S]) {
- for (n = ++s; n < r; n++)
- if (b.relative[e[n].type])
- break;
- return ee(1 < s && K(c), 1 < s && Q(e.slice(0, s - 1).concat({
- value: " " === e[s - 2].type ? "*" : ""
- })).replace(ve, "$1"), t, s < n && te(e.slice(s, n)), n < r && te(e = e.slice(n)), n < r && Q(e))
- }
- c.push(t)
- }
- return K(c)
- }
- function ne(e, t) {
- var n, v, y, m, x, r, i = [], o = [], a = u[e + " "];
- if (!a) {
- t || (t = Y(e)),
- n = t.length;
- while (n--)
- (a = te(t[n]))[S] ? i.push(a) : o.push(a);
- (a = u(e, (v = o,
- m = 0 < (y = i).length,
- x = 0 < v.length,
- r = function(e, t, n, r, i) {
- var o, a, s, u = 0, l = "0", c = e && [], f = [], p = w, d = e || x && b.find.TAG("*", i), h = E += null == p ? 1 : Math.random() || .1, g = d.length;
- for (i && (w = t == T || t || i); l !== g && null != (o = d[l]); l++) {
- if (x && o) {
- a = 0,
- t || o.ownerDocument == T || (V(o),
- n = !C);
- while (s = v[a++])
- if (s(o, t || T, n)) {
- k.call(r, o);
- break
- }
- i && (E = h)
- }
- m && ((o = !s && o) && u--,
- e && c.push(o))
- }
- if (u += l,
- m && l !== u) {
- a = 0;
- while (s = y[a++])
- s(c, f, t, n);
- if (e) {
- if (0 < u)
- while (l--)
- c[l] || f[l] || (f[l] = pe.call(r));
- f = Z(f)
- }
- k.apply(r, f),
- i && !e && 0 < f.length && 1 < u + y.length && ce.uniqueSort(r)
- }
- return i && (E = h,
- w = p),
- c
- }
- ,
- m ? F(r) : r))).selector = e
- }
- return a
- }
- function re(e, t, n, r) {
- var i, o, a, s, u, l = "function" == typeof e && e, c = !r && Y(e = l.selector || e);
- if (n = n || [],
- 1 === c.length) {
- if (2 < (o = c[0] = c[0].slice(0)).length && "ID" === (a = o[0]).type && 9 === t.nodeType && C && b.relative[o[1].type]) {
- if (!(t = (b.find.ID(a.matches[0].replace(O, P), t) || [])[0]))
- return n;
- l && (t = t.parentNode),
- e = e.slice(o.shift().value.length)
- }
- i = D.needsContext.test(e) ? 0 : o.length;
- while (i--) {
- if (a = o[i],
- b.relative[s = a.type])
- break;
- if ((u = b.find[s]) && (r = u(a.matches[0].replace(O, P), H.test(o[0].type) && U(t.parentNode) || t))) {
- if (o.splice(i, 1),
- !(e = r.length && Q(o)))
- return k.apply(n, r),
- n;
- break
- }
- }
- }
- return (l || ne(e, c))(r, t, !C, n, !t || H.test(e) && U(t.parentNode) || t),
- n
- }
- G.prototype = b.filters = b.pseudos,
- b.setFilters = new G,
- le.sortStable = S.split("").sort(l).join("") === S,
- V(),
- le.sortDetached = $(function(e) {
- return 1 & e.compareDocumentPosition(T.createElement("fieldset"))
- }),
- ce.find = I,
- ce.expr[":"] = ce.expr.pseudos,
- ce.unique = ce.uniqueSort,
- I.compile = ne,
- I.select = re,
- I.setDocument = V,
- I.tokenize = Y,
- I.escape = ce.escapeSelector,
- I.getText = ce.text,
- I.isXML = ce.isXMLDoc,
- I.selectors = ce.expr,
- I.support = ce.support,
- I.uniqueSort = ce.uniqueSort
- }();
- var d = function(e, t, n) {
- var r = []
- , i = void 0 !== n;
- while ((e = e[t]) && 9 !== e.nodeType)
- if (1 === e.nodeType) {
- if (i && ce(e).is(n))
- break;
- r.push(e)
- }
- return r
- }
- , h = function(e, t) {
- for (var n = []; e; e = e.nextSibling)
- 1 === e.nodeType && e !== t && n.push(e);
- return n
- }
- , b = ce.expr.match.needsContext
- , w = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
- function T(e, n, r) {
- return v(n) ? ce.grep(e, function(e, t) {
- return !!n.call(e, t, e) !== r
- }) : n.nodeType ? ce.grep(e, function(e) {
- return e === n !== r
- }) : "string" != typeof n ? ce.grep(e, function(e) {
- return -1 < se.call(n, e) !== r
- }) : ce.filter(n, e, r)
- }
- ce.filter = function(e, t, n) {
- var r = t[0];
- return n && (e = ":not(" + e + ")"),
- 1 === t.length && 1 === r.nodeType ? ce.find.matchesSelector(r, e) ? [r] : [] : ce.find.matches(e, ce.grep(t, function(e) {
- return 1 === e.nodeType
- }))
- }
- ,
- ce.fn.extend({
- find: function(e) {
- var t, n, r = this.length, i = this;
- if ("string" != typeof e)
- return this.pushStack(ce(e).filter(function() {
- for (t = 0; t < r; t++)
- if (ce.contains(i[t], this))
- return !0
- }));
- for (n = this.pushStack([]),
- t = 0; t < r; t++)
- ce.find(e, i[t], n);
- return 1 < r ? ce.uniqueSort(n) : n
- },
- filter: function(e) {
- return this.pushStack(T(this, e || [], !1))
- },
- not: function(e) {
- return this.pushStack(T(this, e || [], !0))
- },
- is: function(e) {
- return !!T(this, "string" == typeof e && b.test(e) ? ce(e) : e || [], !1).length
- }
- });
- var k, S = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;
- (ce.fn.init = function(e, t, n) {
- var r, i;
- if (!e)
- return this;
- if (n = n || k,
- "string" == typeof e) {
- if (!(r = "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : S.exec(e)) || !r[1] && t)
- return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e);
- if (r[1]) {
- if (t = t instanceof ce ? t[0] : t,
- ce.merge(this, ce.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : C, !0)),
- w.test(r[1]) && ce.isPlainObject(t))
- for (r in t)
- v(this[r]) ? this[r](t[r]) : this.attr(r, t[r]);
- return this
- }
- return (i = C.getElementById(r[2])) && (this[0] = i,
- this.length = 1),
- this
- }
- return e.nodeType ? (this[0] = e,
- this.length = 1,
- this) : v(e) ? void 0 !== n.ready ? n.ready(e) : e(ce) : ce.makeArray(e, this)
- }
- ).prototype = ce.fn,
- k = ce(C);
- var E = /^(?:parents|prev(?:Until|All))/
- , j = {
- children: !0,
- contents: !0,
- next: !0,
- prev: !0
- };
- function A(e, t) {
- while ((e = e[t]) && 1 !== e.nodeType)
- ;
- return e
- }
- ce.fn.extend({
- has: function(e) {
- var t = ce(e, this)
- , n = t.length;
- return this.filter(function() {
- for (var e = 0; e < n; e++)
- if (ce.contains(this, t[e]))
- return !0
- })
- },
- closest: function(e, t) {
- var n, r = 0, i = this.length, o = [], a = "string" != typeof e && ce(e);
- if (!b.test(e))
- for (; r < i; r++)
- for (n = this[r]; n && n !== t; n = n.parentNode)
- if (n.nodeType < 11 && (a ? -1 < a.index(n) : 1 === n.nodeType && ce.find.matchesSelector(n, e))) {
- o.push(n);
- break
- }
- return this.pushStack(1 < o.length ? ce.uniqueSort(o) : o)
- },
- index: function(e) {
- return e ? "string" == typeof e ? se.call(ce(e), this[0]) : se.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
- },
- add: function(e, t) {
- return this.pushStack(ce.uniqueSort(ce.merge(this.get(), ce(e, t))))
- },
- addBack: function(e) {
- return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
- }
- }),
- ce.each({
- parent: function(e) {
- var t = e.parentNode;
- return t && 11 !== t.nodeType ? t : null
- },
- parents: function(e) {
- return d(e, "parentNode")
- },
- parentsUntil: function(e, t, n) {
- return d(e, "parentNode", n)
- },
- next: function(e) {
- return A(e, "nextSibling")
- },
- prev: function(e) {
- return A(e, "previousSibling")
- },
- nextAll: function(e) {
- return d(e, "nextSibling")
- },
- prevAll: function(e) {
- return d(e, "previousSibling")
- },
- nextUntil: function(e, t, n) {
- return d(e, "nextSibling", n)
- },
- prevUntil: function(e, t, n) {
- return d(e, "previousSibling", n)
- },
- siblings: function(e) {
- return h((e.parentNode || {}).firstChild, e)
- },
- children: function(e) {
- return h(e.firstChild)
- },
- contents: function(e) {
- return null != e.contentDocument && r(e.contentDocument) ? e.contentDocument : (fe(e, "template") && (e = e.content || e),
- ce.merge([], e.childNodes))
- }
- }, function(r, i) {
- ce.fn[r] = function(e, t) {
- var n = ce.map(this, i, e);
- return "Until" !== r.slice(-5) && (t = e),
- t && "string" == typeof t && (n = ce.filter(t, n)),
- 1 < this.length && (j[r] || ce.uniqueSort(n),
- E.test(r) && n.reverse()),
- this.pushStack(n)
- }
- });
- var D = /[^\x20\t\r\n\f]+/g;
- function N(e) {
- return e
- }
- function q(e) {
- throw e
- }
- function L(e, t, n, r) {
- var i;
- try {
- e && v(i = e.promise) ? i.call(e).done(t).fail(n) : e && v(i = e.then) ? i.call(e, t, n) : t.apply(void 0, [e].slice(r))
- } catch (e) {
- n.apply(void 0, [e])
- }
- }
- ce.Callbacks = function(r) {
- var e, n;
- r = "string" == typeof r ? (e = r,
- n = {},
- ce.each(e.match(D) || [], function(e, t) {
- n[t] = !0
- }),
- n) : ce.extend({}, r);
- var i, t, o, a, s = [], u = [], l = -1, c = function() {
- for (a = a || r.once,
- o = i = !0; u.length; l = -1) {
- t = u.shift();
- while (++l < s.length)
- !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && (l = s.length,
- t = !1)
- }
- r.memory || (t = !1),
- i = !1,
- a && (s = t ? [] : "")
- }, f = {
- add: function() {
- return s && (t && !i && (l = s.length - 1,
- u.push(t)),
- function n(e) {
- ce.each(e, function(e, t) {
- v(t) ? r.unique && f.has(t) || s.push(t) : t && t.length && "string" !== x(t) && n(t)
- })
- }(arguments),
- t && !i && c()),
- this
- },
- remove: function() {
- return ce.each(arguments, function(e, t) {
- var n;
- while (-1 < (n = ce.inArray(t, s, n)))
- s.splice(n, 1),
- n <= l && l--
- }),
- this
- },
- has: function(e) {
- return e ? -1 < ce.inArray(e, s) : 0 < s.length
- },
- empty: function() {
- return s && (s = []),
- this
- },
- disable: function() {
- return a = u = [],
- s = t = "",
- this
- },
- disabled: function() {
- return !s
- },
- lock: function() {
- return a = u = [],
- t || i || (s = t = ""),
- this
- },
- locked: function() {
- return !!a
- },
- fireWith: function(e, t) {
- return a || (t = [e, (t = t || []).slice ? t.slice() : t],
- u.push(t),
- i || c()),
- this
- },
- fire: function() {
- return f.fireWith(this, arguments),
- this
- },
- fired: function() {
- return !!o
- }
- };
- return f
- }
- ,
- ce.extend({
- Deferred: function(e) {
- var o = [["notify", "progress", ce.Callbacks("memory"), ce.Callbacks("memory"), 2], ["resolve", "done", ce.Callbacks("once memory"), ce.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", ce.Callbacks("once memory"), ce.Callbacks("once memory"), 1, "rejected"]]
- , i = "pending"
- , a = {
- state: function() {
- return i
- },
- always: function() {
- return s.done(arguments).fail(arguments),
- this
- },
- "catch": function(e) {
- return a.then(null, e)
- },
- pipe: function() {
- var i = arguments;
- return ce.Deferred(function(r) {
- ce.each(o, function(e, t) {
- var n = v(i[t[4]]) && i[t[4]];
- s[t[1]](function() {
- var e = n && n.apply(this, arguments);
- e && v(e.promise) ? e.promise().progress(r.notify).done(r.resolve).fail(r.reject) : r[t[0] + "With"](this, n ? [e] : arguments)
- })
- }),
- i = null
- }).promise()
- },
- then: function(t, n, r) {
- var u = 0;
- function l(i, o, a, s) {
- return function() {
- var n = this
- , r = arguments
- , e = function() {
- var e, t;
- if (!(i < u)) {
- if ((e = a.apply(n, r)) === o.promise())
- throw new TypeError("Thenable self-resolution");
- t = e && ("object" == typeof e || "function" == typeof e) && e.then,
- v(t) ? s ? t.call(e, l(u, o, N, s), l(u, o, q, s)) : (u++,
- t.call(e, l(u, o, N, s), l(u, o, q, s), l(u, o, N, o.notifyWith))) : (a !== N && (n = void 0,
- r = [e]),
- (s || o.resolveWith)(n, r))
- }
- }
- , t = s ? e : function() {
- try {
- e()
- } catch (e) {
- ce.Deferred.exceptionHook && ce.Deferred.exceptionHook(e, t.error),
- u <= i + 1 && (a !== q && (n = void 0,
- r = [e]),
- o.rejectWith(n, r))
- }
- }
- ;
- i ? t() : (ce.Deferred.getErrorHook ? t.error = ce.Deferred.getErrorHook() : ce.Deferred.getStackHook && (t.error = ce.Deferred.getStackHook()),
- ie.setTimeout(t))
- }
- }
- return ce.Deferred(function(e) {
- o[0][3].add(l(0, e, v(r) ? r : N, e.notifyWith)),
- o[1][3].add(l(0, e, v(t) ? t : N)),
- o[2][3].add(l(0, e, v(n) ? n : q))
- }).promise()
- },
- promise: function(e) {
- return null != e ? ce.extend(e, a) : a
- }
- }
- , s = {};
- return ce.each(o, function(e, t) {
- var n = t[2]
- , r = t[5];
- a[t[1]] = n.add,
- r && n.add(function() {
- i = r
- }, o[3 - e][2].disable, o[3 - e][3].disable, o[0][2].lock, o[0][3].lock),
- n.add(t[3].fire),
- s[t[0]] = function() {
- return s[t[0] + "With"](this === s ? void 0 : this, arguments),
- this
- }
- ,
- s[t[0] + "With"] = n.fireWith
- }),
- a.promise(s),
- e && e.call(s, s),
- s
- },
- when: function(e) {
- var n = arguments.length
- , t = n
- , r = Array(t)
- , i = ae.call(arguments)
- , o = ce.Deferred()
- , a = function(t) {
- return function(e) {
- r[t] = this,
- i[t] = 1 < arguments.length ? ae.call(arguments) : e,
- --n || o.resolveWith(r, i)
- }
- };
- if (n <= 1 && (L(e, o.done(a(t)).resolve, o.reject, !n),
- "pending" === o.state() || v(i[t] && i[t].then)))
- return o.then();
- while (t--)
- L(i[t], a(t), o.reject);
- return o.promise()
- }
- });
- var H = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
- ce.Deferred.exceptionHook = function(e, t) {
- ie.console && ie.console.warn && e && H.test(e.name) && ie.console.warn("jQuery.Deferred exception: " + e.message, e.stack, t)
- }
- ,
- ce.readyException = function(e) {
- ie.setTimeout(function() {
- throw e
- })
- }
- ;
- var O = ce.Deferred();
- function P() {
- C.removeEventListener("DOMContentLoaded", P),
- ie.removeEventListener("load", P),
- ce.ready()
- }
- ce.fn.ready = function(e) {
- return O.then(e)["catch"](function(e) {
- ce.readyException(e)
- }),
- this
- }
- ,
- ce.extend({
- isReady: !1,
- readyWait: 1,
- ready: function(e) {
- (!0 === e ? --ce.readyWait : ce.isReady) || (ce.isReady = !0) !== e && 0 < --ce.readyWait || O.resolveWith(C, [ce])
- }
- }),
- ce.ready.then = O.then,
- "complete" === C.readyState || "loading" !== C.readyState && !C.documentElement.doScroll ? ie.setTimeout(ce.ready) : (C.addEventListener("DOMContentLoaded", P),
- ie.addEventListener("load", P));
- var M = function(e, t, n, r, i, o, a) {
- var s = 0
- , u = e.length
- , l = null == n;
- if ("object" === x(n))
- for (s in i = !0,
- n)
- M(e, t, s, n[s], !0, o, a);
- else if (void 0 !== r && (i = !0,
- v(r) || (a = !0),
- l && (a ? (t.call(e, r),
- t = null) : (l = t,
- t = function(e, t, n) {
- return l.call(ce(e), n)
- }
- )),
- t))
- for (; s < u; s++)
- t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n)));
- return i ? e : l ? t.call(e) : u ? t(e[0], n) : o
- }
- , R = /^-ms-/
- , I = /-([a-z])/g;
- function W(e, t) {
- return t.toUpperCase()
- }
- function F(e) {
- return e.replace(R, "ms-").replace(I, W)
- }
- var $ = function(e) {
- return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType
- };
- function B() {
- this.expando = ce.expando + B.uid++
- }
- B.uid = 1,
- B.prototype = {
- cache: function(e) {
- var t = e[this.expando];
- return t || (t = {},
- $(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, {
- value: t,
- configurable: !0
- }))),
- t
- },
- set: function(e, t, n) {
- var r, i = this.cache(e);
- if ("string" == typeof t)
- i[F(t)] = n;
- else
- for (r in t)
- i[F(r)] = t[r];
- return i
- },
- get: function(e, t) {
- return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][F(t)]
- },
- access: function(e, t, n) {
- return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n),
- void 0 !== n ? n : t)
- },
- remove: function(e, t) {
- var n, r = e[this.expando];
- if (void 0 !== r) {
- if (void 0 !== t) {
- n = (t = Array.isArray(t) ? t.map(F) : (t = F(t))in r ? [t] : t.match(D) || []).length;
- while (n--)
- delete r[t[n]]
- }
- (void 0 === t || ce.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando])
- }
- },
- hasData: function(e) {
- var t = e[this.expando];
- return void 0 !== t && !ce.isEmptyObject(t)
- }
- };
- var _ = new B
- , z = new B
- , X = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/
- , U = /[A-Z]/g;
- function V(e, t, n) {
- var r, i;
- if (void 0 === n && 1 === e.nodeType)
- if (r = "data-" + t.replace(U, "-$&").toLowerCase(),
- "string" == typeof (n = e.getAttribute(r))) {
- try {
- n = "true" === (i = n) || "false" !== i && ("null" === i ? null : i === +i + "" ? +i : X.test(i) ? JSON.parse(i) : i)
- } catch (e) {}
- z.set(e, t, n)
- } else
- n = void 0;
- return n
- }
- ce.extend({
- hasData: function(e) {
- return z.hasData(e) || _.hasData(e)
- },
- data: function(e, t, n) {
- return z.access(e, t, n)
- },
- removeData: function(e, t) {
- z.remove(e, t)
- },
- _data: function(e, t, n) {
- return _.access(e, t, n)
- },
- _removeData: function(e, t) {
- _.remove(e, t)
- }
- }),
- ce.fn.extend({
- data: function(n, e) {
- var t, r, i, o = this[0], a = o && o.attributes;
- if (void 0 === n) {
- if (this.length && (i = z.get(o),
- 1 === o.nodeType && !_.get(o, "hasDataAttrs"))) {
- t = a.length;
- while (t--)
- a[t] && 0 === (r = a[t].name).indexOf("data-") && (r = F(r.slice(5)),
- V(o, r, i[r]));
- _.set(o, "hasDataAttrs", !0)
- }
- return i
- }
- return "object" == typeof n ? this.each(function() {
- z.set(this, n)
- }) : M(this, function(e) {
- var t;
- if (o && void 0 === e)
- return void 0 !== (t = z.get(o, n)) ? t : void 0 !== (t = V(o, n)) ? t : void 0;
- this.each(function() {
- z.set(this, n, e)
- })
- }, null, e, 1 < arguments.length, null, !0)
- },
- removeData: function(e) {
- return this.each(function() {
- z.remove(this, e)
- })
- }
- }),
- ce.extend({
- queue: function(e, t, n) {
- var r;
- if (e)
- return t = (t || "fx") + "queue",
- r = _.get(e, t),
- n && (!r || Array.isArray(n) ? r = _.access(e, t, ce.makeArray(n)) : r.push(n)),
- r || []
- },
- dequeue: function(e, t) {
- t = t || "fx";
- var n = ce.queue(e, t)
- , r = n.length
- , i = n.shift()
- , o = ce._queueHooks(e, t);
- "inprogress" === i && (i = n.shift(),
- r--),
- i && ("fx" === t && n.unshift("inprogress"),
- delete o.stop,
- i.call(e, function() {
- ce.dequeue(e, t)
- }, o)),
- !r && o && o.empty.fire()
- },
- _queueHooks: function(e, t) {
- var n = t + "queueHooks";
- return _.get(e, n) || _.access(e, n, {
- empty: ce.Callbacks("once memory").add(function() {
- _.remove(e, [t + "queue", n])
- })
- })
- }
- }),
- ce.fn.extend({
- queue: function(t, n) {
- var e = 2;
- return "string" != typeof t && (n = t,
- t = "fx",
- e--),
- arguments.length < e ? ce.queue(this[0], t) : void 0 === n ? this : this.each(function() {
- var e = ce.queue(this, t, n);
- ce._queueHooks(this, t),
- "fx" === t && "inprogress" !== e[0] && ce.dequeue(this, t)
- })
- },
- dequeue: function(e) {
- return this.each(function() {
- ce.dequeue(this, e)
- })
- },
- clearQueue: function(e) {
- return this.queue(e || "fx", [])
- },
- promise: function(e, t) {
- var n, r = 1, i = ce.Deferred(), o = this, a = this.length, s = function() {
- --r || i.resolveWith(o, [o])
- };
- "string" != typeof e && (t = e,
- e = void 0),
- e = e || "fx";
- while (a--)
- (n = _.get(o[a], e + "queueHooks")) && n.empty && (r++,
- n.empty.add(s));
- return s(),
- i.promise(t)
- }
- });
- var G = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source
- , Y = new RegExp("^(?:([+-])=|)(" + G + ")([a-z%]*)$","i")
- , Q = ["Top", "Right", "Bottom", "Left"]
- , J = C.documentElement
- , K = function(e) {
- return ce.contains(e.ownerDocument, e)
- }
- , Z = {
- composed: !0
- };
- J.getRootNode && (K = function(e) {
- return ce.contains(e.ownerDocument, e) || e.getRootNode(Z) === e.ownerDocument
- }
- );
- var ee = function(e, t) {
- return "none" === (e = t || e).style.display || "" === e.style.display && K(e) && "none" === ce.css(e, "display")
- };
- function te(e, t, n, r) {
- var i, o, a = 20, s = r ? function() {
- return r.cur()
- }
- : function() {
- return ce.css(e, t, "")
- }
- , u = s(), l = n && n[3] || (ce.cssNumber[t] ? "" : "px"), c = e.nodeType && (ce.cssNumber[t] || "px" !== l && +u) && Y.exec(ce.css(e, t));
- if (c && c[3] !== l) {
- u /= 2,
- l = l || c[3],
- c = +u || 1;
- while (a--)
- ce.style(e, t, c + l),
- (1 - o) * (1 - (o = s() / u || .5)) <= 0 && (a = 0),
- c /= o;
- c *= 2,
- ce.style(e, t, c + l),
- n = n || []
- }
- return n && (c = +c || +u || 0,
- i = n[1] ? c + (n[1] + 1) * n[2] : +n[2],
- r && (r.unit = l,
- r.start = c,
- r.end = i)),
- i
- }
- var ne = {};
- function re(e, t) {
- for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++)
- (r = e[c]).style && (n = r.style.display,
- t ? ("none" === n && (l[c] = _.get(r, "display") || null,
- l[c] || (r.style.display = "")),
- "" === r.style.display && ee(r) && (l[c] = (u = a = o = void 0,
- a = (i = r).ownerDocument,
- s = i.nodeName,
- (u = ne[s]) || (o = a.body.appendChild(a.createElement(s)),
- u = ce.css(o, "display"),
- o.parentNode.removeChild(o),
- "none" === u && (u = "block"),
- ne[s] = u)))) : "none" !== n && (l[c] = "none",
- _.set(r, "display", n)));
- for (c = 0; c < f; c++)
- null != l[c] && (e[c].style.display = l[c]);
- return e
- }
- ce.fn.extend({
- show: function() {
- return re(this, !0)
- },
- hide: function() {
- return re(this)
- },
- toggle: function(e) {
- return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function() {
- ee(this) ? ce(this).show() : ce(this).hide()
- })
- }
- });
- var xe, be, we = /^(?:checkbox|radio)$/i, Te = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i, Ce = /^$|^module$|\/(?:java|ecma)script/i;
- xe = C.createDocumentFragment().appendChild(C.createElement("div")),
- (be = C.createElement("input")).setAttribute("type", "radio"),
- be.setAttribute("checked", "checked"),
- be.setAttribute("name", "t"),
- xe.appendChild(be),
- le.checkClone = xe.cloneNode(!0).cloneNode(!0).lastChild.checked,
- xe.innerHTML = "",
- le.noCloneChecked = !!xe.cloneNode(!0).lastChild.defaultValue,
- xe.innerHTML = "",
- le.option = !!xe.lastChild;
- var ke = {
- thead: [1, ""],
- col: [2, ""],
- tr: [2, ""],
- td: [3, ""],
- _default: [0, "", ""]
- };
- function Se(e, t) {
- var n;
- return n = "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || "*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll(t || "*") : [],
- void 0 === t || t && fe(e, t) ? ce.merge([e], n) : n
- }
- function Ee(e, t) {
- for (var n = 0, r = e.length; n < r; n++)
- _.set(e[n], "globalEval", !t || _.get(t[n], "globalEval"))
- }
- ke.tbody = ke.tfoot = ke.colgroup = ke.caption = ke.thead,
- ke.th = ke.td,
- le.option || (ke.optgroup = ke.option = [1, ""]);
- var je = /<|?\w+;/;
- function Ae(e, t, n, r, i) {
- for (var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length; d < h; d++)
- if ((o = e[d]) || 0 === o)
- if ("object" === x(o))
- ce.merge(p, o.nodeType ? [o] : o);
- else if (je.test(o)) {
- a = a || f.appendChild(t.createElement("div")),
- s = (Te.exec(o) || ["", ""])[1].toLowerCase(),
- u = ke[s] || ke._default,
- a.innerHTML = u[1] + ce.htmlPrefilter(o) + u[2],
- c = u[0];
- while (c--)
- a = a.lastChild;
- ce.merge(p, a.childNodes),
- (a = f.firstChild).textContent = ""
- } else
- p.push(t.createTextNode(o));
- f.textContent = "",
- d = 0;
- while (o = p[d++])
- if (r && -1 < ce.inArray(o, r))
- i && i.push(o);
- else if (l = K(o),
- a = Se(f.appendChild(o), "script"),
- l && Ee(a),
- n) {
- c = 0;
- while (o = a[c++])
- Ce.test(o.type || "") && n.push(o)
- }
- return f
- }
- var De = /^([^.]*)(?:\.(.+)|)/;
- function Ne() {
- return !0
- }
- function qe() {
- return !1
- }
- function Le(e, t, n, r, i, o) {
- var a, s;
- if ("object" == typeof t) {
- for (s in "string" != typeof n && (r = r || n,
- n = void 0),
- t)
- Le(e, s, n, r, t[s], o);
- return e
- }
- if (null == r && null == i ? (i = n,
- r = n = void 0) : null == i && ("string" == typeof n ? (i = r,
- r = void 0) : (i = r,
- r = n,
- n = void 0)),
- !1 === i)
- i = qe;
- else if (!i)
- return e;
- return 1 === o && (a = i,
- (i = function(e) {
- return ce().off(e),
- a.apply(this, arguments)
- }
- ).guid = a.guid || (a.guid = ce.guid++)),
- e.each(function() {
- ce.event.add(this, t, i, r, n)
- })
- }
- function He(e, r, t) {
- t ? (_.set(e, r, !1),
- ce.event.add(e, r, {
- namespace: !1,
- handler: function(e) {
- var t, n = _.get(this, r);
- if (1 & e.isTrigger && this[r]) {
- if (n)
- (ce.event.special[r] || {}).delegateType && e.stopPropagation();
- else if (n = ae.call(arguments),
- _.set(this, r, n),
- this[r](),
- t = _.get(this, r),
- _.set(this, r, !1),
- n !== t)
- return e.stopImmediatePropagation(),
- e.preventDefault(),
- t
- } else
- n && (_.set(this, r, ce.event.trigger(n[0], n.slice(1), this)),
- e.stopPropagation(),
- e.isImmediatePropagationStopped = Ne)
- }
- })) : void 0 === _.get(e, r) && ce.event.add(e, r, Ne)
- }
- ce.event = {
- global: {},
- add: function(t, e, n, r, i) {
- var o, a, s, u, l, c, f, p, d, h, g, v = _.get(t);
- if ($(t)) {
- n.handler && (n = (o = n).handler,
- i = o.selector),
- i && ce.find.matchesSelector(J, i),
- n.guid || (n.guid = ce.guid++),
- (u = v.events) || (u = v.events = Object.create(null)),
- (a = v.handle) || (a = v.handle = function(e) {
- return "undefined" != typeof ce && ce.event.triggered !== e.type ? ce.event.dispatch.apply(t, arguments) : void 0
- }
- ),
- l = (e = (e || "").match(D) || [""]).length;
- while (l--)
- d = g = (s = De.exec(e[l]) || [])[1],
- h = (s[2] || "").split(".").sort(),
- d && (f = ce.event.special[d] || {},
- d = (i ? f.delegateType : f.bindType) || d,
- f = ce.event.special[d] || {},
- c = ce.extend({
- type: d,
- origType: g,
- data: r,
- handler: n,
- guid: n.guid,
- selector: i,
- needsContext: i && ce.expr.match.needsContext.test(i),
- namespace: h.join(".")
- }, o),
- (p = u[d]) || ((p = u[d] = []).delegateCount = 0,
- f.setup && !1 !== f.setup.call(t, r, h, a) || t.addEventListener && t.addEventListener(d, a)),
- f.add && (f.add.call(t, c),
- c.handler.guid || (c.handler.guid = n.guid)),
- i ? p.splice(p.delegateCount++, 0, c) : p.push(c),
- ce.event.global[d] = !0)
- }
- },
- remove: function(e, t, n, r, i) {
- var o, a, s, u, l, c, f, p, d, h, g, v = _.hasData(e) && _.get(e);
- if (v && (u = v.events)) {
- l = (t = (t || "").match(D) || [""]).length;
- while (l--)
- if (d = g = (s = De.exec(t[l]) || [])[1],
- h = (s[2] || "").split(".").sort(),
- d) {
- f = ce.event.special[d] || {},
- p = u[d = (r ? f.delegateType : f.bindType) || d] || [],
- s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"),
- a = o = p.length;
- while (o--)
- c = p[o],
- !i && g !== c.origType || n && n.guid !== c.guid || s && !s.test(c.namespace) || r && r !== c.selector && ("**" !== r || !c.selector) || (p.splice(o, 1),
- c.selector && p.delegateCount--,
- f.remove && f.remove.call(e, c));
- a && !p.length && (f.teardown && !1 !== f.teardown.call(e, h, v.handle) || ce.removeEvent(e, d, v.handle),
- delete u[d])
- } else
- for (d in u)
- ce.event.remove(e, d + t[l], n, r, !0);
- ce.isEmptyObject(u) && _.remove(e, "handle events")
- }
- },
- dispatch: function(e) {
- var t, n, r, i, o, a, s = new Array(arguments.length), u = ce.event.fix(e), l = (_.get(this, "events") || Object.create(null))[u.type] || [], c = ce.event.special[u.type] || {};
- for (s[0] = u,
- t = 1; t < arguments.length; t++)
- s[t] = arguments[t];
- if (u.delegateTarget = this,
- !c.preDispatch || !1 !== c.preDispatch.call(this, u)) {
- a = ce.event.handlers.call(this, u, l),
- t = 0;
- while ((i = a[t++]) && !u.isPropagationStopped()) {
- u.currentTarget = i.elem,
- n = 0;
- while ((o = i.handlers[n++]) && !u.isImmediatePropagationStopped())
- u.rnamespace && !1 !== o.namespace && !u.rnamespace.test(o.namespace) || (u.handleObj = o,
- u.data = o.data,
- void 0 !== (r = ((ce.event.special[o.origType] || {}).handle || o.handler).apply(i.elem, s)) && !1 === (u.result = r) && (u.preventDefault(),
- u.stopPropagation()))
- }
- return c.postDispatch && c.postDispatch.call(this, u),
- u.result
- }
- },
- handlers: function(e, t) {
- var n, r, i, o, a, s = [], u = t.delegateCount, l = e.target;
- if (u && l.nodeType && !("click" === e.type && 1 <= e.button))
- for (; l !== this; l = l.parentNode || this)
- if (1 === l.nodeType && ("click" !== e.type || !0 !== l.disabled)) {
- for (o = [],
- a = {},
- n = 0; n < u; n++)
- void 0 === a[i = (r = t[n]).selector + " "] && (a[i] = r.needsContext ? -1 < ce(i, this).index(l) : ce.find(i, this, null, [l]).length),
- a[i] && o.push(r);
- o.length && s.push({
- elem: l,
- handlers: o
- })
- }
- return l = this,
- u < t.length && s.push({
- elem: l,
- handlers: t.slice(u)
- }),
- s
- },
- addProp: function(t, e) {
- Object.defineProperty(ce.Event.prototype, t, {
- enumerable: !0,
- configurable: !0,
- get: v(e) ? function() {
- if (this.originalEvent)
- return e(this.originalEvent)
- }
- : function() {
- if (this.originalEvent)
- return this.originalEvent[t]
- }
- ,
- set: function(e) {
- Object.defineProperty(this, t, {
- enumerable: !0,
- configurable: !0,
- writable: !0,
- value: e
- })
- }
- })
- },
- fix: function(e) {
- return e[ce.expando] ? e : new ce.Event(e)
- },
- special: {
- load: {
- noBubble: !0
- },
- click: {
- setup: function(e) {
- var t = this || e;
- return we.test(t.type) && t.click && fe(t, "input") && He(t, "click", !0),
- !1
- },
- trigger: function(e) {
- var t = this || e;
- return we.test(t.type) && t.click && fe(t, "input") && He(t, "click"),
- !0
- },
- _default: function(e) {
- var t = e.target;
- return we.test(t.type) && t.click && fe(t, "input") && _.get(t, "click") || fe(t, "a")
- }
- },
- beforeunload: {
- postDispatch: function(e) {
- void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result)
- }
- }
- }
- },
- ce.removeEvent = function(e, t, n) {
- e.removeEventListener && e.removeEventListener(t, n)
- }
- ,
- ce.Event = function(e, t) {
- if (!(this instanceof ce.Event))
- return new ce.Event(e,t);
- e && e.type ? (this.originalEvent = e,
- this.type = e.type,
- this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? Ne : qe,
- this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target,
- this.currentTarget = e.currentTarget,
- this.relatedTarget = e.relatedTarget) : this.type = e,
- t && ce.extend(this, t),
- this.timeStamp = e && e.timeStamp || Date.now(),
- this[ce.expando] = !0
- }
- ,
- ce.Event.prototype = {
- constructor: ce.Event,
- isDefaultPrevented: qe,
- isPropagationStopped: qe,
- isImmediatePropagationStopped: qe,
- isSimulated: !1,
- preventDefault: function() {
- var e = this.originalEvent;
- this.isDefaultPrevented = Ne,
- e && !this.isSimulated && e.preventDefault()
- },
- stopPropagation: function() {
- var e = this.originalEvent;
- this.isPropagationStopped = Ne,
- e && !this.isSimulated && e.stopPropagation()
- },
- stopImmediatePropagation: function() {
- var e = this.originalEvent;
- this.isImmediatePropagationStopped = Ne,
- e && !this.isSimulated && e.stopImmediatePropagation(),
- this.stopPropagation()
- }
- },
- ce.each({
- altKey: !0,
- bubbles: !0,
- cancelable: !0,
- changedTouches: !0,
- ctrlKey: !0,
- detail: !0,
- eventPhase: !0,
- metaKey: !0,
- pageX: !0,
- pageY: !0,
- shiftKey: !0,
- view: !0,
- "char": !0,
- code: !0,
- charCode: !0,
- key: !0,
- keyCode: !0,
- button: !0,
- buttons: !0,
- clientX: !0,
- clientY: !0,
- offsetX: !0,
- offsetY: !0,
- pointerId: !0,
- pointerType: !0,
- screenX: !0,
- screenY: !0,
- targetTouches: !0,
- toElement: !0,
- touches: !0,
- which: !0
- }, ce.event.addProp),
- ce.each({
- focus: "focusin",
- blur: "focusout"
- }, function(r, i) {
- function o(e) {
- if (C.documentMode) {
- var t = _.get(this, "handle")
- , n = ce.event.fix(e);
- n.type = "focusin" === e.type ? "focus" : "blur",
- n.isSimulated = !0,
- t(e),
- n.target === n.currentTarget && t(n)
- } else
- ce.event.simulate(i, e.target, ce.event.fix(e))
- }
- ce.event.special[r] = {
- setup: function() {
- var e;
- if (He(this, r, !0),
- !C.documentMode)
- return !1;
- (e = _.get(this, i)) || this.addEventListener(i, o),
- _.set(this, i, (e || 0) + 1)
- },
- trigger: function() {
- return He(this, r),
- !0
- },
- teardown: function() {
- var e;
- if (!C.documentMode)
- return !1;
- (e = _.get(this, i) - 1) ? _.set(this, i, e) : (this.removeEventListener(i, o),
- _.remove(this, i))
- },
- _default: function(e) {
- return _.get(e.target, r)
- },
- delegateType: i
- },
- ce.event.special[i] = {
- setup: function() {
- var e = this.ownerDocument || this.document || this
- , t = C.documentMode ? this : e
- , n = _.get(t, i);
- n || (C.documentMode ? this.addEventListener(i, o) : e.addEventListener(r, o, !0)),
- _.set(t, i, (n || 0) + 1)
- },
- teardown: function() {
- var e = this.ownerDocument || this.document || this
- , t = C.documentMode ? this : e
- , n = _.get(t, i) - 1;
- n ? _.set(t, i, n) : (C.documentMode ? this.removeEventListener(i, o) : e.removeEventListener(r, o, !0),
- _.remove(t, i))
- }
- }
- }),
- ce.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout",
- pointerenter: "pointerover",
- pointerleave: "pointerout"
- }, function(e, i) {
- ce.event.special[e] = {
- delegateType: i,
- bindType: i,
- handle: function(e) {
- var t, n = e.relatedTarget, r = e.handleObj;
- return n && (n === this || ce.contains(this, n)) || (e.type = r.origType,
- t = r.handler.apply(this, arguments),
- e.type = i),
- t
- }
- }
- }),
- ce.fn.extend({
- on: function(e, t, n, r) {
- return Le(this, e, t, n, r)
- },
- one: function(e, t, n, r) {
- return Le(this, e, t, n, r, 1)
- },
- off: function(e, t, n) {
- var r, i;
- if (e && e.preventDefault && e.handleObj)
- return r = e.handleObj,
- ce(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler),
- this;
- if ("object" == typeof e) {
- for (i in e)
- this.off(i, t, e[i]);
- return this
- }
- return !1 !== t && "function" != typeof t || (n = t,
- t = void 0),
- !1 === n && (n = qe),
- this.each(function() {
- ce.event.remove(this, e, n, t)
- })
- }
- });
- var Oe = /