debug
This commit is contained in:
64
code/.example.env
Normal file
64
code/.example.env
Normal file
@@ -0,0 +1,64 @@
|
||||
# 应用
|
||||
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
|
||||
12
code/.gitignore
vendored
Normal file
12
code/.gitignore
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
*.log
|
||||
.env
|
||||
composer.phar
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
/.idea
|
||||
/.vscode
|
||||
/vendor
|
||||
/.settings
|
||||
/.buildpath
|
||||
/.project
|
||||
composer.lock
|
||||
42
code/.travis.yml
Normal file
42
code/.travis.yml
Normal file
@@ -0,0 +1,42 @@
|
||||
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
|
||||
1
code/app/.htaccess
Normal file
1
code/app/.htaccess
Normal file
@@ -0,0 +1 @@
|
||||
deny from all
|
||||
22
code/app/AppService.php
Normal file
22
code/app/AppService.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app;
|
||||
|
||||
use think\Service;
|
||||
|
||||
/**
|
||||
* 应用服务类
|
||||
*/
|
||||
class AppService extends Service
|
||||
{
|
||||
public function register()
|
||||
{
|
||||
// 服务注册
|
||||
}
|
||||
|
||||
public function boot()
|
||||
{
|
||||
// 服务启动
|
||||
}
|
||||
}
|
||||
58
code/app/ExceptionHandle.php
Normal file
58
code/app/ExceptionHandle.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
namespace app;
|
||||
|
||||
use think\db\exception\DataNotFoundException;
|
||||
use think\db\exception\ModelNotFoundException;
|
||||
use think\exception\Handle;
|
||||
use think\exception\HttpException;
|
||||
use think\exception\HttpResponseException;
|
||||
use think\exception\ValidateException;
|
||||
use think\Response;
|
||||
use Throwable;
|
||||
|
||||
/**
|
||||
* 应用异常处理类
|
||||
*/
|
||||
class ExceptionHandle extends Handle
|
||||
{
|
||||
/**
|
||||
* 不需要记录信息(日志)的异常类列表
|
||||
* @var array
|
||||
*/
|
||||
protected $ignoreReport = [
|
||||
HttpException::class,
|
||||
HttpResponseException::class,
|
||||
ModelNotFoundException::class,
|
||||
DataNotFoundException::class,
|
||||
ValidateException::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* 记录异常信息(包括日志或者其它方式记录)
|
||||
*
|
||||
* @access public
|
||||
* @param Throwable $exception
|
||||
* @return void
|
||||
*/
|
||||
public function report(Throwable $exception): void
|
||||
{
|
||||
// 使用内置的方式记录异常日志
|
||||
parent::report($exception);
|
||||
}
|
||||
|
||||
/**
|
||||
* Render an exception into an HTTP response.
|
||||
*
|
||||
* @access public
|
||||
* @param \think\Request $request
|
||||
* @param Throwable $e
|
||||
* @return Response
|
||||
*/
|
||||
public function render($request, Throwable $e): Response
|
||||
{
|
||||
// 添加自定义异常处理机制
|
||||
|
||||
// 其他错误交给系统处理
|
||||
return parent::render($request, $e);
|
||||
}
|
||||
}
|
||||
8
code/app/Request.php
Normal file
8
code/app/Request.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
namespace app;
|
||||
|
||||
// 应用请求对象类
|
||||
class Request extends \think\Request
|
||||
{
|
||||
|
||||
}
|
||||
36
code/app/admin/AdminServiceProvider.php
Normal file
36
code/app/admin/AdminServiceProvider.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\admin;
|
||||
|
||||
use app\model\AdminUserModel;
|
||||
use app\admin\service\AdminUserAuth;
|
||||
use app\Request;
|
||||
use think\Container;
|
||||
|
||||
class AdminServiceProvider extends \think\Service
|
||||
{
|
||||
/**
|
||||
* 注册服务
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
|
||||
Container::getInstance()->bind(AdminUserModel::class, function (Request $Request) {
|
||||
return AdminUserModel::getUserByToken($Request->header("admin-token"));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行服务
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
107
code/app/admin/BaseController.php
Normal file
107
code/app/admin/BaseController.php
Normal file
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\admin;
|
||||
|
||||
use app\admin\middleware\AdminResponse;
|
||||
use think\App;
|
||||
use think\exception\ValidateException;
|
||||
use think\Validate;
|
||||
|
||||
/**
|
||||
* 控制器基础类
|
||||
*/
|
||||
abstract class BaseController
|
||||
{
|
||||
/**
|
||||
* Request实例
|
||||
* @var \think\Request
|
||||
*/
|
||||
protected $request;
|
||||
|
||||
/**
|
||||
* 应用实例
|
||||
* @var \think\App
|
||||
*/
|
||||
protected $app;
|
||||
|
||||
/**
|
||||
* 是否批量验证
|
||||
* @var bool
|
||||
*/
|
||||
protected $batchValidate = false;
|
||||
|
||||
/**
|
||||
* 控制器中间件
|
||||
* @var array
|
||||
*/
|
||||
protected $middleware = [];
|
||||
|
||||
/**
|
||||
* 构造方法
|
||||
* @access public
|
||||
* @param App $app 应用对象
|
||||
*/
|
||||
public function __construct(App $app)
|
||||
{
|
||||
$this->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);
|
||||
}
|
||||
}
|
||||
2
code/app/admin/common.php
Normal file
2
code/app/admin/common.php
Normal file
@@ -0,0 +1,2 @@
|
||||
<?php
|
||||
// 这是系统自动生成的公共文件
|
||||
38
code/app/admin/config/error.php
Normal file
38
code/app/admin/config/error.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
#用户组
|
||||
'1000' => '成功',
|
||||
|
||||
'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' => '系统异常!',
|
||||
];
|
||||
66
code/app/admin/config/router.php
Normal file
66
code/app/admin/config/router.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use app\admin\controller\AdminUser;
|
||||
use app\admin\controller\Domain;
|
||||
use app\admin\controller\Novel;
|
||||
use app\admin\controller\Site;
|
||||
use app\admin\controller\SystemConfig;
|
||||
use app\admin\middleware\AdminAuth;
|
||||
use think\facade\Route;
|
||||
|
||||
Route::group("/guest", function () {
|
||||
Route::post("/login", "Guest/Login")->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);
|
||||
153
code/app/admin/controller/AdminUser.php
Normal file
153
code/app/admin/controller/AdminUser.php
Normal file
@@ -0,0 +1,153 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\admin\BaseController;
|
||||
use app\model\AdminUserModel;
|
||||
use app\admin\service\AdminUserAuth;
|
||||
use app\Request;
|
||||
use think\facade\Cache;
|
||||
use think\Response;
|
||||
|
||||
class AdminUser extends BaseController
|
||||
{
|
||||
/**
|
||||
* 详情
|
||||
*
|
||||
* @param Request $Request
|
||||
* @param AdminUserModel|null $AdminUserModel
|
||||
* @return Response
|
||||
*/
|
||||
public function info(Request $Request, ?AdminUserModel $AdminUserModel)
|
||||
{
|
||||
$arrResult = [
|
||||
'admin_user' => $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();
|
||||
}
|
||||
}
|
||||
359
code/app/admin/controller/GuangGao.php
Normal file
359
code/app/admin/controller/GuangGao.php
Normal file
@@ -0,0 +1,359 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\admin\BaseController;
|
||||
use app\model\AdminUserModel;
|
||||
use app\model\FenLeiModel;
|
||||
use app\model\GuangGaoFenZuModel;
|
||||
use app\model\GuangGaoModel;
|
||||
use app\model\GuangGaoPeiZhiModel;
|
||||
use app\model\NvYouModel;
|
||||
use app\model\ShiPinModel;
|
||||
use app\Request;
|
||||
use think\Response;
|
||||
|
||||
class GuangGao extends BaseController
|
||||
{
|
||||
|
||||
/**
|
||||
* 廣告分組列表
|
||||
*
|
||||
* @param Request $Request
|
||||
* @param AdminUserModel|null $AdminUserModel
|
||||
* @return Response
|
||||
*/
|
||||
public function getGuangGaoFenZuList(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);
|
||||
|
||||
$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();
|
||||
}
|
||||
}
|
||||
70
code/app/admin/controller/Guest.php
Normal file
70
code/app/admin/controller/Guest.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\admin\BaseController;
|
||||
use app\model\AdminUserModel;
|
||||
use app\admin\service\AdminUserAuth;
|
||||
use app\Request;
|
||||
use think\facade\Cache;
|
||||
use think\Response;
|
||||
|
||||
class Guest extends BaseController
|
||||
{
|
||||
/**
|
||||
* 登录
|
||||
*
|
||||
* @param Request $Request
|
||||
* @param AdminUserModel|null $AdminUserModel
|
||||
* @return Response
|
||||
*/
|
||||
public function Login(Request $Request, ?AdminUserModel $AdminUserModel)
|
||||
{
|
||||
$arrData = [
|
||||
"au_name" => $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);
|
||||
}
|
||||
}
|
||||
}
|
||||
12
code/app/admin/controller/Index.php
Normal file
12
code/app/admin/controller/Index.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
class Index
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return '您好!这是一个[admin]示例应用';
|
||||
}
|
||||
}
|
||||
113
code/app/admin/controller/Novel.php
Normal file
113
code/app/admin/controller/Novel.php
Normal file
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\admin\BaseController;
|
||||
use app\model\AdminUserModel;
|
||||
use app\model\CategoryModel;
|
||||
use app\model\FenLeiModel;
|
||||
use app\model\GuangGaoFenZuModel;
|
||||
use app\model\GuangGaoModel;
|
||||
use app\model\GuangGaoPeiZhiModel;
|
||||
use app\model\NovelModel;
|
||||
use app\model\NvYouModel;
|
||||
use app\model\ShiPinModel;
|
||||
use app\Request;
|
||||
use think\Response;
|
||||
|
||||
class Novel extends BaseController
|
||||
{
|
||||
|
||||
/**
|
||||
* 根据关键词修改小说评级
|
||||
*
|
||||
* @param Request $Request
|
||||
* @param AdminUserModel|null $AdminUserModel
|
||||
* @return Response
|
||||
*/
|
||||
public function updateNovelLevel(Request $Request, ?AdminUserModel $AdminUserModel)
|
||||
{
|
||||
$arrData = [
|
||||
"keywords" => $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);
|
||||
}
|
||||
}
|
||||
482
code/app/admin/controller/Site.php
Normal file
482
code/app/admin/controller/Site.php
Normal file
@@ -0,0 +1,482 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\admin\BaseController;
|
||||
use app\model\AdminUserModel;
|
||||
use app\model\ConverterMovel;
|
||||
use app\model\DomainModel;
|
||||
use app\model\SubjectFomartGroupModel;
|
||||
use app\model\SubjectFomartModel;
|
||||
use app\model\TemplatesModel;
|
||||
use app\Request;
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
use think\Response;
|
||||
|
||||
|
||||
class Site extends BaseController
|
||||
{
|
||||
|
||||
/**
|
||||
* upload site domain info file
|
||||
*
|
||||
* @param Request $Request
|
||||
* @param AdminUserModel|null $AdminUserModel
|
||||
* @return Response
|
||||
*/
|
||||
public function getTKDArgList(Request $Request, ?AdminUserModel $AdminUserModel)
|
||||
{
|
||||
return $this->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],
|
||||
'info_id' => $arrRows[13],
|
||||
];
|
||||
|
||||
$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();
|
||||
}
|
||||
}
|
||||
391
code/app/admin/controller/SystemConfig.php
Normal file
391
code/app/admin/controller/SystemConfig.php
Normal file
@@ -0,0 +1,391 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\admin\BaseController;
|
||||
use app\model\AdminUserModel;
|
||||
use app\model\BaoYangRuZhuModel;
|
||||
use app\model\CaiJiPeiZhiModel;
|
||||
use app\model\DaLiWanFanKuiModel;
|
||||
use app\model\DaLiWanModel;
|
||||
use app\model\DomainModel;
|
||||
use app\model\GuanFangZiYingModel;
|
||||
use app\model\LouFengModel;
|
||||
use app\model\PlanTaskModel;
|
||||
use app\model\SubjectFomartModel;
|
||||
use app\model\SystemConfigModel;
|
||||
use app\model\TemplatesModel;
|
||||
use app\model\ZiYuanDuanDianModel;
|
||||
use app\Request;
|
||||
use think\Response;
|
||||
|
||||
class SystemConfig extends BaseController
|
||||
{
|
||||
|
||||
/**
|
||||
* 采集配置列表
|
||||
*
|
||||
* @param Request $Request
|
||||
* @param AdminUserModel|null $AdminUserModel
|
||||
* @return Response
|
||||
*/
|
||||
public function getCaiJiPeiZhiList(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);
|
||||
|
||||
$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();
|
||||
}
|
||||
}
|
||||
5
code/app/admin/event.php
Normal file
5
code/app/admin/event.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
// 这是系统自动生成的event定义文件
|
||||
return [
|
||||
|
||||
];
|
||||
9
code/app/admin/middleware.php
Normal file
9
code/app/admin/middleware.php
Normal file
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
// 这是系统自动生成的middleware定义文件
|
||||
|
||||
use app\admin\middleware\AdminCors;
|
||||
|
||||
return [
|
||||
AdminCors::class,
|
||||
think\middleware\LoadLangPack::class,
|
||||
];
|
||||
34
code/app/admin/middleware/AdminAuth.php
Normal file
34
code/app/admin/middleware/AdminAuth.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\admin\middleware;
|
||||
|
||||
use app\model\AdminUserModel;
|
||||
use app\admin\service\AdminUserAuth;
|
||||
use app\Request;
|
||||
use think\Response;
|
||||
use think\facade\App;
|
||||
|
||||
class AdminAuth
|
||||
{
|
||||
public function handle(Request $Request, \Closure $Next)
|
||||
{
|
||||
try {
|
||||
/**@var AdminUserModel */
|
||||
$AdminUserModel = App::make(AdminUserModel::class);
|
||||
|
||||
if (empty($AdminUserModel)) {
|
||||
return AdminResponse::create("9995");
|
||||
}
|
||||
|
||||
if ($AdminUserModel->checkRole() == false) {
|
||||
return AdminResponse::create("9991");
|
||||
}
|
||||
|
||||
return $Next($Request);
|
||||
} catch (\Throwable $T) {
|
||||
return AdminResponse::createByErr($T);
|
||||
}
|
||||
}
|
||||
}
|
||||
22
code/app/admin/middleware/AdminCors.php
Normal file
22
code/app/admin/middleware/AdminCors.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\admin\middleware;
|
||||
|
||||
use app\model\AdminUserModel;
|
||||
use app\admin\service\AdminUserAuth;
|
||||
use app\Request;
|
||||
use think\Response;
|
||||
use think\facade\App;
|
||||
use think\middleware\AllowCrossDomain;
|
||||
|
||||
class AdminCors extends AllowCrossDomain
|
||||
{
|
||||
protected $header = [
|
||||
'Access-Control-Allow-Credentials' => 'true',
|
||||
'Access-Control-Max-Age' => 3600,
|
||||
'Access-Control-Allow-Methods' => '*',
|
||||
'Access-Control-Allow-Headers' => '*',
|
||||
];
|
||||
}
|
||||
17
code/app/admin/middleware/AdminException.php
Normal file
17
code/app/admin/middleware/AdminException.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\admin\middleware;
|
||||
|
||||
use think\exception\Handle;
|
||||
use think\Response;
|
||||
use Throwable;
|
||||
|
||||
class AdminException extends Handle
|
||||
{
|
||||
public function render($Request, Throwable $T): Response
|
||||
{
|
||||
return AdminResponse::createByErr($T);
|
||||
}
|
||||
}
|
||||
57
code/app/admin/middleware/AdminResponse.php
Normal file
57
code/app/admin/middleware/AdminResponse.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\admin\middleware;
|
||||
|
||||
use app\admin\service\AdminUserAuth;
|
||||
use app\Request;
|
||||
use think\exception\ValidateException;
|
||||
use think\Response;
|
||||
use think\facade\App;
|
||||
|
||||
class AdminResponse
|
||||
{
|
||||
static public function create($strCode = "1000", $strMsg = "", $arrData = [])
|
||||
{
|
||||
$arrError = config("error");
|
||||
|
||||
if (!key_exists($strCode, $arrError)) {
|
||||
$strCode = "9999";
|
||||
}
|
||||
|
||||
if ($strMsg == "") {
|
||||
$strMsg = $arrError[$strCode];
|
||||
}
|
||||
|
||||
$arrData = [
|
||||
'code' => $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());
|
||||
}
|
||||
}
|
||||
12
code/app/admin/provider.php
Normal file
12
code/app/admin/provider.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
use app\admin\AdminServiceProvider;
|
||||
use app\admin\middleware\AdminException;
|
||||
use app\ExceptionHandle;
|
||||
use app\Request;
|
||||
|
||||
// 容器Provider定义文件
|
||||
return [
|
||||
'think\Request' => Request::class,
|
||||
'think\exception\Handle' => AdminException::class,
|
||||
];
|
||||
98
code/app/api/BaseController.php
Normal file
98
code/app/api/BaseController.php
Normal file
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\api;
|
||||
|
||||
use ddl\DDLManage;
|
||||
use think\App;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\View;
|
||||
use think\Validate;
|
||||
|
||||
/**
|
||||
* 控制器基础类
|
||||
*/
|
||||
abstract class BaseController
|
||||
{
|
||||
/**
|
||||
* Request实例
|
||||
* @var \think\Request
|
||||
*/
|
||||
protected $request;
|
||||
|
||||
/**
|
||||
* 应用实例
|
||||
* @var \think\App
|
||||
*/
|
||||
protected $app;
|
||||
|
||||
/**
|
||||
* 是否批量验证
|
||||
* @var bool
|
||||
*/
|
||||
protected $batchValidate = false;
|
||||
|
||||
/**
|
||||
* 控制器中间件
|
||||
* @var array
|
||||
*/
|
||||
protected $middleware = [];
|
||||
|
||||
/**
|
||||
* 构造方法
|
||||
* @access public
|
||||
* @param App $app 应用对象
|
||||
*/
|
||||
public function __construct(App $app)
|
||||
{
|
||||
|
||||
$this->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);
|
||||
}
|
||||
}
|
||||
2
code/app/api/common.php
Normal file
2
code/app/api/common.php
Normal file
@@ -0,0 +1,2 @@
|
||||
<?php
|
||||
// 这是系统自动生成的公共文件
|
||||
33
code/app/api/config/router.php
Normal file
33
code/app/api/config/router.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use app\api\controller\Novel;
|
||||
use app\api\controller\Statis;
|
||||
use think\facade\Route;
|
||||
|
||||
|
||||
Route::post("/publish", [Statis::class, 'publish'])
|
||||
// ->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');
|
||||
12
code/app/api/config/throttle.php
Normal file
12
code/app/api/config/throttle.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
use think\middleware\Throttle;
|
||||
use think\Response;
|
||||
|
||||
return [
|
||||
'prefix' => '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);
|
||||
},
|
||||
];
|
||||
44
code/app/api/controller/Statis.php
Normal file
44
code/app/api/controller/Statis.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\api\controller;
|
||||
|
||||
use app\api\BaseController;
|
||||
use app\model\CategoryModel;
|
||||
use app\model\NovelClicksModel;
|
||||
use app\model\NovelModel;
|
||||
use DateTime;
|
||||
use db\mongo\MongoBase;
|
||||
use ddl\DDLManage;
|
||||
use Exception;
|
||||
use think\Request;
|
||||
use think\Response;
|
||||
|
||||
class Statis extends BaseController
|
||||
{
|
||||
/**
|
||||
* novel statis
|
||||
*
|
||||
* @param Request $Request
|
||||
* @return Response
|
||||
*/
|
||||
public function publish(Request $Request): Response
|
||||
{
|
||||
$intNId = $Request->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);
|
||||
}
|
||||
}
|
||||
5
code/app/api/event.php
Normal file
5
code/app/api/event.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
// 这是系统自动生成的event定义文件
|
||||
return [
|
||||
|
||||
];
|
||||
5
code/app/api/middleware.php
Normal file
5
code/app/api/middleware.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
// 这是系统自动生成的middleware定义文件
|
||||
return [
|
||||
\think\middleware\AllowCrossDomain::class,
|
||||
];
|
||||
829
code/app/common.php
Normal file
829
code/app/common.php
Normal file
@@ -0,0 +1,829 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
// 应用公共文件
|
||||
|
||||
namespace {
|
||||
|
||||
use think\facade\Cache;
|
||||
|
||||
use function MongoDB\object;
|
||||
|
||||
function getUriByUrl($strUrl)
|
||||
{
|
||||
$arrUrl = parse_url($strUrl);
|
||||
|
||||
return $arrUrl['path'];
|
||||
}
|
||||
|
||||
function getArgByUrl($strUrl, $strKey)
|
||||
{
|
||||
$arrPaseUrl = parse_url($strUrl);
|
||||
$strUri = $arrPaseUrl['query'];
|
||||
parse_str($strUri, $arrUrl);
|
||||
|
||||
return $arrUrl[$strKey];
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索字符串中某个词语出现后所有的字符
|
||||
*
|
||||
* @param string $string 要搜索的字符串
|
||||
* @param string $searchWord 要搜索的词语
|
||||
* @return string 搜索词语后面的所有字符,如果没有找到词语则返回空字符串
|
||||
*/
|
||||
function getStringAfterWord($string, $searchWord)
|
||||
{
|
||||
// 查找词语的位置
|
||||
$pos = mb_strpos($string, $searchWord);
|
||||
|
||||
// 如果找到了词语
|
||||
if ($pos !== false) {
|
||||
// 获取词语出现后所有的字符
|
||||
return trim(mb_substr($string, $pos + mb_strlen($searchWord)));
|
||||
} else {
|
||||
// 如果没有找到词语,返回空字符串
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
// 将 Cookie 字符串解析为数组
|
||||
function parseCookies($cookieString)
|
||||
{
|
||||
$cookies = [];
|
||||
$pairs = explode('; ', $cookieString);
|
||||
foreach ($pairs as $pair) {
|
||||
list($name, $value) = explode('=', $pair, 2);
|
||||
$cookies[$name] = $value;
|
||||
}
|
||||
return $cookies;
|
||||
}
|
||||
|
||||
// 获取域名函数
|
||||
function getDomainFromUrl($url)
|
||||
{
|
||||
$host = parse_url($url, PHP_URL_HOST);
|
||||
return $host ?: 'default.com';
|
||||
}
|
||||
|
||||
function replaceLastPageNumber($url, $number)
|
||||
{
|
||||
// 使用正则表达式替换最后一个 "1" 为 "number"
|
||||
return preg_replace('/1(?=[^1]*$)/', $number, $url);
|
||||
}
|
||||
|
||||
function removeScriptTags($rpText, $newText)
|
||||
{
|
||||
// 使用正则表达式替换所有 <script> 标签
|
||||
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 = '<ul class="stui-page text-center clearfix">';
|
||||
|
||||
// 首页按钮
|
||||
$paginationHtml .= '<li><a style="' . getRandomColor() . '" href="' . str_replace(':page', 1, $baseUrl . $queryParams) . '">首页</a></li>';
|
||||
|
||||
// 上一页按钮
|
||||
if ($currentPage > 1) {
|
||||
$paginationHtml .= '<li><a style="' . getRandomColor() . '" href="' . str_replace(':page', $currentPage - 1, $baseUrl . $queryParams) . '">上一页</a></li>';
|
||||
} else {
|
||||
$paginationHtml .= '<li class="disabled"><span>上一页</span></li>';
|
||||
}
|
||||
|
||||
// 页码范围控制:最多显示 $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 .= '<li class="active"><a style="' . getRandomColor() . '" href="' . str_replace(':page', $i, $baseUrl . $queryParams) . '">' . $i . '</a></li>';
|
||||
} else {
|
||||
$paginationHtml .= '<li><a style="' . getRandomColor() . '" href="' . str_replace(':page', $i, $baseUrl . $queryParams) . '">' . $i . '</a></li>';
|
||||
}
|
||||
}
|
||||
|
||||
// 下一页按钮
|
||||
if ($currentPage < $lastPage) {
|
||||
$paginationHtml .= '<li><a style="' . getRandomColor() . '" href="' . str_replace(':page', $currentPage + 1, $baseUrl . $queryParams) . '">下一页</a></li>';
|
||||
} else {
|
||||
$paginationHtml .= '<li class="disabled"><span>下一页</span></li>';
|
||||
}
|
||||
|
||||
// 尾页按钮
|
||||
$paginationHtml .= '<li><a style="' . getRandomColor() . '" href="' . str_replace(':page', $lastPage, $baseUrl . $queryParams) . '">尾页</a></li>';
|
||||
|
||||
$paginationHtml .= '</ul>';
|
||||
|
||||
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 = '<div class="row sort_page_num">';
|
||||
|
||||
// 首页按钮
|
||||
$paginationHtml .= '<a class="prev_off" href="' . str_replace(':page', 1, $baseUrl . $queryParams) . '">首 页</a>';
|
||||
|
||||
// 计算分页起始和结束
|
||||
$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 .= '<a class="page_on" href="' . str_replace(':page', $i, $baseUrl . $queryParams) . '"> ' . $i . ' </a>';
|
||||
} else {
|
||||
$paginationHtml .= '<a href="' . str_replace(':page', $i, $baseUrl . $queryParams) . '"> ' . $i . ' </a>';
|
||||
}
|
||||
}
|
||||
|
||||
// 下一页按钮
|
||||
if ($currentPage < $lastPage) {
|
||||
$paginationHtml .= '<a class="prev_on" href="' . str_replace(':page', $currentPage + 1, $baseUrl . $queryParams) . '">下一页</a>';
|
||||
}
|
||||
|
||||
$paginationHtml .= '</div>';
|
||||
|
||||
return $paginationHtml;
|
||||
}
|
||||
|
||||
// 分页模板-时空小说模板
|
||||
function generateNovelSkPaginationHtml($currentPage, $lastPage, $baseUrl, $queryParams, $maxPagesToShow = 10)
|
||||
{
|
||||
$paginationHtml = '<ul class="pagination justify-content-center">';
|
||||
|
||||
// 上一页按钮
|
||||
if ($currentPage > 1) {
|
||||
$paginationHtml .= '<li class="page-item"><a class="page-link" href="' . str_replace(':page', $currentPage - 1, $baseUrl . $queryParams) . '">上一页</a></li>';
|
||||
} else {
|
||||
$paginationHtml .= '<li class="page-item disabled"><span class="page-link">上一页</span></li>';
|
||||
}
|
||||
|
||||
// 计算分页起始和结束
|
||||
$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 .= '<li class="page-item active"><span class="page-link">' . $i . '</span></li>';
|
||||
} else {
|
||||
$paginationHtml .= '<li class="page-item"><a class="page-link" href="' . str_replace(':page', $i, $baseUrl . $queryParams) . '">' . $i . '</a></li>';
|
||||
}
|
||||
}
|
||||
|
||||
// 下一页按钮
|
||||
if ($currentPage < $lastPage) {
|
||||
$paginationHtml .= '<li class="page-item"><a class="page-link" href="' . str_replace(':page', $currentPage + 1, $baseUrl . $queryParams) . '">下一页</a></li>';
|
||||
} else {
|
||||
$paginationHtml .= '<li class="page-item disabled"><span class="page-link">下一页</span></li>';
|
||||
}
|
||||
|
||||
// 显示当前页码/总页数
|
||||
$paginationHtml .= '<li class="page-item disabled"><span class="page-link">' . $currentPage . '/' . $lastPage . '</span></li>';
|
||||
|
||||
$paginationHtml .= '</ul>';
|
||||
|
||||
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.*>.*<\/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;
|
||||
}
|
||||
}
|
||||
17
code/app/event.php
Normal file
17
code/app/event.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
// 事件定义文件
|
||||
return [
|
||||
'bind' => [
|
||||
],
|
||||
|
||||
'listen' => [
|
||||
'AppInit' => [],
|
||||
'HttpRun' => [],
|
||||
'HttpEnd' => [],
|
||||
'LogLevel' => [],
|
||||
'LogWrite' => [],
|
||||
],
|
||||
|
||||
'subscribe' => [
|
||||
],
|
||||
];
|
||||
152
code/app/home/BaseController.php
Normal file
152
code/app/home/BaseController.php
Normal file
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\home;
|
||||
|
||||
use app\model\ConverterMovel;
|
||||
use app\model\GanRaoMaModel;
|
||||
use app\model\CategoryModel;
|
||||
use think\App;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\View;
|
||||
use think\Validate;
|
||||
|
||||
/**
|
||||
* 控制器基础类
|
||||
*/
|
||||
abstract class BaseController
|
||||
{
|
||||
/**
|
||||
* Request实例
|
||||
* @var \think\Request
|
||||
*/
|
||||
protected $request;
|
||||
|
||||
/**
|
||||
* 应用实例
|
||||
* @var \think\App
|
||||
*/
|
||||
protected $app;
|
||||
|
||||
/**
|
||||
* 是否批量验证
|
||||
* @var bool
|
||||
*/
|
||||
protected $batchValidate = false;
|
||||
|
||||
/**
|
||||
* 控制器中间件
|
||||
* @var array
|
||||
*/
|
||||
protected $middleware = [];
|
||||
|
||||
/**
|
||||
* 构造方法
|
||||
* @access public
|
||||
* @param App $app 应用对象
|
||||
*/
|
||||
public function __construct(App $app)
|
||||
{
|
||||
$this->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);
|
||||
}
|
||||
}
|
||||
2
code/app/home/common.php
Normal file
2
code/app/home/common.php
Normal file
@@ -0,0 +1,2 @@
|
||||
<?php
|
||||
// 这是系统自动生成的公共文件
|
||||
512
code/app/home/config/router.php
Normal file
512
code/app/home/config/router.php
Normal file
@@ -0,0 +1,512 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use app\home\controller\Index;
|
||||
use app\home\controller\Novel;
|
||||
use app\home\controller\User;
|
||||
use app\services\SiteContext;
|
||||
use think\facade\Route;
|
||||
|
||||
|
||||
Route::get('/article/fenlei/:category', function (\think\Request $Request, SiteContext $SiteContext) {
|
||||
return view('test/test01/index.html');
|
||||
});
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 路由配置文件
|
||||
*/
|
||||
$arrRoutes = [
|
||||
// H5/PC 端前缀
|
||||
'prefixes' => [
|
||||
'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;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
5
code/app/home/config/view.php
Normal file
5
code/app/home/config/view.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
use app\services\SiteContext;
|
||||
|
||||
return app(SiteContext::class)->getViewConfig();
|
||||
249
code/app/home/controller/Index.php
Normal file
249
code/app/home/controller/Index.php
Normal file
@@ -0,0 +1,249 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\home\controller;
|
||||
|
||||
use app\home\BaseController;
|
||||
use app\model\ConverterMovel;
|
||||
use app\model\DomainModel;
|
||||
use app\model\CategoryModel;
|
||||
use app\model\NovelModel;
|
||||
use storage\StorageCore;
|
||||
use think\facade\View;
|
||||
use app\Request;
|
||||
|
||||
class Index extends BaseController
|
||||
{
|
||||
/**
|
||||
* 首页-H5
|
||||
*
|
||||
* @param Request $Request
|
||||
* @return void
|
||||
*/
|
||||
public function index(Request $Request)
|
||||
{
|
||||
|
||||
$boolIsMobile = $Request->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);
|
||||
}
|
||||
}
|
||||
1051
code/app/home/controller/Novel.php
Normal file
1051
code/app/home/controller/Novel.php
Normal file
File diff suppressed because it is too large
Load Diff
102
code/app/home/controller/User.php
Normal file
102
code/app/home/controller/User.php
Normal file
@@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\home\controller;
|
||||
|
||||
use app\home\BaseController;
|
||||
use app\model\NovelModel;
|
||||
use think\facade\View;
|
||||
use app\Request;
|
||||
|
||||
class User extends BaseController
|
||||
{
|
||||
public function index(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);
|
||||
|
||||
$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);
|
||||
}
|
||||
}
|
||||
5
code/app/home/event.php
Normal file
5
code/app/home/event.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
// 这是系统自动生成的event定义文件
|
||||
return [
|
||||
|
||||
];
|
||||
12
code/app/home/middleware.php
Normal file
12
code/app/home/middleware.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
// 这是系统自动生成的middleware定义文件
|
||||
|
||||
use app\services\SiteContext;
|
||||
|
||||
return [
|
||||
function ($request, \Closure $next) {
|
||||
app(SiteContext::class)->initCfg();
|
||||
return $next($request);
|
||||
},
|
||||
|
||||
];
|
||||
109
code/app/home/view/default/baseH5.html
Normal file
109
code/app/home/view/default/baseH5.html
Normal file
@@ -0,0 +1,109 @@
|
||||
<html lang="zh">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title>{block name="title"}{/block}</title>
|
||||
<meta name="keywords" content='{block name="keywords"}{/block}'>
|
||||
<meta name="description" content='{block name="description"}{/block}'>
|
||||
<link rel="shortcut icon" href="/template/default/img/favicon.ico" type="image/x-icon">
|
||||
<link rel="canonical" href="https://{$DomainModel->d_domain}/">
|
||||
<link href="/public/layer/need/layer.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="/template/default/h5/css/style.css">
|
||||
|
||||
{block name="head"}{/block}
|
||||
{block name="head-css"}{/block}
|
||||
{block name="head-js"}{/block}
|
||||
<script>
|
||||
const strPcPath = `{$strPcPath}`;
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="{block name='body-class'}{/block}" id="{block name='body-id'}{/block}">
|
||||
<div class="header">
|
||||
{block name="logo-html"}{/block}
|
||||
|
||||
<div class="operate" id="qs_login"><a href="{$strBookShelfUrlTemp}">书架</a></div>
|
||||
</div>
|
||||
|
||||
<div class="nav">
|
||||
<ul>
|
||||
{if $DomainModel->info_id > 0}
|
||||
<li><a href="/">首 页</a></li>
|
||||
<li><a href="/nindex/">小说首页</a></li>
|
||||
{else}
|
||||
<li><a href="/">首 页</a></li>
|
||||
{/if}
|
||||
|
||||
<li><a href="{$strCategoryIndexUrlTemp}">小说分类</a></li>
|
||||
<li><a href="{$strHistoryUrlTemp}">阅读记录</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
<div class="novel_search">
|
||||
<form id="novel_search" class="search-form" method="get" action="{$strSearchIndexUrlTemp}">
|
||||
<input type="text" class="input-text input-key" name="keyword" placeholder="输入书名/作者进行搜索">
|
||||
<button type="submit" class="btn-tosearch" form="novel_search" value="submit">搜 索</button>
|
||||
</form>
|
||||
</div>
|
||||
{block name="nav-html"}{/block}
|
||||
|
||||
{block name="main"} {/block}
|
||||
|
||||
<div class="wrap-box">
|
||||
<h3 class="wrap-title">
|
||||
<span>最新标签</span>
|
||||
</h3>
|
||||
<div class="rec-focus" style="font-size:12px;">
|
||||
{site:forgelist count="30" d_key="d_key" d_val="ForgeNovel" cache_life="86400"}
|
||||
<a
|
||||
href='{site:nnurl n_id="$ForgeNovel.n_id" n_py="$ForgeNovel.n_name_pinyin" n_fid="$ForgeNovel.n_forge_id"/}'>
|
||||
{$ForgeNovel.n_forge_title}
|
||||
</a>
|
||||
{/site:forgelist}
|
||||
<a href="/sitemap_index.xml">XML地图</a>
|
||||
<a href="/site.txt">网站地图</a>
|
||||
</div>
|
||||
</div>
|
||||
<p style="font-size: 12px;text-align: center;"> 反馈邮箱:
|
||||
{site:cfg code="YOU_XIANG" encode="false"/} Inc. All Rights Reserved.</p>
|
||||
<p style="font-size: 12px;text-align: center;"> </p>
|
||||
<div class="footer">
|
||||
<ul>
|
||||
{if $DomainModel->info_id > 0}
|
||||
<li><a href="/">首 页</a></li>
|
||||
<li><a href="/nindex/">小说首页</a></li>
|
||||
{else}
|
||||
<li><a href="/">首 页</a></li>
|
||||
{/if}
|
||||
<li><a href="{$strCategoryIndexUrlTemp}">分类</a></li>
|
||||
<li><a href="/sitemap_index.xml">XML地图</a></li>
|
||||
<li><a href="{$strHistoryUrlTemp}">阅读记录</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const strPushApi = `{site:cfg code="PUSH_API_DOMAIN" encode="false"/}`;
|
||||
</script>
|
||||
<script src="/template/default/h5/js/jquery.min.js"></script>
|
||||
<script src="/public/layer/layer.js" type="module" charset="utf-8"></script>
|
||||
<script src="/template/default/h5/js/common.js"></script>
|
||||
<script src="/template/default/js/common.js"></script>
|
||||
|
||||
{block name="customize"}
|
||||
|
||||
{/block}
|
||||
|
||||
<!-- 全局统计 -->
|
||||
{site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
|
||||
|
||||
<!-- 站点统计 -->
|
||||
{$DomainModel->d_statis|raw}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
110
code/app/home/view/default/basePc.html
Normal file
110
code/app/home/view/default/basePc.html
Normal file
@@ -0,0 +1,110 @@
|
||||
<html lang="zh">
|
||||
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=utf-8">
|
||||
<meta name="renderer" content="webkit">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta http-equiv="Cache-Control" content="no-cache,must-revalidate">
|
||||
<meta http-equiv="Cache-Control" content="no-siteapp">
|
||||
<meta http-equiv="Cache-Control" content="no-transform">
|
||||
<meta name="robots" content="index, follow" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>{block name="title"}{/block}</title>
|
||||
<meta name="keywords" content='{block name="keywords"}{/block}'>
|
||||
<meta name="description" content='{block name="description"}{/block}'>
|
||||
<meta http-equiv="mobile-agent" content="format=html5; url={$DomainModel->d_domain}">
|
||||
<meta name="shenma-site-verification" content="941546c24f6fa26aab1a1c67341a9e07_1653579597">
|
||||
<link rel="alternate" type="application/vnd.wap.xhtml+xml" media="handheld"
|
||||
href="{$DomainModel->d_domain}">
|
||||
|
||||
<link rel="shortcut icon" href="/template/default/img/favicon.ico" type="image/x-icon">
|
||||
<link href="/public/layer/need/layer.css" rel="stylesheet">
|
||||
<link href="/template/default/pc/css/style.css" rel="stylesheet" type="text/css">
|
||||
{block name="meta-other"}{/block}
|
||||
{block name="head"}{/block}
|
||||
{block name="head-css"}{/block}
|
||||
{block name="head-js"}{/block}
|
||||
<script>
|
||||
const strPcPath = `{$strPcPath}`;
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="novel_home {block name='body-class'}{/block}" id="{block name='body-id'}{/block}">
|
||||
<div class="topbar">
|
||||
<div class="topbar-con">
|
||||
<div class="topbar-sethome"><a href="javascript:winSetHP();">将本站设为首页</a></div>
|
||||
<div class="topbar-addfavorite"><a href="javascript:winAddFav()">收藏{$DomainModel->d_name}</a></div>
|
||||
<div class="topbar-right" id="qs_login"><a href="{$strPcPath}{$strBookShelfUrlTemp}">我的书架</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="header">
|
||||
<h1 class="logo"><a href="{$strPcPath}"><span>{$DomainModel->d_name}</span></a></h1>
|
||||
<form id="novel_search" class="search-form" method="get" action="{$strPcPath}{$strSearchIndexUrlTemp}"><input type="text"
|
||||
class="input-text input-key" name="keyword" placeholder="输入书名/作者进行搜索"><button type="submit"
|
||||
class="btn-tosearch" form="novel_search" value="submit">搜索</button></form>
|
||||
</div>
|
||||
<ul class="nav">
|
||||
{if $DomainModel->info_id > 0}
|
||||
<li><a href="{$strPcPath}/">首 页</a></li>
|
||||
<li><a href="{$strPcPath}/nindex/">小说首页</a></li>
|
||||
{else}
|
||||
<li><a href="{$strPcPath}/">首 页</a></li>
|
||||
{/if}
|
||||
<!-- <li><a href="/">首 页</a></li>
|
||||
<li><a href="/nindex">小说首页</a></li> -->
|
||||
<!-- <li><a href="{$strPcPath}/">首 页</a></li> -->
|
||||
{novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
|
||||
<li><a href='{$strPcPath}{site:nflurl category="$strCategoryPinyin" status="all" order="all" page="1"/}'>{$strCategoryName}</a></li>
|
||||
{/novel:category}
|
||||
<li><a href="{$strPcPath}{$strHistoryUrlTemp}">阅读记录</a></li>
|
||||
</ul>
|
||||
|
||||
{block name="main"}
|
||||
|
||||
{/block}
|
||||
|
||||
<div class="row">
|
||||
<div class="layout layout3 layout-col3">
|
||||
<h2 class="layout-tit">最新标签</h2>
|
||||
<ul class="txt-list txt-list-row5 tag_news">
|
||||
{site:forgelist count="50" d_key="d_key" d_val="ForgeNovel" cache_life="86400"}
|
||||
<a
|
||||
href='{$strPcPath}{site:nnurl n_id="$ForgeNovel.n_id" n_py="$ForgeNovel.n_name_pinyin" n_fid="$ForgeNovel.n_forge_id"/}'>
|
||||
{$ForgeNovel.n_forge_title}
|
||||
</a>
|
||||
{/site:forgelist}
|
||||
<a href="/sitemap_index.xml">XML地图</a>
|
||||
<a href="/site.txt">网站地图</a>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer" id="footer">
|
||||
<div class="pc-footer">
|
||||
<p>本站所有内容来源于互联网公开且无需登录即可获取的网页内容,本站爬虫遵循robots协议,若您的网站不希望被本站爬虫抓取,可通过屏蔽novelspider字段实现。<br>本站仅对抓取到的内容由程序自动进行排版处理再展现,不涉及更改内容,不针对任何内容表述任何立场。<br>同时您可手动提交相关目标站点网址给我们(站点内容必须允许游客访问,本站爬虫不会抓取需要登录后才展现内容的站点),爬虫程序会依据负载状态自动爬取相关页面。<br>如内容有违规,请通过本站反馈邮箱提交给我们进行删除处理。
|
||||
</p>
|
||||
<p> 反馈邮箱:
|
||||
{site:cfg code="YOU_XIANG" encode="false"/} Inc. All Rights Reserved. </p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="shuqian"></div>
|
||||
<script>
|
||||
const strPushApi = `{site:cfg code="PUSH_API_DOMAIN" encode="false"/}`;
|
||||
</script>
|
||||
<script src="/template/default/pc/js/jquery.min.js"></script>
|
||||
<script src="/public/layer/layer.js" type="module" charset="utf-8"></script>
|
||||
<script src="/template/default/pc/js/common.js"></script>
|
||||
<script src="/template/default/js/common.js"></script>
|
||||
|
||||
{block name="customize"}
|
||||
|
||||
{/block}
|
||||
|
||||
<!-- 全局统计 -->
|
||||
{site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
|
||||
|
||||
<!-- 站点统计 -->
|
||||
{$DomainModel->d_statis|raw}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
32
code/app/home/view/default/index.md
Normal file
32
code/app/home/view/default/index.md
Normal file
@@ -0,0 +1,32 @@
|
||||
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
|
||||
|
||||
120
code/app/home/view/default/index/index.html
Normal file
120
code/app/home/view/default/index/index.html
Normal file
@@ -0,0 +1,120 @@
|
||||
{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"}
|
||||
<!-- 社交媒体标签 -->
|
||||
<meta property="og:title" content='{site:replace code="INDEX@INDEX@TITLE"}' />
|
||||
<meta property="og:description" content='{site:replace code="INDEX@INDEX@DESCRIPTION"}' />
|
||||
<meta property="og:url" content="https://{$DomainModel->d_domain}" />
|
||||
<meta property="og:type" content="website" />
|
||||
|
||||
<!-- 结构化数据 -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
"name": "{$DomainModel->d_name}",
|
||||
"url": "https://{$DomainModel->d_domain}",
|
||||
"headline": '{site:replace code="INDEX@INDEX@TITLE"}',
|
||||
"description": '{site:replace code="INDEX@INDEX@DESCRIPTION"}',
|
||||
"datePublished": "{:date('Y-m-d')}"
|
||||
|
||||
"potentialAction": {
|
||||
"@type": "SearchAction",
|
||||
"target": 'https://{$DomainModel->d_domain}{site:souurl key="search_term_string" p="1"/}',
|
||||
"query-input": "required name=search_term_string"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="head-js"}{/block}
|
||||
|
||||
{block name="logo-html"}
|
||||
<h1 class="bookname">
|
||||
<a href="/" style="color:#ffffff">{$DomainModel->d_name}</a>-免费在线阅读热门小说
|
||||
</h1>
|
||||
{/block}
|
||||
|
||||
{block name="main"}
|
||||
|
||||
{site:grm page_code="h5_index" diff="0" num="100" g_key="arrGrm" /}
|
||||
|
||||
<h2 class="site-description">{$DomainModel->d_index_description}</h2>
|
||||
<div class="wrap-box" style="margin-top:0;">
|
||||
<h3 class="wrap-title"><span>封面推荐</span></h3>
|
||||
<div class="rec-focus">
|
||||
{novel:list count="8" sort_type="tuijian" d_key="d_key" d_val="Novel" p_val="page_data" cache_life="86400"}
|
||||
<dl class="rec-focus-book">
|
||||
<dt class="book-img">
|
||||
{$arrGrm[$d_key]|raw}
|
||||
<a href='{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>
|
||||
<img height="100" width="80" alt="{$Novel.n_name ?? ''} - {$Novel.n_category ?? ''}最新章节在线免费阅读"
|
||||
src="{$Novel.n_cover_path ?? ''}">
|
||||
</a>
|
||||
</dt>
|
||||
<dd class="book-info">
|
||||
<h2><a href='{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>{$Novel.n_name}</a></h2>
|
||||
<p>作者:{$Novel.n_author}</p>
|
||||
<p>{$Novel.n_description}</p>
|
||||
</dd>
|
||||
</dl>
|
||||
{/novel:list}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
|
||||
<div class="wrap-box">
|
||||
<h3 class="wrap-title">
|
||||
<span>{$strCategoryName}</span>
|
||||
<a class="more" href='{site:nflurl category="$strCategoryPinyin" status="all" order="all" page="1"/}'>更多..</a>
|
||||
</h3>
|
||||
<div class="sort-box">
|
||||
<dl class="sort-book-first">
|
||||
|
||||
<?php $start = 1 ;$start +=1 ;?>
|
||||
|
||||
{novel:list count="1" n_category="$strCategoryPinyin" sort_type="news" d_key="d_key" d_val="Novel"
|
||||
p_val="page_data" cache_life="86400"}
|
||||
<dt class="book-img">
|
||||
|
||||
{$arrGrm[$d_key+8+10*$start]|raw}
|
||||
|
||||
<a href='{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'><img
|
||||
height="100" width="80" class="lazyload-img" data-encrypted="false"
|
||||
src="/static/img/default.jpg" data-src="{$Novel.n_cover_path ?? ''}"
|
||||
alt="{$Novel.n_name ?? ''} - {$Novel.n_category ?? ''}最新章节在线免费阅读"></a></dt>
|
||||
<dd class="book-info">
|
||||
<h4><a href='{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>{$Novel.n_name}</a></h4>
|
||||
<p>作者:{$Novel.n_author}</p>
|
||||
<p>{$Novel.n_description}</p>
|
||||
</dd>
|
||||
{/novel:list}
|
||||
</dl>
|
||||
<ul class="sort-book-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"}
|
||||
<li>
|
||||
{$arrGrm[$d_key+8+10*$start]|raw}
|
||||
<a
|
||||
href='{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>{$Novel.n_name}</a><span>{$Novel.n_author}</span>
|
||||
</li>
|
||||
{/novel:list}
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/novel:category}
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
|
||||
|
||||
{/block}
|
||||
18
code/app/home/view/default/novel/getArticleInfo.html
Normal file
18
code/app/home/view/default/novel/getArticleInfo.html
Normal file
@@ -0,0 +1,18 @@
|
||||
{extend name="baseH5" /}
|
||||
{block name='nav-active-class'}home{/block}
|
||||
{block name="title"}{/block}
|
||||
{block name="head-js"}{/block}
|
||||
|
||||
{block name="logo-html"}
|
||||
<h1 class="logo">
|
||||
<a href="/">狂雨小说</a>
|
||||
</h1>
|
||||
{/block}
|
||||
|
||||
{block name="main"}
|
||||
<div style="height:50px"></div>
|
||||
|
||||
article.........
|
||||
{/block}
|
||||
|
||||
{block name="customize"} {/block}
|
||||
46
code/app/home/view/default/novel/getArticleList.html
Normal file
46
code/app/home/view/default/novel/getArticleList.html
Normal file
@@ -0,0 +1,46 @@
|
||||
{extend name="baseH5" /}
|
||||
{block name='nav-active-class'}home{/block}
|
||||
{block name="title"}{/block}
|
||||
{block name="head-js"}{/block}
|
||||
|
||||
{block name="logo-html"}
|
||||
<h1 class="logo">
|
||||
<a href="/">狂雨小说</a>/文章
|
||||
</h1>
|
||||
{/block}
|
||||
|
||||
{block name="main"}
|
||||
<div style="height:50px"></div>
|
||||
|
||||
<div class="mod mod-nav">
|
||||
<div id="book-nav" class="book-nav">
|
||||
<ul class="clearfix">
|
||||
<li><a class="on" href="/article/list.html" btn="search_category">全部</a></li>
|
||||
<li><a href="/article/list-1-1.html" btn="search_category">高考作文</a></li>
|
||||
<li><a href="/article/list-2-1.html" btn="search_category">小说解读</a></li>
|
||||
<li><a href="/article/list-3-1.html" btn="search_category">影视解说</a></li>
|
||||
<li><a href="/article/list-4-1.html" btn="search_category">王者荣耀</a></li>
|
||||
<li><a href="/article/list-5-1.html" btn="search_category">日常八卦</a></li>
|
||||
<li><a href="/article/list-6-1.html" btn="search_category">其它</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="mod new-book">
|
||||
<div class="mod-head">
|
||||
<h3>深度解说列表</h3>
|
||||
</div>
|
||||
<div class="top-index">
|
||||
<ul class="clearfix">
|
||||
{foreach $arrNewsNovel as $key => $vo}
|
||||
{include file="Public/articleList" /}
|
||||
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="customize"} {/block}
|
||||
178
code/app/home/view/default/novel/getLibrary.html
Normal file
178
code/app/home/view/default/novel/getLibrary.html
Normal file
@@ -0,0 +1,178 @@
|
||||
{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"}
|
||||
<!-- 社交媒体标签 -->
|
||||
<meta property="og:title" content='{site:replace code="NOVEL@GETLIBRARY@TITLE"}' />
|
||||
<meta property="og:description" content='{site:replace code="NOVEL@GETLIBRARY@DESCRIPTION"}' />
|
||||
{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
|
||||
<meta property="og:url" content="https://{$DomainModel->d_domain}{$strCategoryIndexUrlTemp}" />
|
||||
{else}
|
||||
|
||||
<meta property="og:url"
|
||||
content='https://{$DomainModel->d_domain}{site:nflurl category="$Request.route.strCategory" status="$Request.route.strStatus" page="$Request.route.intPage"/}' />
|
||||
{/if}
|
||||
<meta property="og:type" content="book" />
|
||||
<!-- 结构化数据 -->
|
||||
{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://{$DomainModel->d_domain}{$strCategoryIndexUrlTemp}",
|
||||
"@type": "book",
|
||||
"headline": '{site:replace code="NOVEL@GETLIBRARY@TITLE"}'
|
||||
"description": '{site:replace code="NOVEL@GETLIBRARY@DESCRIPTION"}',
|
||||
"datePublished": "{:date('Y-m-d')}"
|
||||
}
|
||||
</script>
|
||||
{else}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": 'https://{$DomainModel->d_domain}{site:nflurl category="$Request.route.strCategory" status="$Request.route.strStatus" page="$Request.route.intPage"/}',
|
||||
"@type": "book",
|
||||
"headline": '{site:replace code="NOVEL@GETLIBRARY@TITLE"}',
|
||||
"description": '{site:replace code="NOVEL@GETLIBRARY@DESCRIPTION"}',
|
||||
"datePublished": "{:date('Y-m-d')}"
|
||||
}
|
||||
</script>
|
||||
{/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"}
|
||||
<h1 class="bookname">
|
||||
<a href="/"
|
||||
style="color:#ffffff">{$DomainModel->d_name}</a>-{$Request.route.strCategory}{$Request.route.strOrder}{$Request.route.strStatus}免费阅读
|
||||
</h1>
|
||||
{/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" /}
|
||||
|
||||
<p class="site-description">{$strDescription??''}</p>
|
||||
|
||||
<div class="navpf">
|
||||
<nav class="sortChannel_nav">
|
||||
<a class="on">分类:</a>
|
||||
<a class='{eq name="$Request.route.strCategory" value="all"}on on2 {/eq} {if !$Request.route.strCategory || $Request.route.strCategory == ""}on on2 {/if}'
|
||||
href='{site:nflurl category="all" status="$Request.route.strStatus" order="$Request.route.strOrder" page="$Request.route.intPage"/}'>全部分类</a>
|
||||
|
||||
{novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
|
||||
|
||||
<a class='{eq name="$Request.route.strCategory" value="$strCategoryPinyin"}on on2 {/eq}'
|
||||
href='{site:nflurl category="$strCategoryPinyin" status="$Request.route.strStatus" order="$Request.route.strOrder" page="$Request.route.intPage"/}'>{$strCategoryName}</a>
|
||||
{/novel:category}
|
||||
</nav>
|
||||
<nav class="sortChannel_nav">
|
||||
<a class="on">排序:</a>
|
||||
{novel:sort d_key="key" d_val="strSortName"}
|
||||
<a href='{site:nflurl category="$Request.route.strCategory" status="$Request.route.strStatus" order="$key" page="$Request.route.intPage"/}'
|
||||
class='{eq name="$Request.route.strOrder" value="$key"}on on2 {/eq} {if $key == "all" && $Request.route.strOrder == ""}on on2 {/if}'>{$strSortName}</a>
|
||||
{/novel:sort}
|
||||
</nav>
|
||||
<nav class="sortChannel_nav">
|
||||
<a class="on">状态:</a>
|
||||
{novel:status d_key="key" d_val="strStatusName"}
|
||||
<a href='{site:nflurl category="$Request.route.strCategory" status="$key" order="$Request.route.strOrder" page="$Request.route.intPage"/}'
|
||||
class='{eq name="$Request.route.strStatus" value="$key"}on on2 {/eq} {if $key == "all" && $Request.route.strStatus == ""}on on2 {/if}'
|
||||
btn="search_category">{$strStatusName}</a>
|
||||
{/novel:status}
|
||||
</nav>
|
||||
</div>
|
||||
<div class="wrap-box">
|
||||
<h3 class="wrap-title"><span>更新列表</span></h3>
|
||||
<ul class="sort_list">
|
||||
{foreach $resData.data as $key=>$Novel}
|
||||
|
||||
<li>
|
||||
<span class="s1">[{$Novel.n_category}]</span>
|
||||
<span class="s2">
|
||||
{$arrGrm[$key]|raw}
|
||||
<a href='{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}' data-toggle="tooltip"
|
||||
data-placement="right" title="{$Novel.n_name}">
|
||||
{$Novel.n_name}
|
||||
</a>
|
||||
</span>
|
||||
<span class="s4">{$Novel.n_author}</span>
|
||||
<span class="s5">{:date('m-d')}</span>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row sort_page_num">
|
||||
{volist name="resData.p_data.pager" id="vo" key="k"}
|
||||
{switch $vo.label}
|
||||
{case value="上一页"}
|
||||
{if $resData.p_data.page == 1}
|
||||
<span>«</span>
|
||||
{else}
|
||||
<a href="{$vo.url}">«</a>
|
||||
{/if}
|
||||
{/case}
|
||||
{case value="下一页"}
|
||||
{if $resData.p_data.page >= $resData.p_data.total}
|
||||
<span>»</span>
|
||||
{else}
|
||||
<a href="{$vo.url}">»</a>
|
||||
{/if}
|
||||
{/case}
|
||||
{default /}
|
||||
{if preg_match('/^\d+$/', $vo.label)}
|
||||
<a href="{$vo.url}">{$vo.label}</a>
|
||||
{/if}
|
||||
{/switch}
|
||||
{/volist}
|
||||
</div>
|
||||
|
||||
<div class="wrap-box">
|
||||
<h3 class="wrap-title">
|
||||
<span>封面推荐</span>
|
||||
</h3>
|
||||
<div class="rec-focus">
|
||||
{novel:list count="8" sort_type="tuijian" d_key="d_key" d_val="Novel" p_val="page_data" cache_life="86400"}
|
||||
<dl class="rec-focus-book">
|
||||
<dt class="book-img">
|
||||
{$arrGrm[$d_key+30]|raw}
|
||||
<a href='{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>
|
||||
<img height="100" width="80" class="lazyload-img" src="/static/img/default.jpg"
|
||||
data-src="{$Novel.n_cover_path ?? ''}"
|
||||
alt="{$Novel.n_name ?? ''} - {$Novel.n_category ?? ''}最新章节在线免费阅读">
|
||||
</a>
|
||||
</dt>
|
||||
<dd class="book-info">
|
||||
<h2>
|
||||
<a href='{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>
|
||||
{$Novel.n_name}
|
||||
</a>
|
||||
</h2>
|
||||
<p>作者:{$Novel.n_author}</p>
|
||||
<p>{$Novel.n_description}</p>
|
||||
</dd>
|
||||
</dl>
|
||||
{/novel:list}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="customize"} {/block}
|
||||
268
code/app/home/view/default/novel/getNovelCatalog.html
Normal file
268
code/app/home/view/default/novel/getNovelCatalog.html
Normal file
@@ -0,0 +1,268 @@
|
||||
{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" /}
|
||||
|
||||
<!-- 社交媒体标签 -->
|
||||
<meta property="og:title" content="{$arrNovel['n_name']??'未知小说'}" />
|
||||
<meta property="og:description" content='{site:replace code="NOVEL@GETNOVELINFO@DESCRIPTION"}' />
|
||||
<meta property="og:url"
|
||||
content='https://{$DomainModel->d_domain}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}' />
|
||||
<meta property="og:type" content="book" />
|
||||
<meta property="og:image" content="{$arrNovel.n_cover_path ?? ''}" />
|
||||
<meta property="og:site_name" content="{$DomainModel->d_name}" />
|
||||
<meta property="og:novel:category" content="{$arrNovel.n_category ?? ''}">
|
||||
<meta property="og:novel:author" content="{$arrNovel.n_author ?? ''}">
|
||||
<meta property="og:novel:book_name" content="{$arrNovel.n_name ?? ''}">
|
||||
<meta property="og:novel:read_url"
|
||||
content='https://{$DomainModel->d_domain}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrNovel.intFirstChapterSort"/}'>
|
||||
<meta property="og:novel:status" content="{$arrNovel.n_status ?? ''}">
|
||||
<meta property="og:novel:update_time" content="{$arrNovel.n_update_time ?? ''}">
|
||||
<meta property="og:novel:latest_chapter_name" content="{$arrNovel.n_latest_chapter_name ?? ''}">
|
||||
<meta property="og:novel:latest_chapter_url"
|
||||
content='https://{$DomainModel->d_domain}{site:lcpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
<!-- 可选:支持 Twitter Card -->
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="{$arrNovel['n_name'] ?? '未知小说'}" />
|
||||
<meta name="twitter:description" content='{site:replace code="NOVEL@GETNOVELINFO@DESCRIPTION"}' />
|
||||
<meta name="twitter:image" content="{$arrNovel.n_cover_path ?? ''}" />
|
||||
<!-- 结构化数据 -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Book",
|
||||
"name": "{$arrNovel['n_name'] ?? '未知小说'}",
|
||||
"description": "{$arrNovel['n_description'] ??'暂无简介'}",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "{$arrNovel['n_author'] ??'佚名'}"
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "{$DomainModel->d_name}",
|
||||
"url": "https://{$DomainModel->d_domain}"
|
||||
},
|
||||
"datePublished": "{$arrNovel['n_update_time'] ?? time()}",
|
||||
"image": "{$arrNovel.n_cover_path ?? ''}",
|
||||
"url": 'https://{$DomainModel->d_domain}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}',
|
||||
"genre": "{$arrNovel.n_category ??''}",
|
||||
"inLanguage": "zh-CN",
|
||||
"bookFormat": "https://{$DomainModel->d_domain}/EBook",
|
||||
"aggregateRating": {
|
||||
"@type": "AggregateRating",
|
||||
"ratingValue": "4.5",
|
||||
"reviewCount": "100",
|
||||
},
|
||||
"itemListElement": [
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 1,
|
||||
"name": "首页",
|
||||
"item": "https://{$DomainModel->d_domain}"
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 2,
|
||||
"name": "{$arrNovel.n_category ??''}",
|
||||
"item": 'https://{site:nflurl category="$arrNovel.n_category_pinyin" order="all" status="all" page="1"/}'
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 3,
|
||||
"name": "{$arrNovel['n_name']}",
|
||||
"item": '{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'
|
||||
}
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
{/block}
|
||||
|
||||
{block name="head-js"}
|
||||
{/block}
|
||||
|
||||
{block name="body-class"}novel_info{/block}
|
||||
|
||||
{block name="logo-html"}
|
||||
<h2 class="bookname">
|
||||
<a href="/" style="color:#ffffff">{$DomainModel->d_name}</a>
|
||||
</h2>
|
||||
{/block}
|
||||
|
||||
{block name="nav-html"}
|
||||
|
||||
|
||||
<nav class="breadcrumb" aria-label="breadcrumb">
|
||||
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
|
||||
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href="/" itemprop="item">
|
||||
<span itemprop="name">首页</span>
|
||||
</a>
|
||||
<meta itemprop="position" content="1" />
|
||||
</li>
|
||||
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<?php $arrNovel['n_category_pinyin'] ?? $arrNovel['n_category_pinyin'] = 'all'?>
|
||||
<a href='{site:nflurl category="$arrNovel.n_category_pinyin" order="all" status="all" page="1"/}' itemprop="item">
|
||||
<span itemprop="name">{$arrNovel.n_category}</span>
|
||||
</a>
|
||||
<meta itemprop="position" content="2" />
|
||||
</li>
|
||||
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href='{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}' itemprop="item">
|
||||
<span itemprop="name">{$arrNovel['n_name']}</span>
|
||||
</a>
|
||||
<meta itemprop="position" content="3" />
|
||||
</li>
|
||||
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href='{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}' itemprop="item">
|
||||
<span itemprop="name">目录</span>
|
||||
</a>
|
||||
<meta itemprop="position" content="3" />
|
||||
</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
{/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" /}
|
||||
|
||||
<h1 class="site-description ">{$arrNovel['n_name']}最新章节 - {$arrNovel['n_author']} - {$DomainModel->d_name}</h1>
|
||||
<div class="block-box">
|
||||
<div class="book-main">
|
||||
<div class="book-img">
|
||||
<img src="/static/img/default.jpg" data-src="{$arrNovel.n_cover_path ?? ''}"
|
||||
alt="{$arrNovel['n_name'] ?? ''}小说封面 - {$arrNovel.n_author}最新章节" class="lazy lazyload-img">
|
||||
</div>
|
||||
<div class="book-info">
|
||||
<div class="bookname">
|
||||
<h2>{$arrNovel.n_name}</h2><span class="author">{$arrNovel.n_author}
|
||||
著</span>
|
||||
</div>
|
||||
<p class="tag"><span class="blue">{$arrNovel.n_category}</span><span
|
||||
class="green">{$arrNovel.n_status}</span>
|
||||
</p>
|
||||
<p class="update"><span>最近更新:</span><a href={site:lcpurl n_id="$arrNovel.n_id"
|
||||
n_py="$arrNovel.n_name_pinyin" /}>{$arrLatestChapter->c_name
|
||||
?? ""}</a></p>
|
||||
<p class="time"><span>更新时间:</span>{$arrNovel.n_update_time} </p>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<div class="book-detail-btn">
|
||||
<ul class="btn-group">
|
||||
<li class="btn-group-cell"><a class="btn-normal abt1" onclick="addBookshelfFun()">加入书架</a><a
|
||||
class="btn-normal abt2"
|
||||
href='{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrNovel.intFirstChapterSort"/}'>开始阅读</a><a
|
||||
class="btn-normal abt3"
|
||||
href='{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}'>章节目录</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="description" style="font-size: 12px;padding:0px 10px 10px 10px; text-indent: 15px;">
|
||||
{$arrNovel.n_description}
|
||||
</div>
|
||||
|
||||
<h3 class="wrap-title">章节列表(第{$Request.route.intPage}页)
|
||||
{if $Request.route.strOrder == 'zheng'}
|
||||
<a href='{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="dao" page="1"/}'
|
||||
class="habt y">点击切换倒序</a>
|
||||
{else}
|
||||
<a href='{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}'
|
||||
class="habt y">点击切换正序</a>
|
||||
{/if}
|
||||
</h3>
|
||||
<div class="block-box">
|
||||
|
||||
<!-- 目录下拉分页-->
|
||||
{include file="public/allChapterPage" start="1"/}
|
||||
|
||||
<ul class="chapter-list">
|
||||
{foreach $resData.data as $key=>$Chapter}
|
||||
<li>
|
||||
{$arrGrm[$key]|raw}
|
||||
<a href='{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$Chapter.c_sort_num" c_page="0"/}'
|
||||
title="{$arrNovel['n_name']} {$Chapter.c_name}">{$Chapter.c_name}</a>
|
||||
</li>
|
||||
|
||||
{/foreach}
|
||||
</ul>
|
||||
|
||||
{include file="public/allChapterPage" /}
|
||||
|
||||
</div>
|
||||
|
||||
<div class="wrap-box">
|
||||
<h3 class="wrap-title"><span>完结推荐</span></h3>
|
||||
<div class="rec-focus">
|
||||
{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"}
|
||||
<dl class="rec-focus-book">
|
||||
<dt class="book-img">
|
||||
{$arrGrm[$d_key+110]|raw}
|
||||
<a href='{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'><img
|
||||
height="100" width="80" class="lazyload-img" src="/static/img/default.jpg"
|
||||
data-src="{$Novel.n_cover_path ?? ''}"
|
||||
alt="{$Novel.n_name ?? ''} - {$Novel.n_category ?? ''}最新章节在线免费阅读"></a></dt>
|
||||
<dd class="book-info">
|
||||
<h2><a href='{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>{$Novel.n_name}</a>
|
||||
</h2>
|
||||
<p>作者:{$Novel.n_author}</p>
|
||||
<p>{$Novel.n_description}</p>
|
||||
</dd>
|
||||
</dl>
|
||||
{/novel:list}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="wrap-box">
|
||||
<h3 class="wrap-title"><span>相邻小说</span></h3>
|
||||
<div class="description" style="font-size: 12px;padding:0px 10px 10px 10px; text-indent: 15px;">
|
||||
|
||||
{$arrNovel.strFocus ?? ""} 。看小说就来{$DomainModel->d_name} {$DomainModel->d_domain}...
|
||||
</div>
|
||||
<div class="rec-focus" style="font-size:12px;">
|
||||
{volist name='$arrNovel.arrRelateveNovel' id='Novel'}
|
||||
<a href='{site:nurl n_id="$Novel.n_id" n_py="$Novel.n_name_pinyin" /}'>{$Novel.n_name}</a>
|
||||
{/volist}
|
||||
|
||||
{volist name='arrNovel.n_forge_novel' id='ForgeNovel'}
|
||||
<a
|
||||
href='{site:nnurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" n_fid="$ForgeNovel.n_forge_id"/}'>{$ForgeNovel.n_forge_title}</a>
|
||||
{/volist}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
const strNovelId = `{$arrNovel.n_id}`;
|
||||
const arrNovel = {
|
||||
'n_id': `{$arrNovel['n_id']}`,
|
||||
'n_name_pinyin': `{$arrNovel['n_name_pinyin']}`,
|
||||
'n_cover_path': `{$arrNovel['n_cover_path']}`,
|
||||
'n_name': `{$arrNovel['n_name']}`,
|
||||
'n_author': `{$arrNovel['n_author']}`,
|
||||
'n_status': `{$arrNovel['n_status']}`,
|
||||
'n_update_time': `{$arrNovel['n_update_time']}`,
|
||||
'c_sort_num': 1,
|
||||
'c_name': `第一章`,
|
||||
};
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
|
||||
|
||||
{/block}
|
||||
227
code/app/home/view/default/novel/getNovelChapter.html
Normal file
227
code/app/home/view/default/novel/getNovelChapter.html
Normal file
@@ -0,0 +1,227 @@
|
||||
{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" /}
|
||||
|
||||
<!-- 社交媒体标签 -->
|
||||
|
||||
<meta property="og:title" content="{$arrNovel['n_name']??'未知小说'} {$arrChapter.c_name} - {$DomainModel->d_name}" />
|
||||
<meta property="og:description" content='{site:replace code="NOVEL@GETNOVELCHAPTER@DESCRIPTION"}' />
|
||||
<meta property="og:url"
|
||||
content='https://{$DomainModel->d_domain}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}' />
|
||||
<meta property="og:type" content="book" />
|
||||
<meta property="og:image" content="{$arrNovel.n_cover_path ?? ''}" />
|
||||
<meta property="og:site_name" content="{$DomainModel->d_name}" />
|
||||
<meta property="og:novel:category" content="{$arrNovel.n_category ?? ''}">
|
||||
<meta property="og:novel:author" content="{$arrNovel.n_author ?? ''}">
|
||||
<meta property="og:novel:book_name" content="{$arrNovel.n_name ?? ''}">
|
||||
<meta property="og:novel:read_url"
|
||||
content='https://{$DomainModel->d_domain}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.c_sort_num"/}'>
|
||||
<meta property="og:novel:status" content="{$arrNovel.n_status ?? ''}">
|
||||
<meta property="og:novel:update_time" content="{$arrNovel.n_update_time ?? ''}">
|
||||
<meta property="og:novel:latest_chapter_name" content="{$arrChapter.c_name}">
|
||||
<meta property="og:novel:latest_chapter_url"
|
||||
content='https://{$DomainModel->d_domain}{site:lcpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
<!-- 可选:支持 Twitter Card -->
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="{$arrNovel['n_name']??'未知小说'} {$arrChapter.c_name} - {$DomainModel->d_name}" />
|
||||
<meta name="twitter:description" content="{$strDescription ?? '暂无简介'}" />
|
||||
<meta name="twitter:image" content="{$arrNovel.n_cover_path ?? ''}" />
|
||||
|
||||
|
||||
<!-- 结构化数据 -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Book",
|
||||
"name": "{$arrNovel['n_name'] ?? '未知小说'}",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "{$arrNovel['n_author'] ??'佚名'}"
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "{$DomainModel->d_name}",
|
||||
"url": "https://{$DomainModel->d_domain}"
|
||||
},
|
||||
"image": "{$arrNovel.n_cover_path ?? ''}",
|
||||
"url":'https://{$DomainModel->d_domain}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.c_sort_num" c_page="0"/}',
|
||||
"inLanguage": "zh-CN",
|
||||
"genre": "{$arrNovel.n_category ??''}",
|
||||
"datePublished": "{$arrNovel['n_update_time'] ?? time()}",
|
||||
"hasPart": {
|
||||
"@type": "CreativeWork",
|
||||
"name": "{$arrChapter.c_name ?? ''}",
|
||||
"url":'https://{$DomainModel->d_domain}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.c_sort_num" c_page="0"/}',
|
||||
"description": '{site:replace code="NOVEL@GETNOVELCHAPTER@DESCRIPTION"}'
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
|
||||
{block name="head-js"}
|
||||
<script src="/template/default/h5/js/yueduqsbs.js"></script>
|
||||
{/block}
|
||||
|
||||
{block name="body-class"}jjdfjkozd{/block}
|
||||
{block name="body-id"}kkasdfei{/block}
|
||||
|
||||
|
||||
{block name="logo-html"}
|
||||
<h2 class="bookname">
|
||||
<a href="/" style="color:#ffffff">{$DomainModel->d_name}</a>
|
||||
</h2>
|
||||
{/block}
|
||||
|
||||
{block name="nav-html"}
|
||||
<nav class="breadcrumb" aria-label="breadcrumb">
|
||||
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
|
||||
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href="/" itemprop="item">
|
||||
<span itemprop="name">首页</span>
|
||||
</a>
|
||||
<meta itemprop="position" content="1" />
|
||||
</li>
|
||||
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<?php $arrNovel['n_category_pinyin'] ?? $arrNovel['n_category_pinyin'] = 'all'?>
|
||||
<a href='{site:nflurl gender="" category="$arrNovel.n_category_pinyin" order="all" status="all" page="1"/}' itemprop="item">
|
||||
<span itemprop="name">{$arrNovel.n_category}</span>
|
||||
</a>
|
||||
<meta itemprop="position" content="2" />
|
||||
</li>
|
||||
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href='{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}' itemprop="item">
|
||||
<span itemprop="name">{$arrNovel['n_name']}</span>
|
||||
</a>
|
||||
<meta itemprop="position" content="3" />
|
||||
</li>
|
||||
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href='{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}' itemprop="item">
|
||||
<span itemprop="name">{$arrChapter.c_name ?? ''}</span>
|
||||
</a>
|
||||
<meta itemprop="position" content="3" />
|
||||
</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="main"}
|
||||
<h1 class="site-description ">{$arrNovel['n_name']}最新章节 - {$arrChapter.c_name ?? ''}</h1>
|
||||
|
||||
<div class="set">
|
||||
<div id="lightdiv" class="set1" onclick="nr_setbg('light')">关灯</div>
|
||||
<div id="huyandiv" class="set1" onclick="nr_setbg('huyan')">护眼</div>
|
||||
<div class="set2">
|
||||
<span>字体:</span>
|
||||
<span id="fontbig" onclick="nr_setbg('big')">大</span>
|
||||
<span id="fontmiddle" onclick="nr_setbg('middle')">中</span>
|
||||
<span id="fontsmall" onclick="nr_setbg('small')">小</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content">
|
||||
<h1 id="chaptername" class="chaptername">{$arrNovel.n_name}(第{$arrChapter.c_sort_num}页)</h1>
|
||||
<div class="chapter-page-btn">
|
||||
{$arrGrm[1]|raw}
|
||||
<ul>
|
||||
{if $arrChapter.c_sort_num == 1}
|
||||
<li><a href='javascript:'>上一页</a></li>
|
||||
{elseif $arrChapter['pre_chapter'] && $arrChapter['pre_chapter']['c_sort_num']}
|
||||
<li><a
|
||||
href='{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.pre_chapter.c_sort_num" c_page="$arrChapter.pre_chapter.c_page"/}'>上一页</a>
|
||||
</li>
|
||||
{/if}
|
||||
<li class="mulu"><a href='{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}'>章节目录</a></li>
|
||||
{if $arrChapter.next_chapter && $arrChapter.next_chapter.c_sort_num}
|
||||
<li><a
|
||||
href='{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.next_chapter.c_sort_num" c_page="$arrChapter.next_chapter.c_page"/}'>下一页</a>
|
||||
</li>
|
||||
{/if}
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
{$arrGrm[2]|raw}
|
||||
<div class="txt" id="txt">
|
||||
{$arrGrm[3]|raw}
|
||||
<script>document.writeln(qsbs.bb('{$arrChapter.c_content}'));</script>
|
||||
{$arrGrm[4]|raw}
|
||||
</div>
|
||||
<div class="chapter-page-btn">
|
||||
{$arrGrm[5]|raw}
|
||||
<ul>
|
||||
{if $arrChapter.c_sort_num == 1}
|
||||
<li><a href='javascript:'>上一页</a></li>
|
||||
{elseif $arrChapter['pre_chapter'] && $arrChapter['pre_chapter']['c_sort_num']}
|
||||
<li><a
|
||||
href='{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.pre_chapter.c_sort_num" c_page="$arrChapter.pre_chapter.c_page"/}'>上一页</a>
|
||||
</li>
|
||||
{/if}
|
||||
<li class="mulu"><a href='{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}'>章节目录</a></li>
|
||||
{if $arrChapter.next_chapter && $arrChapter.next_chapter.c_sort_num}
|
||||
<li><a
|
||||
href='{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.next_chapter.c_sort_num" c_page="$arrChapter.next_chapter.c_page"/}'>下一页</a>
|
||||
</li>
|
||||
{/if}
|
||||
</ul>
|
||||
{$arrGrm[6]|raw}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wrap-box">
|
||||
<h3 class="wrap-title"><span>完结推荐</span></h3>
|
||||
<div class="rec-focus">
|
||||
{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"}
|
||||
<dl class="rec-focus-book">
|
||||
<dt class="book-img">
|
||||
{$arrGrm[$d_key+6]|raw}
|
||||
<a
|
||||
href='{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'><img
|
||||
height="100" width="80" class="lazyload-img" src="/static/img/default.jpg"
|
||||
data-src="{$Novel.n_cover_path ?? ''}"
|
||||
alt="{$Novel.n_name ?? ''} - {$Novel.n_category ?? ''}最新章节在线免费阅读"></a></dt>
|
||||
<dd class="book-info">
|
||||
<h2><a
|
||||
href='{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>{$Novel.n_name}</a>
|
||||
</h2>
|
||||
<p>作者:{$Novel.n_author}</p>
|
||||
<p>{$Novel.n_description}</p>
|
||||
</dd>
|
||||
</dl>
|
||||
{/novel:list}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wrap-box">
|
||||
<h3 class="wrap-title"><span>相邻小说</span></h3>
|
||||
<div class="description" style="font-size: 12px;padding:0px 10px 10px 10px; text-indent: 15px;">
|
||||
|
||||
{$arrNovel.strFocus ?? ""} 。看小说就来{$DomainModel->d_name} {$DomainModel->d_domain}...
|
||||
</div>
|
||||
<div class="rec-focus" style="font-size:12px;">
|
||||
{volist name='arrNovel.arrRelateveNovel' id='Novel'}
|
||||
<a
|
||||
href='{site:nurl n_id="$Novel.n_id" n_py="$Novel.n_name_pinyin" /}'>{$Novel.n_name}</a>
|
||||
{/volist}
|
||||
|
||||
{volist name="arrNovel.n_forge_novel" id="ForgeNovel" key="key"}
|
||||
<a
|
||||
href='{site:nnurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" n_fid="$ForgeNovel.n_forge_id"/}'>{$ForgeNovel.n_forge_title}</a>
|
||||
{/volist}
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
|
||||
|
||||
{/block}
|
||||
258
code/app/home/view/default/novel/getNovelInfo.html
Normal file
258
code/app/home/view/default/novel/getNovelInfo.html
Normal file
@@ -0,0 +1,258 @@
|
||||
$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" /}
|
||||
|
||||
|
||||
<!-- 社交媒体标签 -->
|
||||
<meta property="og:title" content="{$arrNovel['n_name']??'未知小说'}" />
|
||||
<meta property="og:description" content='{site:replace code="NOVEL@GETNOVELINFO@DESCRIPTION"}' />
|
||||
<meta property="og:url"
|
||||
content='https://{$DomainModel->d_domain}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}' />
|
||||
<meta property="og:type" content="book" />
|
||||
<meta property="og:image" content="{$arrNovel.n_cover_path ?? ''}" />
|
||||
<meta property="og:site_name" content="{$DomainModel->d_name}" />
|
||||
<meta property="og:novel:category" content="{$arrNovel.n_category ?? ''}">
|
||||
<meta property="og:novel:author" content="{$arrNovel.n_author ?? ''}">
|
||||
<meta property="og:novel:book_name" content="{$arrNovel.n_name ?? ''}">
|
||||
<meta property="og:novel:read_url"
|
||||
content='https://{$DomainModel->d_domain}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrNovel.intFirstChapterSort"/}'>
|
||||
<meta property="og:novel:status" content="{$arrNovel.n_status ?? ''}">
|
||||
<meta property="og:novel:update_time" content="{$arrNovel.n_update_time ?? ''}">
|
||||
<meta property="og:novel:latest_chapter_name" content="{$arrNovel.n_latest_chapter_name ?? ''}">
|
||||
<meta property="og:novel:latest_chapter_url"
|
||||
content='https://{$DomainModel->d_domain}{site:lcpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
<!-- 可选:支持 Twitter Card -->
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="{$arrNovel['n_name'] ?? '未知小说'}" />
|
||||
<meta name="twitter:description" content='{site:replace code="NOVEL@GETNOVELINFO@DESCRIPTION"}' />
|
||||
<meta name="twitter:image" content="{$arrNovel.n_cover_path ?? ''}" />
|
||||
<!-- 结构化数据 -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Book",
|
||||
"name": "{$arrNovel['n_name'] ?? '未知小说'}",
|
||||
"description": "{$arrNovel['n_description'] ??'暂无简介'}",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "{$arrNovel['n_author'] ??'佚名'}"
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "{$DomainModel->d_name}",
|
||||
"url": "https://{$DomainModel->d_domain}"
|
||||
},
|
||||
"datePublished": "{$arrNovel['n_update_time'] ?? time()}",
|
||||
"image": "{$arrNovel.n_cover_path ?? ''}",
|
||||
"url": 'https://{$DomainModel->d_domain}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}',
|
||||
"genre": "{$arrNovel.n_category ??''}",
|
||||
"inLanguage": "zh-CN",
|
||||
"bookFormat": "https://{$DomainModel->d_domain}/EBook",
|
||||
"aggregateRating": {
|
||||
"@type": "AggregateRating",
|
||||
"ratingValue": "4.5",
|
||||
"reviewCount": "100",
|
||||
},
|
||||
"itemListElement": [
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 1,
|
||||
"name": "首页",
|
||||
"item": "https://{$DomainModel->d_domain}"
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 2,
|
||||
"name": "{$arrNovel.n_category ??''}",
|
||||
"item": 'https://{site:nflurl category="$arrNovel.n_category_pinyin" order="all" status="all" page="1"/}'
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 3,
|
||||
"name": "{$arrNovel['n_name']}",
|
||||
"item": '{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'
|
||||
}
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
{/block}
|
||||
|
||||
{block name="head-js"}
|
||||
{/block}
|
||||
|
||||
{block name="body-class"}novel_info{/block}
|
||||
|
||||
{block name="logo-html"}
|
||||
<h2 class="bookname">
|
||||
<a href="/" style="color:#ffffff">{$DomainModel->d_name}</a>
|
||||
</h2>
|
||||
{/block}
|
||||
|
||||
{block name="nav-html"}
|
||||
<nav class="breadcrumb" aria-label="breadcrumb">
|
||||
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
|
||||
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href="/" itemprop="item">
|
||||
<span itemprop="name">首页</span>
|
||||
</a>
|
||||
<meta itemprop="position" content="1" />
|
||||
</li>
|
||||
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<?php $arrNovel['n_category_pinyin'] ?? $arrNovel['n_category_pinyin'] = 'all'?>
|
||||
<a href='{site:nflurl category="$arrNovel.n_category_pinyin" order="all" status="all" page="1"/}' itemprop="item">
|
||||
<span itemprop="name">{$arrNovel.n_category}</span>
|
||||
</a>
|
||||
<meta itemprop="position" content="2" />
|
||||
</li>
|
||||
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href='{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}' itemprop="item">
|
||||
<span itemprop="name">{$arrNovel['n_name']}</span>
|
||||
</a>
|
||||
<meta itemprop="position" content="3" />
|
||||
</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="main"}
|
||||
<h1 class="site-description ">{$arrNovel['n_name']}最新章节 - {$arrNovel['n_author']} - {$DomainModel->d_name}</h1>
|
||||
<div class="block-box">
|
||||
<div class="book-main">
|
||||
<div class="book-img">
|
||||
<img src="/static/img/default.jpg" data-src="{$arrNovel.n_cover_path ?? ''}"
|
||||
alt="{$arrNovel['n_name'] ?? ''}小说封面 - {$arrNovel.n_author}最新章节" class="lazy lazyload-img">
|
||||
</div>
|
||||
<div class="book-info">
|
||||
<div class="bookname">
|
||||
<h2>{$arrNovel.n_name}</h2><span class="author">{$arrNovel.n_author}
|
||||
著</span>
|
||||
</div>
|
||||
<p class="tag"><span class="blue">{$arrNovel.n_category}</span><span
|
||||
class="green">{$arrNovel.n_status}</span>
|
||||
</p>
|
||||
<p class="update"><span>最近更新:</span><a href={site:lcpurl n_id="$arrNovel.n_id"
|
||||
n_py="$arrNovel.n_name_pinyin" /}>{$arrLatestChapter->c_name
|
||||
?? ""}</a></p>
|
||||
<p class="time"><span>更新时间:</span>{$arrNovel.n_update_time} </p>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<div class="book-detail-btn">
|
||||
<ul class="btn-group">
|
||||
<li class="btn-group-cell"><a class="btn-normal abt1" onclick="addBookshelfFun()">加入书架</a><a
|
||||
class="btn-normal abt2"
|
||||
href='{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrNovel.intFirstChapterSort"/}'>开始阅读</a><a
|
||||
class="btn-normal abt3"
|
||||
href='{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}'>章节目录</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="description" style="font-size: 12px;padding:0px 10px 10px 10px; text-indent: 15px;">
|
||||
{$arrNovel.n_description}
|
||||
</div>
|
||||
|
||||
<h3 class="wrap-title">最新章节</h3>
|
||||
<div class="block-box">
|
||||
<ul class="chapter-list">
|
||||
{chapter:list count="10" sort_type="dao" n_id="$arrNovel.n_id" d_key="d_key" d_val="Chapter" cache_life="86400"}
|
||||
<li>
|
||||
{$arrGrm[$d_key]|raw}
|
||||
<a
|
||||
href='{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$Chapter.c_sort_num" c_page="0"/}'>{$Chapter.c_name}<span></span></a>
|
||||
</li>
|
||||
{/chapter:list}
|
||||
</ul>
|
||||
<a href='{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}'
|
||||
class="btn-mulu">查看更多章节...</a>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<h3 class="wrap-title">章节列表</h3>
|
||||
<div class="block-box">
|
||||
<ul class="chapter-list">
|
||||
{chapter:list count="100" sort_type="zheng" n_id="$arrNovel.n_id" d_key="d_key" d_val="Chapter" cache_life="86400"}
|
||||
<li>
|
||||
{$arrGrm[$d_key+10]|raw}
|
||||
<a
|
||||
href='{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$Chapter.c_sort_num" c_page="0"/}'>{$Chapter.c_name}<span></span></a>
|
||||
</li>
|
||||
{/chapter:list}
|
||||
</ul>
|
||||
<a href='{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}'
|
||||
class="btn-mulu">查看更多章节...</a>
|
||||
</div>
|
||||
|
||||
<div class="wrap-box">
|
||||
<h3 class="wrap-title"><span>完结推荐</span></h3>
|
||||
<div class="rec-focus">
|
||||
{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"}
|
||||
<dl class="rec-focus-book">
|
||||
<dt class="book-img">
|
||||
{$arrGrm[$d_key+110]|raw}
|
||||
<a href='{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'><img
|
||||
height="100" width="80" class="lazyload-img" src="/static/img/default.jpg"
|
||||
data-src="{$Novel.n_cover_path ?? ''}"
|
||||
alt="{$Novel.n_name ?? ''} - {$Novel.n_category ?? ''}最新章节在线免费阅读"></a></dt>
|
||||
<dd class="book-info">
|
||||
<h2><a href='{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>{$Novel.n_name}</a>
|
||||
</h2>
|
||||
<p>作者:{$Novel.n_author}</p>
|
||||
<p>{$Novel.n_description}</p>
|
||||
</dd>
|
||||
</dl>
|
||||
{/novel:list}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wrap-box">
|
||||
<h3 class="wrap-title"><span>相邻小说</span></h3>
|
||||
<div class="description" style="font-size: 12px;padding:0px 10px 10px 10px; text-indent: 15px;">
|
||||
|
||||
{$arrNovel.strFocus ?? ""} 。看小说就来{$DomainModel->d_name} {$DomainModel->d_domain}...
|
||||
</div>
|
||||
<div class="rec-focus" style="font-size:12px;">
|
||||
{volist name='$arrNovel.arrRelateveNovel' id='Novel'}
|
||||
<a href='{site:nurl n_id="$Novel.n_id" n_py="$Novel.n_name_pinyin" /}'>{$Novel.n_name}</a>
|
||||
{/volist}
|
||||
|
||||
{volist name='arrNovel.n_forge_novel' id='ForgeNovel'}
|
||||
<a
|
||||
href='{site:nnurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" n_fid="$ForgeNovel.n_forge_id"/}'>{$ForgeNovel.n_forge_title}</a>
|
||||
{/volist}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const strNovelId = `{$arrNovel.n_id}`;
|
||||
const arrNovel = {
|
||||
'n_id': `{$arrNovel['n_id']}`,
|
||||
'n_name_pinyin': `{$arrNovel['n_name_pinyin']}`,
|
||||
'n_cover_path': `{$arrNovel['n_cover_path']}`,
|
||||
'n_name': `{$arrNovel['n_name']}`,
|
||||
'n_author': `{$arrNovel['n_author']}`,
|
||||
'n_status': `{$arrNovel['n_status']}`,
|
||||
'n_update_time': `{$arrNovel['n_update_time']}`,
|
||||
'c_sort_num': 1,
|
||||
'c_name': `第一章`,
|
||||
};
|
||||
</script>
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
|
||||
|
||||
{/block}
|
||||
119
code/app/home/view/default/novel/getSearchNovel.html
Normal file
119
code/app/home/view/default/novel/getSearchNovel.html
Normal file
@@ -0,0 +1,119 @@
|
||||
{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"}
|
||||
<!-- 社交媒体标签 -->
|
||||
<meta property="og:title" content=‘{site:replace code="NOVEL@GETSEARCHNOVEL@TITLE"} />
|
||||
<meta property="og:description" content='{site:replace code="NOVEL@GETSEARCHNOVEL@DESCRIPTION"}' />
|
||||
<meta property="og:url" content="https://{$DomainModel->d_domain}{site:souurl key='$Request.get.keyword' p='1'/}" />
|
||||
<meta property="og:type" content="book" />
|
||||
<meta property="og:site_name" content="{$DomainModel->d_name}">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="{$Request.get.keyword} - {$DomainModel->d_name}搜索 - 第{$Request.get.intPage}页">
|
||||
<meta name="twitter:description" content="{$Request.get.keyword}搜索结果第{$Request.get.intPage}页,免费阅读小说,快来体验!">
|
||||
|
||||
<!-- 结构化数据 -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "SearchResultsPage",
|
||||
"url": "https://{$DomainModel->d_name}{site:souurl key='$Request.get.keyword' p='1'/}",
|
||||
"name": "{$DomainModel->d_name} - {$DomainModel->d_name}搜索 第{$Request.get.intPage}页",
|
||||
"description": "搜索‘{$Request.get.keyword}’结果第{$Request.get.intPage}页,提供{$Request.get.keyword}创作的小说免费阅读。",
|
||||
"datePublished": "{$arrNovel['n_update_time'] ?? time()}",
|
||||
"mainEntity": {
|
||||
"@type": "Book",
|
||||
"name": "{$DomainModel->d_name}",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "{$DomainModel->d_name}"
|
||||
},
|
||||
"url": "https://{$DomainModel->d_domain}"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
|
||||
{block name='nav-active-class'}home{/block}
|
||||
{block name="body-class"}novel_so novel_search_page{/block}
|
||||
|
||||
{block name="logo-html"}
|
||||
<h2 class="bookname">
|
||||
<a href="/" style="color:#ffffff">{$DomainModel->d_name}</a>
|
||||
</h2>
|
||||
{/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" /}
|
||||
|
||||
<div class="wrap-box">
|
||||
<h1><span>{$Request.get.keyword}</span>搜索结果 - {$DomainModel->d_name} 第{$resData.p_data.page}页</h1>
|
||||
{if $resData.p_data.total < 1} <p style="text-align: center;line-height: 60px">没有相关数据</p>
|
||||
{else}
|
||||
|
||||
<div class="rec-focus">
|
||||
{foreach $resData.data as $key=>$Novel}
|
||||
<dl class="rec-focus-book">
|
||||
<dt class="book-img">
|
||||
{$arrGrm[$key]|raw}
|
||||
<a href='{site:nurl n_id="$Novel.n_id" n_py="$Novel.n_name_pinyin" /}'>
|
||||
<img height="100" width="80" src="/static/img/default.jpg"
|
||||
data-src="{$Novel.n_cover_path ?? ''}"
|
||||
alt="{$Novel['n_name'] ?? ''}小说封面 - {$Novel.n_author}最新章节" class="lazy lazyload-img">
|
||||
</a>
|
||||
</dt>
|
||||
<dd class="book-info">
|
||||
<h2><a href='{site:nurl n_id="$Novel.n_id" n_py="$Novel.n_name_pinyin" /}'>{$Novel.n_name}</a></h2>
|
||||
<p>作者:{$Novel.n_author}</p>
|
||||
<p>{$Novel.n_description}</p>
|
||||
</dd>
|
||||
</dl>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row sort_page_num">
|
||||
{volist name="$resData.p_data.pager" id="vo" key="k"}
|
||||
{switch $vo.label}
|
||||
{case value="上一页"}
|
||||
{if $resData.p_data.page == 1}
|
||||
<span>«</span>
|
||||
{else}
|
||||
<a href="{$vo.url}">«</a>
|
||||
{/if}
|
||||
{/case}
|
||||
{case value="下一页"}
|
||||
{if $resData.p_data.page >= $resData.p_data.total}
|
||||
<span>»</span>
|
||||
{else}
|
||||
<a href="{$vo.url}">»</a>
|
||||
{/if}
|
||||
{/case}
|
||||
{default /}
|
||||
{if preg_match('/^\d+$/', $vo.label)}
|
||||
<a href="{$vo.url}">{$vo.label}</a>
|
||||
{/if}
|
||||
{/switch}
|
||||
{/volist}
|
||||
</div>
|
||||
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
|
||||
|
||||
{/block}
|
||||
14
code/app/home/view/default/pc/getArticleInfo.html
Normal file
14
code/app/home/view/default/pc/getArticleInfo.html
Normal file
@@ -0,0 +1,14 @@
|
||||
{extend name="basePc" /}
|
||||
{block name='nav-active-class'}home{/block}
|
||||
{block name="title"}{/block}
|
||||
{block name="head-js"}{/block}
|
||||
|
||||
|
||||
|
||||
{block name="main"}
|
||||
|
||||
<div>article.......</div>
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="customize"} {/block}
|
||||
88
code/app/home/view/default/pc/getArticleList.html
Normal file
88
code/app/home/view/default/pc/getArticleList.html
Normal file
@@ -0,0 +1,88 @@
|
||||
{extend name="basePc" /}
|
||||
{block name='nav-active-class'}home{/block}
|
||||
{block name="title"}{/block}
|
||||
{block name="head-js"}{/block}
|
||||
|
||||
|
||||
{block name="main"}
|
||||
<div class="content">
|
||||
|
||||
<!--选择搜索 开始-->
|
||||
<div class="find">
|
||||
<!-- <div class="fi_t">
|
||||
<div class="boFi">
|
||||
<span><s></s></span>
|
||||
<input type="text" class="search-val" url="/search.html" name="search_keyword" value=""
|
||||
placeholder="我要搜.. " maxlength="100" autocomplete="off">
|
||||
<a href="javascript:;" btn="search_keyword">搜索</a>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="opt">
|
||||
|
||||
<div class="optCl" mod="search_channel">
|
||||
<span class="optTit">所属分类</span>
|
||||
<ul>
|
||||
<li><a class="on" href="/pc/article/list.html" btn="search_category">全部</a></li>
|
||||
<li><a href="/pc/article/list-1-1.html" btn="search_category">高考作文</a></li>
|
||||
<li><a href="/pc/article/list-2-1.html" btn="search_category">小说解读</a></li>
|
||||
<li><a href="/pc/article/list-3-1.html" btn="search_category">影视解说</a></li>
|
||||
<li><a href="/pc/article/list-4-1.html" btn="search_category">王者荣耀</a></li>
|
||||
<li><a href="/pc/article/list-5-1.html" btn="search_category">日常八卦</a></li>
|
||||
<li><a href="/pc/article/list-6-1.html" btn="search_category">其它</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!--选择搜索 结束-->
|
||||
|
||||
<div class="f4 area">
|
||||
|
||||
<div class="f4_L">
|
||||
<div class="new_list">
|
||||
<ol class="cur">
|
||||
<li>
|
||||
<ul class="list_h">
|
||||
<li class="lb">分类</li>
|
||||
<li class="sm">书名</li>
|
||||
<li class="gx">描述</li>
|
||||
<li class="zz">作者</li>
|
||||
<li class="sj">更新时间</li>
|
||||
</ul>
|
||||
</li>
|
||||
{foreach $arrNewsNovel as $key=>$Novel}
|
||||
{include file="Pc/Public/articleList" /}
|
||||
{/foreach}
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--搜索结果 开始-->
|
||||
<div class="result" mod="search_data_list">
|
||||
|
||||
<!--页码切换 开始-->
|
||||
<div class="changepage">
|
||||
<ul class="pagination">
|
||||
<li class="disabled"><span>«</span></li>
|
||||
<li class="active"><span>1</span></li>
|
||||
<li><a href="/pc/article/list--2.html">2</a></li>
|
||||
<li><a href="/pc/article/list--3.html">3</a></li>
|
||||
<li><a href="/pc/article/list--4.html">4</a></li>
|
||||
<li><a href="/pc/article/list--5.html">5</a></li>
|
||||
<li><a href="/pc/article/list--6.html">6</a></li>
|
||||
<li><a href="/pc/article/list--7.html">7</a></li>
|
||||
<li><a href="/pc/article/list--8.html">8</a></li>
|
||||
<li class="disabled"><span>...</span></li>
|
||||
<li><a href="/pc/article/list--33.html">33</a></li>
|
||||
<li><a href="/pc/article/list--34.html">34</a></li>
|
||||
<li><a href="/pc/article/list--2.html">»</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!--页码切换 结束-->
|
||||
</div>
|
||||
<!--选择结果 结束-->
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="customize"} {/block}
|
||||
204
code/app/home/view/default/pc/getLibrary.html
Normal file
204
code/app/home/view/default/pc/getLibrary.html
Normal file
@@ -0,0 +1,204 @@
|
||||
{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"}
|
||||
<!-- 社交媒体标签 -->
|
||||
<meta property="og:title" content='{site:replace code="NOVEL@GETLIBRARY@TITLE"}' />
|
||||
<meta property="og:description" content='{site:replace code="NOVEL@GETLIBRARY@DESCRIPTION"}' />
|
||||
{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
|
||||
<meta property="og:url" content="https://{$DomainModel->d_domain}{$strCategoryIndexUrlTemp}" />
|
||||
{else}
|
||||
|
||||
<meta property="og:url"
|
||||
content='https://{$DomainModel->d_domain}{site:nflurl category="$Request.route.strCategory" status="$Request.route.strStatus" page="$Request.route.intPage"/}' />
|
||||
{/if}
|
||||
<meta property="og:type" content="book" />
|
||||
<!-- 结构化数据 -->
|
||||
{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://{$DomainModel->d_domain}{$strCategoryIndexUrlTemp}",
|
||||
"@type": "book",
|
||||
"headline": '{site:replace code="NOVEL@GETLIBRARY@TITLE"}'
|
||||
"description": '{site:replace code="NOVEL@GETLIBRARY@DESCRIPTION"}',
|
||||
"datePublished": "{:date('Y-m-d')}"
|
||||
}
|
||||
</script>
|
||||
{else}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": 'https://{$DomainModel->d_domain}{site:nflurl category="$Request.route.strCategory" status="$Request.route.strStatus" page="$Request.route.intPage"/}',
|
||||
"@type": "book",
|
||||
"headline": '{site:replace code="NOVEL@GETLIBRARY@TITLE"}',
|
||||
"description": '{site:replace code="NOVEL@GETLIBRARY@DESCRIPTION"}',
|
||||
"datePublished": "{:date('Y-m-d')}"
|
||||
}
|
||||
</script>
|
||||
{/if}
|
||||
|
||||
{/block}
|
||||
{block name="head-js"}{/block}
|
||||
|
||||
{block name="head-css"}
|
||||
|
||||
{if $Request.route.strGender == 'all' && $Request.route.strCategory == 'all' && $Request.route.strStatus == 'all'}
|
||||
<link rel="canonical" href="https://{$DomainModel->d_domain}{$DomainModel->d_domain}{$strCategoryIndexUrlTemp}">
|
||||
{else}
|
||||
<link rel="canonical"
|
||||
href='https://{$DomainModel->d_domain}{site:nflurl category="$Request.route.strCategory" status="$Request.route.strStatus" page="$Request.route.intPage"/}'>
|
||||
{/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" /}
|
||||
|
||||
|
||||
<div class="container">
|
||||
<div class="row row-section">
|
||||
<div class="layout layout-col3">
|
||||
{novel:list count="6" sort_type="tuijian" d_key="d_key" d_val="Novel" p_val="page_data" cache_life="86400"}
|
||||
<div class="item">
|
||||
<div class="image">
|
||||
{$arrGrm[$d_key]|raw}
|
||||
<a href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>
|
||||
<img style="min-height:120px;" class="lazyload-img" src="/static/img/default.jpg"
|
||||
data-src="{$Novel.n_cover_path ?? ''}"
|
||||
alt="{$Novel.n_name ?? ''} - {$Novel.n_category ?? ''}最新章节在线免费阅读">
|
||||
</a>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>
|
||||
<span>{$Novel.n_author}</span>
|
||||
<a
|
||||
href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>{$Novel.n_name}</a>
|
||||
</dt>
|
||||
<dd style="height:90px">
|
||||
<a href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'
|
||||
style="color: #555">{$Novel.n_description}</a>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
{/novel:list}
|
||||
</div>
|
||||
</div>
|
||||
<div class="sort_nav">
|
||||
<p>
|
||||
<span>分类:</span>
|
||||
<a class='{eq name="$Request.route.strCategory" value="all"}on {/eq} {eq name="$Request.route.strCategory" value=""}on on2 {/eq}'
|
||||
href='{$strPcPath}{site:nflurl category="all" status="$Request.route.strStatus" order="$Request.route.strOrder" page="$Request.route.intPage"/}'>不限</a>
|
||||
|
||||
{novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
|
||||
<a class='{eq name="$Request.route.strCategory" value="$strCategoryPinyin"}on {/eq}'
|
||||
href='{$strPcPath}{site:nflurl category="$strCategoryPinyin" status="$Request.route.strStatus" order="$Request.route.strOrder" page="$Request.route.intPage"/}'>{$strCategoryName}</a>
|
||||
|
||||
{/novel:category}
|
||||
|
||||
|
||||
</p>
|
||||
<p><span>排序:</span>
|
||||
{novel:sort d_key="key" d_val="strSortName"}
|
||||
<a href='{$strPcPath}{site:nflurl category="$Request.route.strCategory" status="$Request.route.strStatus" order="$key" page="$Request.route.intPage"/}'
|
||||
class='{eq name="$Request.route.strOrder" value="$key"}on {/eq} {if $key == "all" && $Request.route.strOrder == ""}on on2 {/if}'>{$strSortName}</a>
|
||||
{/novel:sort}
|
||||
</p>
|
||||
<p><span>状态:</span>
|
||||
{novel:status d_key="key" d_val="strStatusName"}
|
||||
<a href='{$strPcPath}{site:nflurl category="$Request.route.strCategory" status="$key" order="$Request.route.strOrder" page="$Request.route.intPage"/}'
|
||||
class='{eq name="$Request.route.strStatus" value="$key"}on {/eq} {if $key == "all" && $Request.route.strStatus == ""}on on2 {/if}'
|
||||
btn="search_category">{$strStatusName}</a>
|
||||
{/novel:status}
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="layout layout2 layout-col1 fr">
|
||||
<h2 class="layout-tit">最新入库小说</h2>
|
||||
<ul class="txt-list txt-list-row3">
|
||||
{novel:list count="30" sort_type="news" d_key="d_key" d_val="Novel" p_val="page_data"
|
||||
cache_life="86400"}
|
||||
<li>
|
||||
<span class="s1">[{$Novel->n_category ?? ''}</span>
|
||||
<span class="s2">
|
||||
{$arrGrm[$d_key+6]|raw}
|
||||
<a
|
||||
href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>{$Novel->n_name}</a></span>
|
||||
<span class="s5"><a
|
||||
href='{$strPcPath}{site:souurl key="$Novel->n_author" p="1"/}'>{$Novel->n_author}</a></span>
|
||||
</li>
|
||||
{/novel:list}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="layout layout2 layout-col2 fl">
|
||||
<h2 class="layout-tit">最近更新小说列表</h2>
|
||||
<ul class="txt-list txt-list-row5">
|
||||
{foreach $resData.data as $key=>$Novel}
|
||||
<li>
|
||||
<span class="s1">[{$Novel->n_category ?? ''}</span>
|
||||
<span class="s2">
|
||||
{$arrGrm[$key+36]|raw}
|
||||
<a
|
||||
href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>{$Novel->n_name}</a></span>
|
||||
<span class="s3"><a
|
||||
href='{$strPcPath}{site:lcpurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin" /}'
|
||||
title="{$Novel->n_latest_chapter_name ?? 'null'}">{$Novel->n_latest_chapter_name ??
|
||||
'null'}</a></span>
|
||||
<span class="s4">{$Novel.n_author}</span>
|
||||
<span class="s5">{:date('m-d')}</span>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 分页 -->
|
||||
<div class="row sort_page_num">
|
||||
{volist name="resData.p_data.pager" id="vo" key="k"}
|
||||
{switch $vo.label}
|
||||
{case value="上一页"}
|
||||
{if $resData.p_data.page == 1}
|
||||
<span>«</span>
|
||||
{else}
|
||||
<a href="{$strPcPath}{$vo.url}">«</a>
|
||||
{/if}
|
||||
{/case}
|
||||
{case value="下一页"}
|
||||
{if $resData.p_data.page >= $resData.p_data.total}
|
||||
<span>»</span>
|
||||
{else}
|
||||
<a href="{$strPcPath}{$vo.url}">»</a>
|
||||
{/if}
|
||||
{/case}
|
||||
{case value="..."}
|
||||
<span>...</span>
|
||||
{/case}
|
||||
{default /}
|
||||
{if preg_match('/^\d+$/', $vo.label)}
|
||||
<a href="{$strPcPath}{$vo.url}">{$vo.label}</a>
|
||||
{/if}
|
||||
{/switch}
|
||||
{/volist}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
{/block}
|
||||
236
code/app/home/view/default/pc/getNovelCatalog.html
Normal file
236
code/app/home/view/default/pc/getNovelCatalog.html
Normal file
@@ -0,0 +1,236 @@
|
||||
{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" /}
|
||||
|
||||
<!-- 社交媒体标签 -->
|
||||
<meta property="og:title" content="{$arrNovel['n_name']??'未知小说'}" />
|
||||
<meta property="og:description" content='{site:replace code="NOVEL@GETNOVELCATALOG@DESCRIPTION"}' />
|
||||
<meta property="og:url"
|
||||
content='https://{$DomainModel->d_domain}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}' />
|
||||
<meta property="og:type" content="book" />
|
||||
<meta property="og:image" content="{$arrNovel.n_cover_path ?? ''}" />
|
||||
<meta property="og:site_name" content="{$DomainModel->d_name}" />
|
||||
<meta property="og:novel:category" content="{$arrNovel.n_category ?? ''}">
|
||||
<meta property="og:novel:author" content="{$arrNovel.n_author ?? ''}">
|
||||
<meta property="og:novel:book_name" content="{$arrNovel.n_name ?? ''}">
|
||||
<meta property="og:novel:read_url"
|
||||
content='https://{$DomainModel->d_domain}{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrNovel.intFirstChapterSort"/}'>
|
||||
<meta property="og:novel:status" content="{$arrNovel.n_status ?? ''}">
|
||||
<meta property="og:novel:update_time" content="{$arrNovel.n_update_time ?? ''}">
|
||||
<meta property="og:novel:latest_chapter_name" content="{$arrNovel.n_latest_chapter_name ?? ''}">
|
||||
<meta property="og:novel:latest_chapter_url"
|
||||
content='https://{$DomainModel->d_domain}{$strPcPath}{site:lcpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
<!-- 可选:支持 Twitter Card -->
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="{$arrNovel['n_name'] ?? '未知小说'}" />
|
||||
<meta name="twitter:description" content='{site:replace code="NOVEL@GETNOVELCATALOG@DESCRIPTION"}' />
|
||||
<meta name="twitter:image" content="{$arrNovel.n_cover_path ?? ''}" />
|
||||
<!-- 结构化数据 -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Book",
|
||||
"name": "{$arrNovel['n_name'] ?? '未知小说'}",
|
||||
"description": "{$arrNovel['n_description'] ??'暂无简介'}",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "{$arrNovel['n_author'] ??'佚名'}"
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "{$DomainModel->d_name}",
|
||||
"url": "https://{$DomainModel->d_domain}"
|
||||
},
|
||||
"datePublished": "{$arrNovel['n_update_time'] ?? time()}",
|
||||
"image": "{$arrNovel.n_cover_path ?? ''}",
|
||||
"url": 'https://{$DomainModel->d_domain}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}',
|
||||
"genre": "{$arrNovel.n_category ??''}",
|
||||
"inLanguage": "zh-CN",
|
||||
"bookFormat": "https://{$DomainModel->d_domain}/EBook",
|
||||
"aggregateRating": {
|
||||
"@type": "AggregateRating",
|
||||
"ratingValue": "4.5",
|
||||
"reviewCount": "100",
|
||||
},
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="head-css"}
|
||||
<link rel="canonical" href='{$DomainModel->d_domain}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
{/block}
|
||||
{block name="logo-html"}
|
||||
<h2>
|
||||
<a href="{$strPcPath}/">
|
||||
{$DomainModel->d_name}-{$DomainModel->d_text_logo}
|
||||
</a>
|
||||
</h2>
|
||||
{/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" /}
|
||||
|
||||
<div class="container biqunaicc">
|
||||
<div class="row row-detail">
|
||||
<div class="layout layout-col1">
|
||||
<h2 class="layout-tit xs-hidden">
|
||||
<a href="{$strPcPath}/">{$DomainModel->d_name}</a>>
|
||||
<a href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
{$arrNovel['n_name']}
|
||||
</a>
|
||||
</h2>
|
||||
<div class="detail-box">
|
||||
<div class="imgbox">
|
||||
<img data-src="{$arrNovel.n_cover_path ?? ''}"
|
||||
alt="{$arrNovel['n_name'] ?? ''}小说封面 - {$arrNovel.n_author}最新章节"
|
||||
class="lazyload_book_cover lazyload-img">
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="top">
|
||||
<h1>{$arrNovel['n_name']}</h1>
|
||||
<div class="fix">
|
||||
<p>作 者:{$arrNovel.n_author ?? ''}</p>
|
||||
<p class="xs-show">类 别:{$arrNovel.n_category ?? ''}</p>
|
||||
<p class="xs-show">状 态:{$arrNovel.n_status ?? ''}</p>
|
||||
<p class="opt">
|
||||
<span class="xs-hidden">动 作:</span>
|
||||
<a rel="nofollow" onclick="addBookshelfFun()">加入书架</a>
|
||||
<i class="xs-hidden">、</i>
|
||||
<a
|
||||
href='{$strPcPath}{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}'>章节目录</a>
|
||||
<i class="xs-hidden">、</i>
|
||||
<a
|
||||
href='{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrNovel.intFirstChapterSort"/}'>开始阅读</a>
|
||||
</p>
|
||||
<p>最后更新:{$arrNovel.n_update_time ?? ''} </p>
|
||||
<p>最新章节:<a
|
||||
href='{$strPcPath}{site:lcpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
{$arrNovel.n_latest_chapter_name ?? ""}</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="desc xs-hidden">{$arrNovel.n_description ?? ''}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layout layout-col1">
|
||||
<h2 class="layout-tit">《{$arrNovel.n_name ?? ''}》{$arrNovel.n_name ?? '章节'}</h2>
|
||||
<div class="first_txt">
|
||||
{$arrNovel.strFocus ?? ""} 。看小说就来{$DomainModel->d_name} {$DomainModel->d_domain}...
|
||||
|
||||
<p>相邻推荐:
|
||||
{volist name="arrNovel.n_forge_novel" id="ForgeNovel" key="key"}
|
||||
{if $key<20 } {$arrGrm[$key+20]|raw} {/if} <a
|
||||
href='{$strPcPath}{site:nnurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" n_fid="$ForgeNovel.n_forge_id"/}'
|
||||
class="red">{$ForgeNovel.n_forge_title}</a>
|
||||
{/volist}
|
||||
|
||||
{volist name='$arrNovel.arrRelateveNovel' id='Novel'}
|
||||
<a
|
||||
href='{$strPcPath}{site:nurl n_id="$Novel.n_id" n_py="$Novel.n_name_pinyin" /}'>{$Novel.n_name}</a>
|
||||
{/volist}
|
||||
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row row-section">
|
||||
<div class="layout layout-col1">
|
||||
<h2 class="layout-tit">《{$arrNovel.n_name}》章节列表(第{$Request.route.intPage}页)切换倒序/正序:
|
||||
{if $Request.route.strOrder == 'zheng'}
|
||||
<a href='{$strPcPath}{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="dao" page="1"/}'
|
||||
class="habt y">点击切换倒序</a>
|
||||
{else}
|
||||
<a href='{$strPcPath}{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}'
|
||||
class="habt y">点击切换正序</a>
|
||||
{/if}
|
||||
</h2>
|
||||
|
||||
<!-- 目录下拉分页-->
|
||||
{include file="pc/public/allChapterPage" /}
|
||||
|
||||
<ul class="section-list fix ycxsid">
|
||||
{foreach $resData.data as $key=>$Chapter}
|
||||
<li>
|
||||
{$arrGrm[$key]|raw}
|
||||
<a
|
||||
href='{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$Chapter.c_sort_num" c_page="0"/}'>
|
||||
{$Chapter.c_name}
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{/foreach}
|
||||
</ul>
|
||||
|
||||
<!-- 目录下拉分页-->
|
||||
{include file="pc/public/allChapterPage" /}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row row-section">
|
||||
<h2 class="layout-tit">已完结热门小说推荐</h2>
|
||||
<div class="layout layout-col3">
|
||||
|
||||
{novel:list count="6" n_category="$arrNovel.n_category_pinyin" n_status="wanjie" d_key="d_key" d_val="Novel"
|
||||
cache_life="86400"}
|
||||
<div class="item">
|
||||
<div class="image">
|
||||
{$arrGrm[$d_key+110]|raw}
|
||||
<a href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
<img style="min-height:120px;" class="lazyload-img" src="/static/img/default.jpg"
|
||||
data-src="{$Novel.n_cover_path ?? ''}"
|
||||
alt="{$Novel.n_name ?? ''} - {$Novel.n_category ?? ''}最新章节在线免费阅读">
|
||||
</a>
|
||||
</div>
|
||||
<dl>
|
||||
<dt><span>{$Novel.n_author}</span><a
|
||||
href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>{$Novel.n_name}</a>
|
||||
</dt>
|
||||
<dd style="height:90px"><a
|
||||
href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'
|
||||
style="color: #555">{$Novel.n_description}</a>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
{/novel:list}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
const strNovelId = `{$arrNovel.n_id}`;
|
||||
const arrNovel = {
|
||||
'n_id': `{$arrNovel['n_id']}`,
|
||||
'n_name_pinyin': `{$arrNovel['n_name_pinyin']}`,
|
||||
'n_cover_path': `{$arrNovel['n_cover_path']}`,
|
||||
'n_name': `{$arrNovel['n_name']}`,
|
||||
'n_author': `{$arrNovel['n_author']}`,
|
||||
'n_status': `{$arrNovel['n_status']}`,
|
||||
'n_update_time': `{$arrNovel['n_update_time']}`,
|
||||
'c_sort_num': 1,
|
||||
'c_name': `第一章`,
|
||||
};
|
||||
</script>
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
|
||||
{/block}
|
||||
189
code/app/home/view/default/pc/getNovelChapter.html
Normal file
189
code/app/home/view/default/pc/getNovelChapter.html
Normal file
@@ -0,0 +1,189 @@
|
||||
{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" /}
|
||||
|
||||
|
||||
<meta property="og:title" content="{$arrNovel['n_name']??'未知小说'} {$arrChapter.c_name} - {$DomainModel->d_name}" />
|
||||
<meta property="og:description" content='{site:replace code="NOVEL@GETNOVELCHAPTER@DESCRIPTION"}' />
|
||||
<meta property="og:url"
|
||||
content='https://{$DomainModel->d_domain}{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}' />
|
||||
<meta property="og:type" content="book" />
|
||||
<meta property="og:image" content="{$arrNovel.n_cover_path ?? ''}" />
|
||||
<meta property="og:site_name" content="{$DomainModel->d_name}" />
|
||||
<meta property="og:novel:category" content="{$arrNovel.n_category ?? ''}">
|
||||
<meta property="og:novel:author" content="{$arrNovel.n_author ?? ''}">
|
||||
<meta property="og:novel:book_name" content="{$arrNovel.n_name ?? ''}">
|
||||
<meta property="og:novel:read_url"
|
||||
content='https://{$DomainModel->d_domain}{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.c_sort_num"/}'>
|
||||
<meta property="og:novel:status" content="{$arrNovel.n_status ?? ''}">
|
||||
<meta property="og:novel:update_time" content="{$arrNovel.n_update_time ?? ''}">
|
||||
<meta property="og:novel:latest_chapter_name" content="{$arrChapter.c_name}">
|
||||
<meta property="og:novel:latest_chapter_url"
|
||||
content='https://{$DomainModel->d_domain}{$strPcPath}{site:lcpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
<!-- 可选:支持 Twitter Card -->
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="{$arrNovel['n_name']??'未知小说'} {$arrChapter.c_name} - {$DomainModel->d_name}" />
|
||||
<meta name="twitter:description" content="{$strDescription ?? '暂无简介'}" />
|
||||
<meta name="twitter:image" content="{$arrNovel.n_cover_path ?? ''}" />
|
||||
|
||||
<!-- 结构化数据 -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Book",
|
||||
"name": "{$arrNovel['n_name'] ?? '未知小说'}",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "{$arrNovel['n_author'] ??'佚名'}"
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "{$DomainModel->d_name}",
|
||||
"url": "https://{$DomainModel->d_domain}"
|
||||
},
|
||||
"image": "{$arrNovel.n_cover_path ?? ''}",
|
||||
"url":'https://{$DomainModel->d_domain}{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.c_sort_num" c_page="0"/}',
|
||||
"inLanguage": "zh-CN",
|
||||
"genre": "{$arrNovel.n_category ??''}",
|
||||
"datePublished": "{$arrNovel['n_update_time'] ?? time()}",
|
||||
"hasPart": {
|
||||
"@type": "CreativeWork",
|
||||
"name": "{$arrChapter.c_name ?? ''}",
|
||||
"url":'https://{$DomainModel->d_domain}{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.c_sort_num" c_page="0"/}',
|
||||
"description": '{site:replace code="NOVEL@GETNOVELCHAPTER@DESCRIPTION"}'
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="head-css"}
|
||||
<link rel="canonical"
|
||||
href='https://{$DomainModel->d_domain}{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.c_sort_num"/}'>
|
||||
{/block}
|
||||
|
||||
{block name="head-js"}
|
||||
<script src="/template/default/pc/js/yueduqsbs.js"></script>
|
||||
{/block}
|
||||
|
||||
{block name="body-class"}novel_info{/block}
|
||||
{block name='nav-active-class'}home{/block}
|
||||
|
||||
{block name="main"}
|
||||
|
||||
<div class="container biqunaicc">
|
||||
{$arrGrm[1]|raw}
|
||||
<div class="row row-detail">
|
||||
<div class="layout layout-col1">
|
||||
<h2 class="layout-tit xs-hidden">
|
||||
<a href="{$strPcPath}/">{$DomainModel->d_name}</a>><a
|
||||
href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>{$arrNovel.n_name}</a>
|
||||
>
|
||||
{$arrNovel.n_name}(第{$arrChapter.c_sort_num}页)
|
||||
</h2>
|
||||
{$arrGrm[2]|raw}
|
||||
<div class="word_read">
|
||||
<h3>{$arrNovel.n_name}(第{$arrChapter['c_sort_num']}页)</h3>
|
||||
<div class="read_btn">
|
||||
{if $arrChapter && $arrChapter.c_sort_num && $arrChapter.c_sort_num == 1}
|
||||
<a id="j_chapterPrev" href="javascript:void(0);">上一页</a>
|
||||
{else}
|
||||
{$arrGrm[10]|raw}
|
||||
<a id="j_chapterPrev"
|
||||
href='{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.pre_chapter.c_sort_num" c_page="$arrChapter.pre_chapter.c_page"/}'>上一页</a>
|
||||
{/if}
|
||||
<span>|</span>
|
||||
<a
|
||||
href='{$strPcPath}{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}'>章节目录</a>
|
||||
<span>|</span>
|
||||
{if $arrChapter.next_chapter && $arrChapter.next_chapter.c_sort_num}
|
||||
{$arrGrm[9]|raw}
|
||||
<a id="j_chapterNext"
|
||||
href='{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.next_chapter.c_sort_num" c_page="$arrChapter.next_chapter.c_page"/}'>下一页</a>
|
||||
{/if}
|
||||
</div>
|
||||
{$arrGrm[3]|raw}
|
||||
<script>document.writeln(qsbs.bb('{$arrChapter.c_content}'));</script>
|
||||
{$arrGrm[4]|raw}
|
||||
<p>请勿开启浏览器阅读模式,否则将导致章节内容缺失及无法阅读下一页。</p>
|
||||
|
||||
<p>相邻推荐:
|
||||
{volist name="arrNovel.n_forge_novel" id="ForgeNovel" key="key"}
|
||||
{if $key<19 } {$arrGrm[$key+9]|raw} {/if} <a
|
||||
href='{$strPcPath}{site:nnurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" n_fid="$ForgeNovel.n_forge_id"/}'
|
||||
class="red">{$ForgeNovel.n_forge_title}</a>
|
||||
{/volist}
|
||||
|
||||
{volist name='arrNovel.arrRelateveNovel' id='Novel'}
|
||||
<a
|
||||
href='{$strPcPath}{site:nurl n_id="$Novel.n_id" n_py="$Novel.n_name_pinyin" /}'>{$Novel.n_name}</a>
|
||||
{/volist}
|
||||
|
||||
</p>
|
||||
{$arrGrm[5]|raw}
|
||||
<div class="read_btn">
|
||||
{if $arrChapter && $arrChapter.c_sort_num && $arrChapter.c_sort_num == 1}
|
||||
<a id="j_chapterPrev" href="javascript:void(0);">上一页</a>
|
||||
{else}
|
||||
{$arrGrm[10]|raw}
|
||||
<a id="j_chapterPrev"
|
||||
href='{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.pre_chapter.c_sort_num" c_page="$arrChapter.pre_chapter.c_page"/}'>上一页</a>
|
||||
{/if}
|
||||
<span>|</span>
|
||||
<a
|
||||
href='{$strPcPath}{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}'>章节目录</a>
|
||||
<span>|</span>
|
||||
{if $arrChapter.next_chapter && $arrChapter.next_chapter.c_sort_num}
|
||||
{$arrGrm[9]|raw}
|
||||
<a id="j_chapterNext"
|
||||
href='{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.next_chapter.c_sort_num" c_page="$arrChapter.next_chapter.c_page"/}'>下一页</a>
|
||||
{/if}
|
||||
</div>
|
||||
{$arrGrm[6]|raw}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row row-section">
|
||||
<h2 class="layout-tit">已完结热门小说推荐</h2>
|
||||
<div class="layout layout-col3">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"}
|
||||
<div class="item">
|
||||
<div class="image">
|
||||
{$arrGrm[$d_key+6]|raw}
|
||||
<a href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
<img style="min-height:120px;" class="lazyload-img" src="/static/img/default.jpg"
|
||||
data-src="{$Novel.n_cover_path ?? ''}"
|
||||
alt="{$Novel.n_name ?? ''} - {$Novel.n_category ?? ''}最新章节在线免费阅读">
|
||||
</a>
|
||||
</div>
|
||||
<dl>
|
||||
<dt><span>{$Novel.n_author}</span><a
|
||||
href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>{$Novel.n_name}</a></dt>
|
||||
<dd style="height:90px"><a href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'
|
||||
style="color: #555">{$Novel.n_description}</a>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
|
||||
{/novel:list}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
|
||||
{/block}
|
||||
232
code/app/home/view/default/pc/getNovelInfo.html
Normal file
232
code/app/home/view/default/pc/getNovelInfo.html
Normal file
@@ -0,0 +1,232 @@
|
||||
{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" /}
|
||||
<!-- 社交媒体标签 -->
|
||||
<meta property="og:title" content="{$arrNovel['n_name']??'未知小说'}" />
|
||||
<meta property="og:description" content='{site:replace code="NOVEL@GETNOVELINFO@DESCRIPTION"}' />
|
||||
<meta property="og:url"
|
||||
content='https://{$DomainModel->d_domain}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}' />
|
||||
<meta property="og:type" content="book" />
|
||||
<meta property="og:image" content="{$arrNovel.n_cover_path ?? ''}" />
|
||||
<meta property="og:site_name" content="{$DomainModel->d_name}" />
|
||||
<meta property="og:novel:category" content="{$arrNovel.n_category ?? ''}">
|
||||
<meta property="og:novel:author" content="{$arrNovel.n_author ?? ''}">
|
||||
<meta property="og:novel:book_name" content="{$arrNovel.n_name ?? ''}">
|
||||
<meta property="og:novel:read_url"
|
||||
content='https://{$DomainModel->d_domain}{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrNovel.intFirstChapterSort"/}'>
|
||||
<meta property="og:novel:status" content="{$arrNovel.n_status ?? ''}">
|
||||
<meta property="og:novel:update_time" content="{$arrNovel.n_update_time ?? ''}">
|
||||
<meta property="og:novel:latest_chapter_name" content="{$arrNovel.n_latest_chapter_name ?? ''}">
|
||||
<meta property="og:novel:latest_chapter_url"
|
||||
content='https://{$DomainModel->d_domain}{$strPcPath}{site:lcpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
<!-- 可选:支持 Twitter Card -->
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="{$arrNovel['n_name'] ?? '未知小说'}" />
|
||||
<meta name="twitter:description" content="'{site:replace code="NOVEL@GETNOVELINFO@DESCRIPTION"}' />
|
||||
<meta name="twitter:image" content="{$arrNovel.n_cover_path ?? ''}" />
|
||||
<!-- 结构化数据 -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Book",
|
||||
"name": "{$arrNovel['n_name'] ?? '未知小说'}",
|
||||
"description": "{$arrNovel['n_description'] ??'暂无简介'}",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "{$arrNovel['n_author'] ??'佚名'}"
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "{$DomainModel->d_name}",
|
||||
"url": "https://{$DomainModel->d_domain}"
|
||||
},
|
||||
"datePublished": "{$arrNovel['n_update_time'] ?? time()}",
|
||||
"image": "{$arrNovel.n_cover_path ?? ''}",
|
||||
"url": 'https://{$DomainModel->d_domain}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}',
|
||||
"genre": "{$arrNovel.n_category ??''}",
|
||||
"inLanguage": "zh-CN",
|
||||
"bookFormat": "https://{$DomainModel->d_domain}/EBook",
|
||||
"aggregateRating": {
|
||||
"@type": "AggregateRating",
|
||||
"ratingValue": "4.5",
|
||||
"reviewCount": "100",
|
||||
},
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="head-css"}
|
||||
<link rel="canonical"
|
||||
href='{$DomainModel->d_domain}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
{/block}
|
||||
|
||||
{block name="logo-html"}
|
||||
<h2>
|
||||
<a href="{$strPcPath}/">
|
||||
{$DomainModel->d_name}-{$DomainModel->d_text_logo}
|
||||
</a>
|
||||
</h2>
|
||||
{/block}
|
||||
|
||||
{block name="head-js"}
|
||||
{/block}
|
||||
|
||||
{block name="body-class"}novel_info{/block}
|
||||
|
||||
{block name="main"}
|
||||
|
||||
<div class="container biqunaicc">
|
||||
<div class="row row-detail">
|
||||
<div class="layout layout-col1">
|
||||
<h2 class="layout-tit xs-hidden">
|
||||
<a href="{$strPcPath}/">{$DomainModel->d_name}</a>>
|
||||
<a href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
{$arrNovel['n_name']}
|
||||
</a>
|
||||
</h2>
|
||||
<div class="detail-box">
|
||||
<div class="imgbox">
|
||||
<img data-src="{$arrNovel.n_cover_path ?? ''}"
|
||||
alt="{$arrNovel['n_name'] ?? ''}小说封面 - {$arrNovel.n_author}最新章节"
|
||||
class="lazyload_book_cover lazyload-img">
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="top">
|
||||
<h1>{$arrNovel['n_name']}</h1>
|
||||
<div class="fix">
|
||||
<p>作 者:{$arrNovel.n_author ?? ''}</p>
|
||||
<p class="xs-show">类 别:{$arrNovel.n_category ?? ''}</p>
|
||||
<p class="xs-show">状 态:{$arrNovel.n_status ?? ''}</p>
|
||||
<p class="opt">
|
||||
<span class="xs-hidden">动 作:</span>
|
||||
<a rel="nofollow" onclick="addBookshelfFun()">加入书架</a>
|
||||
<i class="xs-hidden">、</i>
|
||||
<a
|
||||
href='{$strPcPath}{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}'>章节目录</a>
|
||||
<i class="xs-hidden">、</i>
|
||||
<a
|
||||
href='{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrNovel.intFirstChapterSort"/}'>开始阅读</a>
|
||||
</p>
|
||||
<p>最后更新:{$arrNovel.n_update_time ?? ''} </p>
|
||||
<p>最新章节:<a
|
||||
href='{$strPcPath}{site:lcpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
{$arrNovel.n_latest_chapter_name ?? ""}</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="desc xs-hidden">{$arrNovel.n_description ?? ''}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layout layout-col1">
|
||||
<h2 class="layout-tit">《{$arrNovel.n_name ?? ''}》{$arrNovel.n_name ?? '章节'}</h2>
|
||||
<div class="first_txt">
|
||||
{$arrNovel.strFocus ?? ""} 。看小说就来{$DomainModel->d_name} {$DomainModel->d_domain}...
|
||||
|
||||
<p>相邻推荐:
|
||||
{volist name="arrNovel.n_forge_novel" id="ForgeNovel" key="key"}
|
||||
{if $key<20 } {$arrGrm[$key+20]|raw} {/if} <a
|
||||
href='{$strPcPath}{site:nnurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" n_fid="$ForgeNovel.n_forge_id"/}'
|
||||
class="red">{$ForgeNovel.n_forge_title}</a>
|
||||
{/volist}
|
||||
|
||||
{volist name='$arrNovel.arrRelateveNovel' id='Novel'}
|
||||
<a
|
||||
href='{$strPcPath}{site:nurl n_id="$Novel.n_id" n_py="$Novel.n_name_pinyin" /}'>{$Novel.n_name}</a>
|
||||
{/volist}
|
||||
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row row-section">
|
||||
<div class="layout layout-col1">
|
||||
<h2 class="layout-tit">《{$arrNovel.n_name}》最新章节</h2>
|
||||
<ul class="section-list fix">
|
||||
{chapter:list count="12" sort_type="dao" n_id="$arrNovel.n_id" d_key="d_key" d_val="Chapter" cache_life="86400"}
|
||||
<li>
|
||||
{$arrGrm[$d_key]|raw}
|
||||
<a
|
||||
href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>{$Chapter.c_name}</a>
|
||||
</li>
|
||||
{/chapter:list}
|
||||
</ul>
|
||||
<h2 class="layout-tit">《{$arrNovel.n_name}》章节列表</h2>
|
||||
<ul class="fix section-list">
|
||||
{chapter:list count="100" sort_type="zheng" n_id="$arrNovel.n_id" d_key="d_key" d_val="Chapter" cache_life="86400"}
|
||||
<li>
|
||||
{$arrGrm[$d_key+10]|raw}
|
||||
<a
|
||||
href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>{$Chapter.c_name}</a>
|
||||
</li>
|
||||
{/chapter:list}
|
||||
</ul><a
|
||||
href='{$strPcPath}{site:nclurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" order="zheng" page="1"/}'
|
||||
class="btn-mulu">查看更多章节...</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row row-section">
|
||||
<h2 class="layout-tit">已完结热门小说推荐</h2>
|
||||
<div class="layout layout-col3">
|
||||
|
||||
{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"}
|
||||
<div class="item">
|
||||
<div class="image">
|
||||
{$arrGrm[$d_key+110]|raw}
|
||||
<a href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>
|
||||
<img style="min-height:120px;" class="lazyload-img" src="/static/img/default.jpg"
|
||||
data-src="{$Novel.n_cover_path ?? ''}"
|
||||
alt="{$Novel.n_name ?? ''} - {$Novel.n_category ?? ''}最新章节在线免费阅读">
|
||||
</a>
|
||||
</div>
|
||||
<dl>
|
||||
<dt><span>{$Novel.n_author}</span><a
|
||||
href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'>{$Novel.n_name}</a>
|
||||
</dt>
|
||||
<dd style="height:90px"><a
|
||||
href='{$strPcPath}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'
|
||||
style="color: #555">{$Novel.n_description}</a>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
{/novel:list}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const strNovelId = `{$arrNovel.n_id}`;
|
||||
const arrNovel = {
|
||||
'n_id': `{$arrNovel['n_id']}`,
|
||||
'n_name_pinyin': `{$arrNovel['n_name_pinyin']}`,
|
||||
'n_cover_path': `{$arrNovel['n_cover_path']}`,
|
||||
'n_name': `{$arrNovel['n_name']}`,
|
||||
'n_author': `{$arrNovel['n_author']}`,
|
||||
'n_status': `{$arrNovel['n_status']}`,
|
||||
'n_update_time': `{$arrNovel['n_update_time']}`,
|
||||
'c_sort_num': 1,
|
||||
'c_name': `第一章`,
|
||||
};
|
||||
</script>
|
||||
{/block}
|
||||
|
||||
|
||||
{block name="customize"}
|
||||
|
||||
{/block}
|
||||
133
code/app/home/view/default/pc/getSearchNovel.html
Normal file
133
code/app/home/view/default/pc/getSearchNovel.html
Normal file
@@ -0,0 +1,133 @@
|
||||
{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"}
|
||||
<!-- 社交媒体标签 -->
|
||||
<meta property="og:title" content=‘{site:replace code="NOVEL@GETSEARCHNOVEL@TITLE"} />
|
||||
<meta property="og:description" content='{site:replace code="NOVEL@GETSEARCHNOVEL@DESCRIPTION"}' />
|
||||
<meta property="og:url" content="https://{$DomainModel->d_domain}{site:souurl key='$Request.get.keyword' p='1'/}" />
|
||||
<meta property="og:type" content="book" />
|
||||
<meta property="og:site_name" content="{$DomainModel->d_name}">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="{$Request.get.keyword} - {$DomainModel->d_name}搜索 - 第{$Request.get.intPage}页">
|
||||
<meta name="twitter:description" content="{$Request.get.keyword}搜索结果第{$Request.get.intPage}页,免费阅读小说,快来体验!">
|
||||
|
||||
<!-- 结构化数据 -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "SearchResultsPage",
|
||||
"url": "https://{$DomainModel->d_name}{site:souurl key='$Request.get.keyword' p='1'/}",
|
||||
"name": "{$DomainModel->d_name} - {$DomainModel->d_name}搜索 第{$Request.get.intPage}页",
|
||||
"description": "搜索‘{$Request.get.keyword}’结果第{$Request.get.intPage}页,提供{$Request.get.keyword}创作的小说免费阅读。",
|
||||
"datePublished": "{$arrNovel['n_update_time'] ?? time()}",
|
||||
"mainEntity": {
|
||||
"@type": "Book",
|
||||
"name": "{$DomainModel->d_name}",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "{$DomainModel->d_name}"
|
||||
},
|
||||
"url": "https://{$DomainModel->d_domain}"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/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" /}
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="layout layout3 layout-col3 fl">
|
||||
<h1>{$Request.get.keyword}搜索结果 - {$DomainModel->d_name} 第{$resData.p_data.page}页</h1>
|
||||
<div class="result search_tip">
|
||||
搜索<span style="color:red">“{$Request.get.keyword}”</span>相关结果共有 <span
|
||||
style="color:red">{$resData.p_data.total}</span> 部小说
|
||||
</div>
|
||||
{if $resData.p_data.total <1} <p style="text-align: center;line-height: 60px">没有相关数据</p>
|
||||
{else}
|
||||
<div class="layout layout-col3">
|
||||
|
||||
{foreach $resData.data as $key=>$Novel}
|
||||
<div class="item">
|
||||
<div class="image">
|
||||
{$arrGrm[$key]|raw}
|
||||
<a href='{$strPcPath}{site:nurl n_id="$Novel.n_id" n_py="$Novel.n_name_pinyin" /}'>
|
||||
<img style="min-height:120px;" src="/static/img/default.jpg"
|
||||
data-src="{$Novel.n_cover_path ?? ''}"
|
||||
alt="{$Novel['n_name'] ?? ''}小说封面 - {$Novel.n_author}最新章节"
|
||||
class="lazy lazyload-img">
|
||||
</a>
|
||||
</div>
|
||||
<dl>
|
||||
<dt><span>{$Novel.n_author}</span><a
|
||||
href='{$strPcPath}{site:nurl n_id="$Novel.n_id" n_py="$Novel.n_name_pinyin" /}'>{$Novel.n_name}</a>
|
||||
</dt>
|
||||
<dd style="height:90px"><a
|
||||
href='{$strPcPath}{site:nurl n_id="$Novel.n_id" n_py="$Novel.n_name_pinyin" /}'
|
||||
style="color: #555">{$Novel.n_description}</a>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
{/foreach}
|
||||
|
||||
</div>
|
||||
|
||||
{/if}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 分页 -->
|
||||
<div class="row sort_page_num">
|
||||
{volist name="resData.p_data.pager" id="vo" key="k"}
|
||||
{switch $vo.label}
|
||||
{case value="上一页"}
|
||||
{if $resData.p_data.page == 1}
|
||||
<span>«</span>
|
||||
{else}
|
||||
<a href="{$strPcPath}{$vo.url}">«</a>
|
||||
{/if}
|
||||
{/case}
|
||||
{case value="下一页"}
|
||||
{if $resData.p_data.page >= $resData.p_data.total}
|
||||
<span>»</span>
|
||||
{else}
|
||||
<a href="{$strPcPath}{$vo.url}">»</a>
|
||||
{/if}
|
||||
{/case}
|
||||
{case value="..."}
|
||||
<span>...</span>
|
||||
{/case}
|
||||
{default /}
|
||||
{if preg_match('/^\d+$/', $vo.label)}
|
||||
<a href="{$strPcPath}{$vo.url}">{$vo.label}</a>
|
||||
{/if}
|
||||
{/switch}
|
||||
{/volist}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
|
||||
{/block}
|
||||
179
code/app/home/view/default/pc/index.html
Normal file
179
code/app/home/view/default/pc/index.html
Normal file
@@ -0,0 +1,179 @@
|
||||
{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"}
|
||||
<link rel="canonical" href="https://{$DomainModel->d_domain}/">
|
||||
{/block}
|
||||
{block name="head"}
|
||||
<!-- 社交媒体标签 -->
|
||||
<meta property="og:title" content='{site:replace code="INDEX@INDEX@TITLE"}' />
|
||||
<meta property="og:description" content='{site:replace code="INDEX@INDEX@DESCRIPTION"}' />
|
||||
<meta property="og:url" content="https://{$DomainModel->d_domain}" />
|
||||
<meta property="og:type" content="website" />
|
||||
<!-- 结构化数据 -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
"name": "{$DomainModel->d_name}",
|
||||
"url": "https://{$DomainModel->d_domain}",
|
||||
"headline": '{site:replace code="INDEX@INDEX@TITLE"}',
|
||||
"description": '{site:replace code="INDEX@INDEX@DESCRIPTION"}',
|
||||
"datePublished": "{:date('Y-m-d')}"
|
||||
|
||||
"potentialAction": {
|
||||
"@type": "SearchAction",
|
||||
"target": 'https://{$DomainModel->d_domain}{site:souurl key="search_term_string" p="1"/}',
|
||||
"query-input": "required name=search_term_string"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
|
||||
{block name="main"}
|
||||
|
||||
{site:grm page_code="pc_index" diff="0" num="150" g_key="arrGrm" /}
|
||||
|
||||
<div class="container biqunaicc">
|
||||
<div class="row">
|
||||
<div class="layout layout-col2">
|
||||
{novel:list count="4" sort_type="tuijian" n_status="lianzai" d_key="d_key" d_val="Novel" p_val="page_data"
|
||||
cache_life="86400"}
|
||||
<div class="item">
|
||||
<div class="image">
|
||||
{$arrGrm[$d_key]|raw}
|
||||
<a href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>
|
||||
<img style="min-height:120px;" class="lazyload-img" src="/static/img/default.jpg"
|
||||
data-src="{$Novel.n_cover_path ?? ''}"
|
||||
alt="{$Novel.n_name ?? ''} - {$Novel.n_category ?? ''}最新章节在线免费阅读">
|
||||
</a>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>
|
||||
<span>{$Novel.n_author ?? ''}</span>
|
||||
<a href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>{$Novel.n_name
|
||||
?? ''}</a>
|
||||
</dt>
|
||||
<dd style="height:90px">
|
||||
<a href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'
|
||||
style="color: #555">
|
||||
{$Novel.n_description ?? ''}
|
||||
</a>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
{/novel:list}
|
||||
</div>
|
||||
<div class="layout layout-col1">
|
||||
<h2 class="layout-tit">经典推荐</h2>
|
||||
<ul class="txt-list txt-list-row3">
|
||||
{novel:list count="9" sort_type="tuijian" n_status="wanjie" d_key="d_key" d_val="Novel"
|
||||
p_val="page_data" cache_life="86400"}
|
||||
<li>
|
||||
<span class="s1">[{$Novel->n_category ?? ''}</span>
|
||||
<span class="s2">
|
||||
{$arrGrm[$d_key+4]|raw}
|
||||
<a
|
||||
href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>{$Novel->n_name}</a></span>
|
||||
<span class="s5">
|
||||
<a href='{site:souurl key="$Novel->n_author" p="1"/}'>{$Novel->n_author}</a>
|
||||
</span>
|
||||
</li>
|
||||
{/novel:list}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="layout">
|
||||
{novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
|
||||
<div class="tp-box">
|
||||
<h2>{$strCategoryName}</h2> <!-- 分类标题 -->
|
||||
<div class="top">
|
||||
|
||||
<?php $start = 1 ;$start +=1 ;?>
|
||||
|
||||
{novel:list count="1" n_category="$strCategoryPinyin" sort_type="news" d_key="d_key" d_val="Novel"
|
||||
p_val="page_data" cache_life="86400"}
|
||||
<div class="image">
|
||||
{$arrGrm[$d_key+9+10*$start]|raw}
|
||||
<a href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>
|
||||
<img class="lazyload-img" src="/static/img/default.jpg"
|
||||
data-src="{$Novel.n_cover_path ?? ''}"
|
||||
alt="{$Novel.n_name ?? ''} - {$Novel.n_category ?? ''}最新章节在线免费阅读">
|
||||
</a>
|
||||
</div>
|
||||
<dl>
|
||||
<dt><a
|
||||
href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>{$Novel->n_name}</a>
|
||||
</dt>
|
||||
<dd><a href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'
|
||||
style="color: #555">{$Novel.n_description ?? ''}</a></dd>
|
||||
</dl>
|
||||
{/novel:list}
|
||||
</div>
|
||||
<ul>
|
||||
{novel:list count="12" n_category="$strCategoryPinyin" sort_type="news" d_key="d_key" d_val="Novel"
|
||||
p_val="page_data" cache_life="86400"}
|
||||
<li>
|
||||
{$arrGrm[$d_key+9+10*$start]|raw}
|
||||
<a
|
||||
href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>{$Novel->n_name}</a>/<a
|
||||
href='{site:souurl key="$Novel->n_author" p="1"/}'>{$Novel->n_author}</a></li>
|
||||
{/novel:list}
|
||||
</ul>
|
||||
</div>
|
||||
{/novel:category}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="layout layout2 layout-col1 fr">
|
||||
<h2 class="layout-tit">最新入库小说</h2>
|
||||
<ul class="txt-list txt-list-row3">
|
||||
{novel:list count="50" sort_type="news" d_key="d_key" d_val="Novel" p_val="page_data"
|
||||
cache_life="86400"}
|
||||
<li>
|
||||
<span class="s1">[{$Novel->n_category ?? ''}]</span>
|
||||
<span class="s2">
|
||||
{$arrGrm[$d_key+100]|raw}
|
||||
<a
|
||||
href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>{$Novel->n_name}</a></span>
|
||||
<span class="s5"><a href='{site:souurl key="$Novel->n_author" p="1"/}'>{$Novel->n_author}</a></span>
|
||||
</li>
|
||||
{/novel:list}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="layout layout2 layout-col2 fl">
|
||||
<h2 class="layout-tit">最近更新小说列表</h2>
|
||||
<ul class="txt-list txt-list-row5">
|
||||
{novel:list count="50" sort_type="update" d_key="d_key" d_val="Novel" p_val="page_data"
|
||||
cache_life="86400"}
|
||||
<li>
|
||||
<span class="s1">[{$Novel->n_category ?? ''}]</span>
|
||||
<span class="s2">
|
||||
{$arrGrm[$d_key+100]|raw}
|
||||
<a
|
||||
href='{$strPcPath}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}'>{$Novel->n_name}</a></span>
|
||||
<span class="s3"><a
|
||||
href='{$strPcPath}{site:lcpurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin" /}'
|
||||
title="{$Novel->n_latest_chapter_name ?? 'null'}">{$Novel->n_latest_chapter_name ??
|
||||
'null'}</a></span>
|
||||
<span class="s4"><a href='{site:souurl key="$Novel->n_author" p="1"/}'>{$Novel->n_author}</a></span>
|
||||
<span class="s5">{:date('m-d')}</span>
|
||||
</li>
|
||||
{/novel:list}
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
|
||||
|
||||
{/block}
|
||||
11
code/app/home/view/default/pc/public/adBanner.html
Normal file
11
code/app/home/view/default/pc/public/adBanner.html
Normal file
@@ -0,0 +1,11 @@
|
||||
<!-- <div class="adv">
|
||||
<a href="#" title="" target="_blank">
|
||||
<img src="/template/kuangyu/home/bai_web/images/grey.gif"
|
||||
data-src="/template/kuangyu/home/bai_web/images/1120x100.png" class="lazyload" alt="">
|
||||
</a>
|
||||
</div> -->
|
||||
|
||||
<a href="#" title="" target="_blank">
|
||||
<img src="/template/kuangyu/home/bai_web/images/grey.gif"
|
||||
data-src="/template/kuangyu/home/bai_web/images/1120x100.png" class="lazyload" alt="">
|
||||
</a>
|
||||
35
code/app/home/view/default/pc/public/allChapterPage.html
Normal file
35
code/app/home/view/default/pc/public/allChapterPage.html
Normal file
@@ -0,0 +1,35 @@
|
||||
{if !empty($resData.p_data.pager)}
|
||||
<div class="page_num">
|
||||
{volist name="$resData.p_data.pager" id="item"}
|
||||
{eq name="item.type" value="prev"}
|
||||
<a href="{$item.url ? $strPcPath . $item.url: 'javascript:void(0)'}"
|
||||
class="z {$item.disabled ? 'disabled' : ''}">
|
||||
{$item.label}
|
||||
</a>
|
||||
{/eq}
|
||||
{/volist}
|
||||
|
||||
<select onchange="self.location.href=options[selectedIndex].value">
|
||||
{volist name="$resData.p_data.pager" id="item"}
|
||||
{eq name="item.type" value="page"}
|
||||
|
||||
<?php $intLimit = $resData['p_data']['limit']; ?>
|
||||
<?php $start = ($item['label'] - 1) * $intLimit + 1; ?>
|
||||
<?php $end = $item['label'] * $intLimit; ?>
|
||||
<option value="{$strPcPath}{$item.url}" {$item.current ? 'selected' : ''}>
|
||||
第{$start}-{$end}章
|
||||
</option>
|
||||
{/eq}
|
||||
{/volist}
|
||||
</select>
|
||||
|
||||
{volist name="$resData.p_data.pager" id="item"}
|
||||
{eq name="item.type" value="next"}
|
||||
<a href="{$item.url ? $strPcPath . $item.url: 'javascript:void(0)'}"
|
||||
class="y {$item.disabled ? 'disabled' : ''}">
|
||||
{$item.label}
|
||||
</a>
|
||||
{/eq}
|
||||
{/volist}
|
||||
</div>
|
||||
{/if}
|
||||
12
code/app/home/view/default/pc/public/articleList.html
Normal file
12
code/app/home/view/default/pc/public/articleList.html
Normal file
@@ -0,0 +1,12 @@
|
||||
<li>
|
||||
<ul>
|
||||
<li class="lb"><a href="/pc/article/info-332.html" target="_blank">耽美百合</a></li>
|
||||
<li class="sm">
|
||||
<h3><a href="/pc/article/info-332.html" title="我真是一条龙" target="_blank">我真是一条龙</a></h3>
|
||||
</li>
|
||||
<li class="gx"><a href="/pc/article/info-332.html" title="老读者必看公告!!!"
|
||||
target="_blank">老读者必看公告!!!</a></li>
|
||||
<li class="zz">兔子很淡定</li>
|
||||
<li class="sj">1天前</li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -0,0 +1,6 @@
|
||||
<li id="chapter-4b2d5aab58d71" class="on">
|
||||
<a href="chapter/1-1-1.html">01 天龙问世</a>
|
||||
</li>
|
||||
<li id="chapter-486ef2abee55d">
|
||||
<a href="/chapter/1-1-1.html">02 沧武的小霸王</a>
|
||||
</li>
|
||||
11
code/app/home/view/default/pc/public/endNovelList.html
Normal file
11
code/app/home/view/default/pc/public/endNovelList.html
Normal file
@@ -0,0 +1,11 @@
|
||||
<li>
|
||||
<a href="/pc/novel/334.html" title="落魄千金美食发家日常" target="_blank" class="book_cov">
|
||||
<img class="lazyload_book_cover lazyload-img"
|
||||
src="/static/img/default.jpg" data-src="https://www.630zw.org/img/176943.jpg"
|
||||
alt="落魄千金美食发家日常">
|
||||
</a>
|
||||
<div class="book_inf">
|
||||
<h3><a href="/pc/novel/334.html" title="落魄千金美食发家日常" target="_blank">落魄千金美食发家日常</a></h3>
|
||||
<span class="aut">鱼昆子</span>
|
||||
</div>
|
||||
</li>
|
||||
22
code/app/home/view/default/pc/public/footer.html
Normal file
22
code/app/home/view/default/pc/public/footer.html
Normal file
@@ -0,0 +1,22 @@
|
||||
<div class="foot">
|
||||
<div class="foot_T">
|
||||
<div class="tWrap">
|
||||
<p>友情链接</p>
|
||||
<ul>
|
||||
<li><a href="http://www.kyxscms.com" target="_blank">狂雨小说cms</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="foot_B">
|
||||
<p class="Co">
|
||||
Copyright (C) 2008-2020 All rights reserved
|
||||
<br>
|
||||
<a href="javascript:void(0)" style="margin: 0 10px;"></a>
|
||||
</p>
|
||||
<p>请所有作者发布作品时务必遵守国家互联网信息管理办法规定,我们拒绝任何色情小说,一经发现,即作删除!本站所收录作品、社区、书库评论及本站所做之广告均属其个人行为,与本站立场无关</p>
|
||||
</div>
|
||||
</div>
|
||||
<span class="gotop" id="btn_back_top" title="返回顶部">
|
||||
<img src="/template/kuangyu/home/bai_web/images/gotop.png" data-src="/template/kuangyu/home/bai_web/images/gotop.png" alt="返回顶部"
|
||||
ysrc="/template/kuangyu/home/bai_web/images/gotop.png">
|
||||
</span>
|
||||
23
code/app/home/view/default/pc/public/historyNovelList.html
Normal file
23
code/app/home/view/default/pc/public/historyNovelList.html
Normal file
@@ -0,0 +1,23 @@
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/pc/novel/332.html" target="_blank">
|
||||
<img class="lazyload-img"
|
||||
src="/static/img/default.jpg" data-src="https://www.630zw.org/img/176943.jpg"></a>
|
||||
</td>
|
||||
<td class="t2">
|
||||
<a href="/pc/novel/332.html" target="_blank">我真是一条龙</a>
|
||||
</td>
|
||||
<td class="t3">
|
||||
<a href="/pc/chapter/1-1-1.html" target="_blank">老读者必看公告!!!</a>
|
||||
</td>
|
||||
<td class="t4">
|
||||
<a href="/pc/novel/332.html" target="_blank">兔子很淡定</a>
|
||||
</td>
|
||||
<td class="t5">3天前</td>
|
||||
|
||||
<td class="t6">已完结</td>
|
||||
<td class="t7">
|
||||
<a href="/pc/chapter/1-1-1.html" class="goon" target="_blank">阅读</a>
|
||||
<i><span class="Collection" ajax-get="" >删除</span></i>
|
||||
</td>
|
||||
</tr>
|
||||
15
code/app/home/view/default/pc/public/hostListImg.html
Normal file
15
code/app/home/view/default/pc/public/hostListImg.html
Normal file
@@ -0,0 +1,15 @@
|
||||
<div class="bookLink">
|
||||
<a href="/pc/novel/265.html" target="_blank">
|
||||
<div class="bookImg">
|
||||
<img class="lazyload-img"
|
||||
src="/static/img/default.jpg" data-src="https://www.630zw.org/img/176943.jpg">
|
||||
</div>
|
||||
<div>
|
||||
<h2>重生八零:寡妇带娃巧发家</h2>
|
||||
<span>姣大憨</span>
|
||||
<p> 【萌宝+美食+种田+爽文】现代单身美食博主许芳华一朝穿越,竟成为八零年代小寡妇。 丈夫因公殉职,婆婆小姑子霸占抚恤金不撒手,婆家兄长对这三间瓦房虎视眈眈。
|
||||
许芳华看着怀里瑟瑟发抖的小女儿,撸起袖子就去虐渣。吃了我的给我吐出来,占了我的给我还回来! 作为一个现代独立女性,看她如何用美食养娃致富,人生赢家妥妥的!
|
||||
本站提示:各位书友要是觉得《重生八零:寡妇带娃巧发家》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!</p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
3
code/app/home/view/default/pc/public/hostListText.html
Normal file
3
code/app/home/view/default/pc/public/hostListText.html
Normal file
@@ -0,0 +1,3 @@
|
||||
<div class="bookLink oneLine">
|
||||
<a href="/pc/novel/293.html" target="_blank"><em>「武侠仙侠」</em>玻璃焰</a>
|
||||
</div>
|
||||
17
code/app/home/view/default/pc/public/indexBoyNewsList.html
Normal file
17
code/app/home/view/default/pc/public/indexBoyNewsList.html
Normal file
@@ -0,0 +1,17 @@
|
||||
<li>
|
||||
<h3><a href="/pc/novel/293.html" title="玻璃焰" target="_blank">玻璃焰</a></h3>
|
||||
<div class="book_inf">
|
||||
<span class="aut">美绿哔哔</span>
|
||||
<span class="tag"><a href="/lists/19.html" target="_blank">武侠仙侠</a></span>
|
||||
<a href="/pc/novel/293.html" title="玻璃焰" target="_blank" class="book_cov">
|
||||
<img class="lazyload_book_cover lazyload-img"
|
||||
src="/static/img/default.jpg" data-src="https://www.630zw.org/img/176943.jpg"
|
||||
alt="玻璃焰">
|
||||
</a>
|
||||
<p class="int"> [已签约实体待上市]【天生坏种x清冷校花】【大学校园、男追女、协议情侣、强制爱、破镜重圆】黎幸在整个西京大学都很有名。
|
||||
高考状元,够美,够穷。这样的人,外貌不是恩赐,是原罪。楼崇,出生即登上金字塔最顶层的存在优越家世,顶级皮囊但却是个十足十的人渣。
|
||||
——这样两个毫无交集的人,某天却被人撞见楼崇的阿斯顿马丁车内黎幸被单手抱起跨坐在腿上,后背抵着方向盘车窗光影交错,男人冷白精致的侧脸清晰可见,扣着她的手腕,亲自教她怎么扯开自己的领结。
|
||||
—— “协议女友,知道什么意思吗?” “意思是牵手,接吻,拥抱,上床。” “以及,爱上我。” “一步不能少。”—— “玻璃焰,玻璃高温产生的火焰,银蓝色,很美。”
|
||||
本站提示:各位书友要是觉得《玻璃焰》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!</p>
|
||||
</div>
|
||||
</li>
|
||||
44
code/app/home/view/default/pc/public/indexBoyNewsOne.html
Normal file
44
code/app/home/view/default/pc/public/indexBoyNewsOne.html
Normal file
@@ -0,0 +1,44 @@
|
||||
<div class="f3_L">
|
||||
<h3><a href="/pc/novel/294.html" title="渣攻的白月光总对我打直球" target="_blank">渣攻的白月光总对我打直球</a></h3>
|
||||
<a href="/pc/novel/294.html" title="渣攻的白月光总对我打直球" target="_blank" class="book_cov">
|
||||
<img class="lazyload_book_cover lazyload-img"
|
||||
src="/static/img/default.jpg" data-src="https://www.630zw.org/img/176943.jpg"
|
||||
alt="渣攻的白月光总对我打直球">
|
||||
</a>
|
||||
<div class="book_inf">
|
||||
<div class="book_inf01">
|
||||
<span class="aut">作者:不见仙踪</span>
|
||||
<span class="fr">分类:<a href="/lists/19.html" target="_blank">武侠仙侠</a></span>
|
||||
<span>字数:24.20万字+</span>
|
||||
<span class="fr">进度:已完结</span>
|
||||
<span>总点击:0</span>
|
||||
</div>
|
||||
<p class="int"> 【下本开《分手后四个鬼攻同时找上我》嗷~】 大二上学期,宣从南被一个温柔至极的男人追求;大二下学期,宣从南和沈迁在一起。
|
||||
两个人谈了一年恋爱,宣从南发现,沈迁照常温柔,但他却常常把这样的话挂在嘴边: “不要笑。” “安静一点。” “不要太闹腾。” “眼里不要有温度。” “这样才像他。” 宣从南:……哦。
|
||||
宣从南走了,潇洒果决,晚上却在路边捡到一个看起来落魄至极的男人。他耷拉着眉眼,带口罩,安静地坐在花坛边,似乎是在晒月光。 这人倒是很安静,还不笑,更不闹腾,眼里也没有温度。
|
||||
宣从南把人捡回家了。他发现,这个名叫顾拾的男人竟然是娱乐圈里的顶流,只不过他不太关注娱乐圈,这才错误地把拥有千万粉丝的人捡回了家。
|
||||
宣从南还发现,顾拾虽然过分冷淡,但他打直球说能不能喜欢我;顾拾虽然安静不闹腾,但他打直球说能不能抱抱我;顾拾虽然眼睛里没什么温度,但他打直球说能不能做…… 宣从南:这就是顶流吗?
|
||||
“同居”段时间,两人顺理成章地谈恋爱。 又同居段时间,宣从南忽而得知顾拾就是沈迁爱而不得的白月光。 宣从南:……命运啊。
|
||||
为了避免尴尬,他收拾行李又打算跑,刚走到门口却只听一道开门声,顾拾裹挟着外面的寒气进来,轻轻带上门。 宣从南:…… 顾拾冷淡的目光从上到下打量他,最后落在行李箱上。 “去哪儿?”他问。
|
||||
宣从南捏紧行李杆,正欲说话,顾拾又道: “你想甩了我?” …… 这天晚上有狗仔拍到顾拾进了一间出租屋。 除了顾拾,窗户玻璃上还映出另外一道男性身影,他手边还有个行李箱。
|
||||
紧接着,一向喜怒不形于色的顾拾猛地推开行李箱,拽起另一人的手腕去了卧室。 一夜没出来。 【阅读指南】: *1V1,HE,甜文。 *攻非常非常非常爱受,非常非常非常宠受
|
||||
*攻能直球绿茶也能偏执疯批,属性复杂,天使们直接看文叭 *有打脸剧情 *无原型,勿代入现实。我写文为了快乐,也只想让读者快乐~ *感谢支持正版,给大家鞠躬啦~
|
||||
★下本《分手后四个鬼攻同时找上我》求收藏~ 宴祀亭是个小道士,山生山长,没见过外面的天,最大的雄心壮志是杀死鬼王。 但他怕鬼,还花心。 下山后进城,他在酒吧泡了一个大学教授做男朋友。
|
||||
教授克制古板,一副性冷淡的模样。 但他“暴力”且沉沦地教会了宴祀亭在床上的108种姿势。 每天晚上宴祀亭都被哔的“身心俱散”。 随着感情渐深,教授带宴祀亭回家见父母。 他家里有鬼,好多鬼。
|
||||
那些鬼躲在门外、趴在床底听他和教授...... 宴祀亭瑟瑟发抖,教授却像没事人,依然一次比一次深入。 宴祀亭:师父救命——
|
||||
日复一日,教授变得愈发过分。他中午要抱宴祀亭亲昵,下午要抱宴祀亭厮磨,晚上要抱宴祀亭深入交流,非常不节制。 最后他还设门禁时间限制宴祀亭的出行,控制欲极强。 宴祀亭受不了,把人踹了。
|
||||
他谈了第二个男朋友。 但为什么温柔先生最后因他变得野蛮,各种道具都上场; 绅士先生因他变成恶棍,让他不准离开自己的视线; 禁欲先生因他变得纵荡,永远都要按着他驰骋......
|
||||
宴祀亭:师父我遇到了好多变态,我要回山立刻马上! 身心遭受“严重摧残”的宴祀亭决定封心锁爱,这辈子都不要泡男人了,要去完成自己的雄心壮志——杀死鬼王。
|
||||
紧接着被甩的教授将他堵在家门口,唇角带笑声含魅:“不是要杀我吗?我来了。” 晦暗夜色下,教授身后又慢慢浮现出温柔先生、绅士先生、禁欲先生的身影,他们都在盯着宴祀亭。
|
||||
教授柔声道:“你是要我们一起来,还是一个一个来呢。” 宴祀亭抖如筛糠无可逃脱地被他们推进了卧室。恶鬼们商量谁先来,最后愉快地决定一起。 “不要,救命啊啊啊啊啊啊啊啊啊——” *切片攻
|
||||
*所有躲门外趴床底听床戏的,都是攻的切片 ★求预收《不是人也能攻我?》收藏~ 司徒禁肩宽窄腰身材好,胸肌饱满腿长,在男同界是被许多人觊觎的优质1。
|
||||
有人找司徒禁拍钙片,身为直男的司徒禁果断拒绝。 等再醒来,司徒禁发现他穿到了异世界。 这里到处是妖魔鬼怪。
|
||||
司徒禁有个极倒霉的倒霉体质,喝凉水塞牙缝,吃东西噎喉咙,睡觉能窒息。再又一次平地摔跤后,司徒禁气得破口大骂。 那些神经病又来了。 玛德,这次还敢撕他衣服!
|
||||
这个世界不止他一个倒霉蛋,还有ABCDE等男人进来了。 老乡见老乡两眼泪汪汪,司徒禁和大家互相扶持,把这群想上他的变态杀得四处逃窜。 然后有一天,司徒禁看见男人 A 帮鬼撕碎了他的上衣。
|
||||
司徒禁:? 男人B帮鬼扯烂了他的裤子。 司徒禁:?? 男人C帮鬼拽掉了他的衬衫夹。 司徒禁:??? 混乱中,谁摸了他的胸肌! 谁捏了他的屁股!! 谁掰开了他的腿!!!
|
||||
司徒禁冷笑:想攻我的千千万,你算哪块小饼干?! ABCDE 得逞,鬼得逞,怪物藤蔓得手,触手得逞...... 被迫野战后司徒禁躺在草地里抽事后烟,沉思:是个人都能攻我?不是人也能攻我?
|
||||
而他不知道,他进入的异世界其实是一个系列视频,无数观众坐在电视机前,每天就为了看他闯关。 司徒禁:什么关?“床”关吗? *切片攻,每个都为了受打得头破血流,甚至想杀了自己的分身
|
||||
*受极度理智冷静大胸美人 *攻疯得一批,每个切片都想独占囚禁受 *直播镜头前的观众只能看正经闯关,其他的看不到,花钱做榜一也没用
|
||||
本站提示:各位书友要是觉得《渣攻的白月光总对我打直球》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!</p>
|
||||
</div>
|
||||
</div>
|
||||
16
code/app/home/view/default/pc/public/indexBoyRankList.html
Normal file
16
code/app/home/view/default/pc/public/indexBoyRankList.html
Normal file
@@ -0,0 +1,16 @@
|
||||
<li>
|
||||
<em class="red_bg">{$key+=1}</em>
|
||||
<h3 class="name"><a href="/pc/novel/276.html" title="娱乐宗师" target="_blank">娱乐宗师</a></h3>
|
||||
<div class="open">
|
||||
<a href="/pc/novel/276.html" title="娱乐宗师" target="_blank" class="book_cov">
|
||||
<img class="lazyload_book_cover lazyload-img"
|
||||
src="/static/img/default.jpg" data-src="https://www.630zw.org/img/176943.jpg" alt="娱乐宗师">
|
||||
</a>
|
||||
<div class="book_inf">
|
||||
<span class="aut">作者:猩猩崛起</span>
|
||||
<span>类别:<a href="/lists/19.html" target="_blank">武侠仙侠</a></span>
|
||||
<p class="int"> 小工作室的微电影导演,重生平行世界!踏上娱乐征途!
|
||||
本站提示:各位书友要是觉得《娱乐宗师》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
26
code/app/home/view/default/pc/public/indexBoyRankOne.html
Normal file
26
code/app/home/view/default/pc/public/indexBoyRankOne.html
Normal file
@@ -0,0 +1,26 @@
|
||||
<li class="lis_sh">
|
||||
<em class="red_bg">1</em>
|
||||
<h3 class="name"><a href="/pc/novel/275.html" title="捻转步舞曲[花滑]" target="_blank">捻转步舞曲[花滑]</a>
|
||||
</h3>
|
||||
<div class="open">
|
||||
<a href="/pc/novel/275.html" title="捻转步舞曲[花滑]" target="_blank" class="book_cov">
|
||||
<img class="lazyload_book_cover lazyload-img"
|
||||
src="/static/img/default.jpg" data-src="https://www.630zw.org/img/176943.jpg" alt="捻转步舞曲[花滑]">
|
||||
</a>
|
||||
<div class="book_inf">
|
||||
<span class="aut">作者:梧桐树下wt</span>
|
||||
<span>类别:<a href="/lists/19.html" target="_blank">武侠仙侠</a></span>
|
||||
<p class="int"> 【本文将会于2023年9月30日星期六入V,谢谢支持!】 【求投票——《成长·逆袭》主题征文——作品投票——鱼跃龙门后来居上】
|
||||
【每5K营养液加更一章】 作为刚升组没多久,在华国内难得可以跳跃演绎两手抓的男子单人花滑选手,郁辰被队里的教练们给予极大的厚望。
|
||||
并且整个教练团也在想尽各种方法教导这位,冰上冰下两个样子,经常会躲起来不见人的闷葫芦。 “到底有什么办法,能让那家伙在冰下的时候,有上冰那会百分之一的灵气啊!”
|
||||
只有郁辰他本人知道——他无论什么时候,都爱惨了艺术与冰面结合起来的样子。 ——只是台下之后,不会表达而已。
|
||||
一切的变动,从他没忍住在莫斯科赛后偷瞒着教练,去看了一场芭蕾舞舞台剧之后。 追着一见钟情的男孩来到异国,并且努力学了中文的佐切卡:你好,郁!能我你拥抱?
|
||||
沉思了好久,才理清楚他语法顺序的郁辰:你学顺了中文再和我说话吧。 佐切卡(惊喜):那就是可以了!
|
||||
于是某位男单运动员就被纤细高挑练跳舞的熊抱住了一个下午,跑都跑不掉。 来自莫斯科的芭蕾舞者X略显自闭的花滑选手 1、故事里面所有人物故事,经历都没有原型。
|
||||
2、作者对于花滑的认知还没有到完全专业水平,但是所有技术动作描写,比赛规则描述,都有资料支持。
|
||||
3、如果有技术问题需要讨论可以随时留评,我看到后会回复的。看了每章词汇解释还是不懂的话也可以留评,我会想办法换一种解释试试看的(作者是真想教会你们滑冰系列)。
|
||||
4、最重要一点——无论怎么样的情感下,都请不要轻易怀疑运动员对该项目的热爱。 5、停在‘4’好像不太好,所以写了个‘5’。
|
||||
本站提示:各位书友要是觉得《捻转步舞曲[花滑]》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
@@ -0,0 +1,12 @@
|
||||
<li>
|
||||
<ul>
|
||||
<li class="lb"><a href="/" target="_blank">耽美百合</a></li>
|
||||
<li class="sm">
|
||||
<h3><a href="/pc/novel/332.html" title="我真是一条龙" target="_blank">我真是一条龙</a></h3>
|
||||
</li>
|
||||
<li class="gx"><a href="/pc/chapter/1-1-1.html" title="老读者必看公告!!!"
|
||||
target="_blank">老读者必看公告!!!</a></li>
|
||||
<li class="zz">兔子很淡定</li>
|
||||
<li class="sj">1天前</li>
|
||||
</ul>
|
||||
</li>
|
||||
32
code/app/home/view/default/pc/public/shuKuNovelList.html
Normal file
32
code/app/home/view/default/pc/public/shuKuNovelList.html
Normal file
@@ -0,0 +1,32 @@
|
||||
<li>
|
||||
<a href="/pc/novel/334.html" target="_blank" class="book_cov" title="落魄千金美食发家日常">
|
||||
<img class="lazyload_book_cover lazyload-img"
|
||||
src="/static/img/default.jpg" data-src="https://www.630zw.org/img/176943.jpg" alt="落魄千金美食发家日常">
|
||||
</a>
|
||||
<div class="book_inf">
|
||||
<h3><a href="/pc/novel/334.html" title="落魄千金美食发家日常" target="_blank">落魄千金美食发家日常</a></h3>
|
||||
<p>
|
||||
<span>作者:<a href="/search/%E9%B1%BC%E6%98%86%E5%AD%90.html" title="鱼昆子">鱼昆子</a></span>
|
||||
<span>分类:<a href="/lists/4.html" title="男生">男生</a></span>
|
||||
<span>状态:已完结</span>
|
||||
<span>总字数:43.80万字+</span>
|
||||
</p>
|
||||
<p class="tags">
|
||||
<i>标签:</i>
|
||||
<i></i>
|
||||
</p>
|
||||
<p><b>最近更新:</b><a href="/pc/chapter/1-1-1.html" title="219 桃花酿" target="_blank">219 桃花酿</a>
|
||||
</p>
|
||||
<p class="int"> 正文已完结,福利番外待续! 预收《癫疯人生有多爽你知道吗》《当家主母的咸鱼美食日常》戳专栏求收藏。 ——————— 温仲夏身为百万粉丝美食博主,一朝穿越。
|
||||
好消息,穿成尚书千金。 坏消息,父兄获罪被贬到千里之外。 身边只有一个柔弱的嫂嫂和年幼的小弟。 开局就是一个交不上房租,大雪天几乎要流落街头的惨境。 温仲夏来不及哭,撸起袖子就是干。
|
||||
红烧肉火锅烧烤爆米花卷饼卤肉奶茶小蛋糕…… 她就不信这些东京人都不爱吃。 不成的话,她还有麻辣烫烤鸭炸鸡酸辣粉炸酱面汤圆大馄饨…… 一不小心,落魄千金混成东京知名女掌柜。 …… 小剧场:
|
||||
一众贵女听闻温仲夏当街叫卖吃食后,纷纷对她这种抛头露面的行为狠狠批判。 几天后,她们却在温仲夏的食店门口不期而遇。 “你怎么来了,不会是来买蛋挞的吧?” “难道你也是?”
|
||||
“我可不是,我还要买奶油蛋糕呢。” 说好的不齿与之为伍呢? 这时店内传来吆喝:“数量有限,先到先得。” 贵女们忙不迭地往里冲。 “我先来的!” ①本文主线是美食和日常。
|
||||
②背景主要参考宋朝,不严谨的地方请见谅。
|
||||
本站提示:各位书友要是觉得《落魄千金美食发家日常》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!</p>
|
||||
</div>
|
||||
<div class="right">
|
||||
<span>更新时间:2025-03-20 23:59</span>
|
||||
<a href="/pc/novel/334.html" target="_blank" class="read_btn btn">立即阅读</a>
|
||||
</div>
|
||||
</li>
|
||||
7
code/app/home/view/default/pc/public/swiperListImg.html
Normal file
7
code/app/home/view/default/pc/public/swiperListImg.html
Normal file
@@ -0,0 +1,7 @@
|
||||
<li>
|
||||
<a href="/pc/novel/334.html" title="落魄千金美食发家日常" target="_blank" class="book_cov">
|
||||
<img class="lazyload_lb_nv lazyload-img"
|
||||
src="/static/img/default.jpg" data-src="https://www.630zw.org/img/176943.jpg"
|
||||
alt="落魄千金美食发家日常">
|
||||
</a>
|
||||
</li>
|
||||
6
code/app/home/view/default/pc/public/swiperListText.html
Normal file
6
code/app/home/view/default/pc/public/swiperListText.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<li data-desc=" 正文已完结,福利番外待续! 预收《癫疯人生有多爽你知道吗》《当家主母的咸鱼美食日常》戳专栏求收藏。 ——————— 温仲夏身为百万粉丝美食博主,一朝穿越。 好消息,穿成尚书千金。 坏消息,父兄获罪被贬到千里之外。 身边只有一个柔弱的嫂嫂和年幼的小弟。 开局就是一个交不上房租,大雪天几乎要流落街头的惨境。 温仲夏来不及哭,撸起袖子就是干。 红烧肉火锅烧烤爆米花卷饼卤肉奶茶小蛋糕…… 她就不信这些东京人都不爱吃。 不成的话,她还有麻辣烫烤鸭炸鸡酸辣粉炸酱面汤圆大馄饨…… 一不小心,落魄千金混成东京知名女掌柜。 …… 小剧场: 一众贵女听闻温仲夏当街叫卖吃食后,纷纷对她这种抛头露面的行为狠狠批判。 几天后,她们却在温仲夏的食店门口不期而遇。 “你怎么来了,不会是来买蛋挞的吧?” “难道你也是?” “我可不是,我还要买奶油蛋糕呢。” 说好的不齿与之为伍呢? 这时店内传来吆喝:“数量有限,先到先得。” 贵女们忙不迭地往里冲。 “我先来的!” ①本文主线是美食和日常。 ②背景主要参考宋朝,不严谨的地方请见谅。
|
||||
本站提示:各位书友要是觉得《落魄千金美食发家日常》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!" class="on">
|
||||
<s class="arr"></s>
|
||||
<s class="xh">1</s>
|
||||
<i>落魄千金美食发家日常</i>
|
||||
</li>
|
||||
49
code/app/home/view/default/pc/user/getBookShelf.html
Normal file
49
code/app/home/view/default/pc/user/getBookShelf.html
Normal file
@@ -0,0 +1,49 @@
|
||||
{extend name="basePc" /}
|
||||
{block name="title"}我的书架{/block}
|
||||
{block name="keywords"}我的书架{/block}
|
||||
{block name="description"}我的书架{/block}
|
||||
{block name="head"}
|
||||
<!-- 社交媒体标签 -->
|
||||
<meta property="og:title" content="{$strTitle??''}" />
|
||||
<meta property="og:description" content="{$strDescription??''}" />
|
||||
<meta property="og:url" content="https://{$DomainModel->d_domain}{$strBookShelfUrlTemp}" />
|
||||
<meta property="og:type" content="article" />
|
||||
<!-- 结构化数据 -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://{$DomainModel->d_domain}{$strBookShelfUrlTemp}",
|
||||
"@type": "article",
|
||||
"headline": "我的书架",
|
||||
"description": "我的书架",
|
||||
"datePublished": "{:date('Y-m-d')}"
|
||||
}
|
||||
</script>
|
||||
{block name="head-js"}{/block}
|
||||
|
||||
|
||||
{block name="body-class"}novel_home{/block}
|
||||
|
||||
{block name="main"}
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="layout layout3 layout-col3 fl">
|
||||
<h2 class="layout-tit">我的书架</h2>
|
||||
<div class="layout layout-col3" id="shujiaContainer"></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
<script>
|
||||
const strNovelUrlTemp = `{site:replace code="NOVEL_INFO_URL"}`;
|
||||
const strNovelChapterUrlTemp = `{site:replace code="CONTENT_INFO_URL"}`;
|
||||
const strSearchUrlTemp = `{site:replace code="SEARCH_INFO_URL"}`;
|
||||
// 调用展示书架功能
|
||||
displayShujia();
|
||||
</script>
|
||||
{/block}
|
||||
49
code/app/home/view/default/pc/user/getHistory.html
Normal file
49
code/app/home/view/default/pc/user/getHistory.html
Normal file
@@ -0,0 +1,49 @@
|
||||
{extend name="basePc" /}
|
||||
{block name="title"}我的阅读记录{/block}
|
||||
{block name="keywords"}我的阅读记录{/block}
|
||||
{block name="description"}我的阅读记录{/block}
|
||||
{block name="head"}
|
||||
<!-- 社交媒体标签 -->
|
||||
<meta property="og:title" content="{$strTitle??''}" />
|
||||
<meta property="og:description" content="{$strDescription??''}" />
|
||||
<meta property="og:url" content="https://{$DomainModel->d_domain}{$strBookShelfUrlTemp}" />
|
||||
<meta property="og:type" content="article" />
|
||||
<!-- 结构化数据 -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://{$DomainModel->d_domain}{$strBookShelfUrlTemp}",
|
||||
"@type": "article",
|
||||
"headline": "{$strTitle??''}",
|
||||
"description": "{$strDescription??''}",
|
||||
"datePublished": "{:date('Y-m-d')}"
|
||||
}
|
||||
</script>
|
||||
{block name="head-js"}{/block}
|
||||
|
||||
|
||||
{block name="body-class"}novel_home{/block}
|
||||
|
||||
{block name="main"}
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="layout layout3 layout-col3 fl">
|
||||
<h2 class="layout-tit">阅读记录</h2>
|
||||
<div class="layout layout-col3" id="shujiaContainer"></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
<script>
|
||||
const strNovelUrlTemp = `{site:replace code="NOVEL_INFO_URL"}`;
|
||||
const strNovelChapterUrlTemp = `{site:replace code="CONTENT_INFO_URL"}`;
|
||||
const strSearchUrlTemp = `{site:replace code="SEARCH_INFO_URL"}`;
|
||||
// 调用展示书架功能
|
||||
displayHistory();
|
||||
</script>
|
||||
{/block}
|
||||
38
code/app/home/view/default/public/allChapterPage.html
Normal file
38
code/app/home/view/default/public/allChapterPage.html
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
{if !empty($resData.p_data.pager)}
|
||||
|
||||
<div class="page_num">
|
||||
{volist name="$resData.p_data.pager" id="item"}
|
||||
{eq name="item.type" value="prev"}
|
||||
{$arrGrm[$key]|raw}
|
||||
<a href="{$item.url ?: '#'}"
|
||||
class="z {$item.disabled ? 'disabled' : ''}">
|
||||
{$item.label}
|
||||
</a>
|
||||
{/eq}
|
||||
{/volist}
|
||||
|
||||
<select onchange="self.location.href=options[selectedIndex].value">
|
||||
{volist name="$resData.p_data.pager" id="item"}
|
||||
{eq name="item.type" value="page"}
|
||||
<?php $intLimit = $resData['p_data']['limit']; ?>
|
||||
<?php $intStart = ($item['label'] - 1) * $intLimit + 1; ?>
|
||||
<?php $end = $item['label'] * $intLimit; ?>
|
||||
<option value="{$item.url}" {$item.current ? 'selected' : ''}>
|
||||
第{$intStart}-{$end}章
|
||||
</option>
|
||||
{/eq}
|
||||
{/volist}
|
||||
</select>
|
||||
|
||||
{volist name="$resData.p_data.pager" id="item"}
|
||||
{eq name="item.type" value="next"}
|
||||
{$arrGrm[$key]|raw}
|
||||
<a href="{$item.url ?: '#'}"
|
||||
class="y {$item.disabled ? 'disabled' : ''}">
|
||||
{$item.label}
|
||||
</a>
|
||||
{/eq}
|
||||
{/volist}
|
||||
</div>
|
||||
{/if}
|
||||
5
code/app/home/view/default/public/articleList.html
Normal file
5
code/app/home/view/default/public/articleList.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<li class="s2">
|
||||
<h5 class="tit">
|
||||
<a href="/article/info-332.html">我真是一条龙</a>
|
||||
</h5> <i class="num"><em>{$key+=1}</em></i>
|
||||
</li>
|
||||
3
code/app/home/view/default/public/chapterTable.html
Normal file
3
code/app/home/view/default/public/chapterTable.html
Normal file
@@ -0,0 +1,3 @@
|
||||
<li>
|
||||
<a href="/chapter/1-1-1.html" title="01 天龙问世">01 天龙问世</a>
|
||||
</li>
|
||||
12
code/app/home/view/default/public/chapterTableAll.html
Normal file
12
code/app/home/view/default/public/chapterTableAll.html
Normal file
@@ -0,0 +1,12 @@
|
||||
<li class="chapter-li jsChapter">
|
||||
<a href="/chapter/1-1-1.html" class="chapter-li-a"
|
||||
data-chapter-id="4b2d5aab58d71">
|
||||
<span class="chapter-index">01 天龙问世</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="chapter-li jsChapter">
|
||||
<a href="/chapter/1-1-1.html" class="chapter-li-a"
|
||||
data-chapter-id="486ef2abee55d">
|
||||
<span class="chapter-index">02 沧武的小霸王</span>
|
||||
</a>
|
||||
</li>
|
||||
24
code/app/home/view/default/public/footer.html
Normal file
24
code/app/home/view/default/public/footer.html
Normal file
@@ -0,0 +1,24 @@
|
||||
<div class="footer">
|
||||
<div class="links">
|
||||
<a href="/">首页</a>
|
||||
<a href="/boy.html">男生</a>
|
||||
<a href="/girl.html">女生</a>
|
||||
<a href="/shuku.html">书库</a>
|
||||
<a href="/rank.html">排行</a>
|
||||
</div>
|
||||
<div id="firendlink">
|
||||
友情连接:
|
||||
<a href="/sitemap_index.xml">XML地图</a>
|
||||
<a href="/site.txt">网站地图</a>
|
||||
{site:forgelist count="30" d_key="d_key" d_val="ForgeNovel" cache_life="86400"}
|
||||
<a
|
||||
href='{$strPcPath}{site:nnurl n_id="$ForgeNovel.n_id" n_py="$ForgeNovel.n_name_pinyin" n_fid="$ForgeNovel.n_forge_id"/}'>
|
||||
{$ForgeNovel.n_forge_title}
|
||||
</a>
|
||||
{/site:forgelist}
|
||||
</div>
|
||||
<div class="copyright">
|
||||
<p>精彩小说推荐尽在狂雨小说!</p>
|
||||
<p>©Copyright 2020</p>
|
||||
</div>
|
||||
</div>
|
||||
19
code/app/home/view/default/public/historyNovelList.html
Normal file
19
code/app/home/view/default/public/historyNovelList.html
Normal file
@@ -0,0 +1,19 @@
|
||||
<li class="li2">
|
||||
<a href="/novel/332.html">
|
||||
<div class="leftImage2 "><img class="lazyload-img"
|
||||
src="/static/img/default.jpg" data-src="https://www.630zw.org/img/176943.jpg"></div>
|
||||
<div class="rightBlock">
|
||||
<span class="rightBlock_title">我真是一条龙</span>
|
||||
<span class="rightBlock_name">耽美百合</span>
|
||||
<span class="rightBlock_con rightBlock_con2">
|
||||
<span class="con">
|
||||
<span class="spanLi">老读者必看公告!!!</span>
|
||||
</span>
|
||||
<span class="spanLi Time">4天前</span>
|
||||
<span class="rightJustTime"
|
||||
onclick="javascript:window.location.href='/book/12538/4b2d5aab58d71.html';return false;">继续阅读</span>
|
||||
</span>
|
||||
</div>
|
||||
</a>
|
||||
<span class="deleteBlock" ajax-get="" url="/user/bookshelf/del/id/3.html"></span>
|
||||
</li>
|
||||
19
code/app/home/view/default/public/novelListH.html
Normal file
19
code/app/home/view/default/public/novelListH.html
Normal file
@@ -0,0 +1,19 @@
|
||||
<li class="s1">
|
||||
<img class="pic lazy lazyload-img" data-encrypted="false" src="/static/img/default.jpg" data-src="https://www.630zw.org/img/176943.jpg"
|
||||
alt="我真是一条龙" />
|
||||
<a class="tit" href="/novel/332.html">我真是一条龙</a>
|
||||
<p class="intro">
|
||||
我的父亲告诉我,在我出生那一年,天上金光闪耀,隐隐约约中,好像能看到云朵里有条龙在盘旋,紧接着,一道金光照入我们的村子,我便出生了……为寻答案来人间,天龙问世扰乾坤。
|
||||
无情无义闹天下,千军万马赴黄泉。
|
||||
本站提示:各位书友要是觉得《我真是一条龙》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!
|
||||
</p>
|
||||
<p class="info">
|
||||
<span>
|
||||
<aria>作者:</aria>兔子很淡定
|
||||
</span>
|
||||
<em class="type">耽美百合</em>
|
||||
<!-- <em class="finish">已完结</em> -->
|
||||
<em class="serial">已完结</em>
|
||||
</p>
|
||||
</li>
|
||||
|
||||
5
code/app/home/view/default/public/novelListRank.html
Normal file
5
code/app/home/view/default/public/novelListRank.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<li class="s2">
|
||||
<h5 class="tit">
|
||||
<a href="/novel/1.html">我真是一条龙</a>
|
||||
</h5> <i class="num"><em>{$key+=1}</em></i>
|
||||
</li>
|
||||
10
code/app/home/view/default/public/novelListS.html
Normal file
10
code/app/home/view/default/public/novelListS.html
Normal file
@@ -0,0 +1,10 @@
|
||||
<li>
|
||||
<a href="/novel/1.html">
|
||||
<img class="lazy lazyload-img" data-encrypted="false" src="/static/img/default.jpg"
|
||||
data-src="https://www.630zw.org/img/176943.jpg" alt="落魄千金美食发家日常" />
|
||||
<span>落魄千金美食发家日常</span>
|
||||
<em>
|
||||
<aria>作者:</aria>鱼昆子
|
||||
</em>
|
||||
</a>
|
||||
</li>
|
||||
14
code/app/home/view/default/test/test01/faker.html
Normal file
14
code/app/home/view/default/test/test01/faker.html
Normal file
@@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
{novel:info n_id="$DomainModel->n_id" n_key="arrNovel01" n_forge_id="1125940" /}
|
||||
<title>{$arrNovel01.n_name} - 首页</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{$arrNovel01.n_description}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
|
||||
108
code/app/home/view/default/test/test01/index.html
Normal file
108
code/app/home/view/default/test/test01/index.html
Normal file
@@ -0,0 +1,108 @@
|
||||
{site:forgelist count="3" d_key="d_key" d_val="novel" cache_life="1000"}
|
||||
<li>
|
||||
Index: {$d_key}
|
||||
Title: {$novel.n_name}
|
||||
Author: {$novel.n_category}
|
||||
</li>
|
||||
{/site:forgelist}
|
||||
|
||||
|
||||
<!-- {novel:ranklist count="10" sort_type="total" n_status="wanjie" n_sex="man" d_key="d_key" d_val="novel" cache_life="1000"}
|
||||
<li>
|
||||
Index: {$d_key}
|
||||
Title: {$novel.n_name}
|
||||
Author: {$novel.n_category}
|
||||
</li>
|
||||
{/novel:ranklist} -->
|
||||
|
||||
|
||||
|
||||
<!-- {novel:pagerexp page="1" limit="10" n_category="$Request.route.category" d_key="d_key" d_val="novel" p_val="page_data"
|
||||
cache_life="1000" func="generateSearchPager" export_name="fadfads" /}
|
||||
|
||||
{php}var_dump($fadfads['p_data']);{/php} -->
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- {novel:pager page="1" limit="10" n_category="$Request.route.category" d_key="d_key" d_val="novel" p_val="page_data"
|
||||
cache_life="1000" func="generateSearchPager"}
|
||||
<li>
|
||||
Index: {$d_key}
|
||||
Title: {$novel.n_name}
|
||||
Author: {$novel.n_category}
|
||||
</li>
|
||||
{/novel:pager}
|
||||
|
||||
{php}var_dump($page_data);{/php} -->
|
||||
|
||||
|
||||
|
||||
<!-- {site:grm page_code="fdasfadsf" diff="fadsfdsa" num="10" g_key="arrGrm" /}
|
||||
{php}var_dump($arrGrm);{/php} -->
|
||||
|
||||
<!-- {chapter:info n_id="1" c_sort_num="200" c_page="0" c_key="arrChapter01" /}
|
||||
{$arrChapter01.c_name} -->
|
||||
|
||||
|
||||
<!-- {chapter:pager page="1" limit="10" n_id="$Request.get.n_id" d_key="d_key" d_val="chapter" cache_life="1000" button_num="3" sort_type="dao" p_val="page_data" func="generateChapterPager"}
|
||||
<li>
|
||||
Index: {$d_key}
|
||||
章节名称: {$chapter.c_name}
|
||||
章节序号: {$chapter.c_sort_num}
|
||||
</li>
|
||||
{/chapter:pager}
|
||||
{php}var_dump($page_data);{/php} -->
|
||||
|
||||
<!-- {chapter:list count="10" n_id="$Request.get.n_id" d_key="d_key" d_val="chapter" cache_life="1000"}
|
||||
<li>
|
||||
Index: {$d_key}
|
||||
章节名称: {$chapter.c_name}
|
||||
章节序号: {$chapter.c_sort_num}
|
||||
</li>
|
||||
{/chapter:list} -->
|
||||
|
||||
<!--
|
||||
{novel:category d_key="key" d_val="val"}
|
||||
<li>
|
||||
键: {$key} - 值: {$val}
|
||||
</li>
|
||||
{/novel:category} -->
|
||||
|
||||
<!-- {novel:sex d_key="key" d_val="val"}
|
||||
<li>
|
||||
键: {$key} - 值: {$val}
|
||||
</li>
|
||||
{/novel:sex} -->
|
||||
<!--
|
||||
{novel:status d_key="key" d_val="val"}
|
||||
<li>
|
||||
键: {$key} - 值: {$val}
|
||||
</li>
|
||||
{/novel:status} -->
|
||||
|
||||
<!--
|
||||
{novel:sort d_key="key" d_val="val"}
|
||||
<li>
|
||||
键: {$key} - 值: {$val}
|
||||
</li>
|
||||
{/novel:sort} -->
|
||||
|
||||
|
||||
<!--
|
||||
{novel:info n_id="33" n_key="arrNovel01" n_forge_id="1125940" /}
|
||||
{$arrNovel01.n_name} -->
|
||||
|
||||
<!-- {$DomainModel->d_domain} -->
|
||||
|
||||
<!-- {site:replace code="INDEX@INDEX@TITLE"}
|
||||
-->
|
||||
|
||||
<!-- {novel:list count="10" n_category="$Request.route.category" d_key="d_key" d_val="novel" p_val="page_data" cache_life="1000"}
|
||||
<li>
|
||||
Index: {$d_key}
|
||||
Title: {$novel.n_name}
|
||||
Author: {$novel.n_category}
|
||||
</li>
|
||||
{/novel:list} -->
|
||||
|
||||
40
code/app/home/view/default/user/getBookShelf.html
Normal file
40
code/app/home/view/default/user/getBookShelf.html
Normal file
@@ -0,0 +1,40 @@
|
||||
{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"}
|
||||
<h2 class="bookname">
|
||||
<a href="/" style="color:#ffffff">{$DomainModel->d_name}</a>
|
||||
</h2>
|
||||
{/block}
|
||||
|
||||
{block name="main"}
|
||||
|
||||
<div class="wrap-box">
|
||||
<h3 class="wrap-title"><span>我的书架</span></h3>
|
||||
<div class="rec-focus" id="shujiaContainer">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
<script>
|
||||
const strNovelUrlTemp = `{site:replace code="NOVEL_INFO_URL"}`;
|
||||
const strNovelChapterUrlTemp = `{site:replace code="CONTENT_INFO_URL"}`;
|
||||
const strSearchUrlTemp = `{site:replace code="SEARCH_INFO_URL"}`;
|
||||
// 调用展示书架功能
|
||||
displayShujia();
|
||||
</script>
|
||||
{/block}
|
||||
40
code/app/home/view/default/user/getHistory.html
Normal file
40
code/app/home/view/default/user/getHistory.html
Normal file
@@ -0,0 +1,40 @@
|
||||
{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"}
|
||||
<h2 class="bookname">
|
||||
<a href="/" style="color:#ffffff">{$DomainModel->d_name}</a>
|
||||
</h2>
|
||||
{/block}
|
||||
|
||||
{block name="main"}
|
||||
|
||||
<div class="wrap-box">
|
||||
<h3 class="wrap-title"><span>阅读记录</span></h3>
|
||||
<div class="rec-focus" id="shujiaContainer">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{/block}
|
||||
|
||||
{block name="customize"}
|
||||
<script>
|
||||
const strNovelUrlTemp = `{site:replace code="NOVEL_INFO_URL"}`;
|
||||
const strNovelChapterUrlTemp = `{site:replace code="CONTENT_INFO_URL"}`;
|
||||
const strSearchUrlTemp = `{site:replace code="SEARCH_INFO_URL"}`;
|
||||
// 调用展示书架功能
|
||||
displayHistory();
|
||||
</script>
|
||||
{/block}
|
||||
67
code/app/home/view/haoZi/Index/index.html
Normal file
67
code/app/home/view/haoZi/Index/index.html
Normal file
@@ -0,0 +1,67 @@
|
||||
{extend name="baseH5" /}
|
||||
{block name='nav-active-class'}home{/block}
|
||||
{block name="title"}{/block}
|
||||
{block name="head-js"}{/block}
|
||||
|
||||
{block name="logo-html"}
|
||||
<h1 class="logo">
|
||||
<a href="/">狂雨小说</a>
|
||||
</h1>
|
||||
{/block}
|
||||
|
||||
{block name="main"}
|
||||
<div class="box">
|
||||
<div class="title">人气推荐</div>
|
||||
<ul class="cover">
|
||||
{foreach $arrRecommendNovel as $key=>$category}
|
||||
{include file="Public/novelListS" /}
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div class="title">今日点击</div>
|
||||
{foreach $arrRecommendNovel as $key=>$category}
|
||||
{if $key == 0}
|
||||
{include file="Public/novelListH" /}
|
||||
{/if}
|
||||
{/foreach}
|
||||
<ul class="vlist">
|
||||
{foreach $arrRecommendNovel as $key=>$category}
|
||||
{if $key >= 1}
|
||||
{include file="Public/novelTextList" /}
|
||||
{/if}
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div class="title">书友推荐</div>
|
||||
{foreach $arrRecommendNovel as $key=>$category}
|
||||
{if $key == 0}
|
||||
{include file="Public/novelListH" /}
|
||||
{/if}
|
||||
{/foreach}
|
||||
<ul class="vlist">
|
||||
{foreach $arrRecommendNovel as $key=>$category}
|
||||
{if $key >= 1}
|
||||
{include file="Public/novelTextList" /}
|
||||
{/if}
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div class="title">最近入库</div>
|
||||
<ul class="vlist">
|
||||
{foreach $arrRecommendNovel as $key=>$category}
|
||||
{include file="Public/newsUpdateNovelList" /}
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div class="title">最近更新</div>
|
||||
<ul class="vlist">
|
||||
{foreach $arrRecommendNovel as $key=>$category}
|
||||
{include file="Public/newsUpdateNovelList" /}
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{/block} {block name="customize"} {/block}
|
||||
69
code/app/home/view/haoZi/Novel/getNovelCategory.html
Normal file
69
code/app/home/view/haoZi/Novel/getNovelCategory.html
Normal file
@@ -0,0 +1,69 @@
|
||||
{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"}
|
||||
<ul class="sort">
|
||||
<li>
|
||||
<a href="/list/1/1.html">玄幻修真</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/list/2/1.html">重生穿越</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/list/3/1.html">都市小说</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/list/4/1.html">军史小说</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/list/5/1.html">网游小说</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/list/6/1.html">科幻小说</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/list/7/1.html">灵异小说</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/list/8/1.html">言情小说</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/list/9/1.html">其他小说</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/list/lastupdate_0_0_2_1.html">完本
|
||||
</li>
|
||||
</ul>
|
||||
<div class="path">
|
||||
<a href="/">首页</a>
|
||||
>><a href="/sort/">分类</a>
|
||||
>>小说分类 - 小说列表
|
||||
</div>
|
||||
<ul class="list">
|
||||
{foreach $arrNewsUpdateNovel as $key=>$category}
|
||||
{include file="Public/novelListRank" /}
|
||||
{/foreach}
|
||||
</ul>
|
||||
<div class="pagelist">
|
||||
<a class="prev_off" href="/list/0/1.html">首 页</a>
|
||||
<a class="prev_off" href="/list/0/1.html"> 1 </a>
|
||||
<a href="/list/0/2.html"> 2 </a>
|
||||
<a href="/list/0/3.html"> 3 </a>
|
||||
<a href="/list/0/4.html"> 4 </a>
|
||||
<a href="/list/0/5.html"> 5 </a>
|
||||
<a href="/list/0/6.html"> 6 </a>
|
||||
<a href="/list/0/7.html"> 7 </a>
|
||||
<a href="/list/0/8.html"> 8 </a>
|
||||
<a href="/list/0/9.html"> 9 </a>
|
||||
<a href="/list/0/10.html"> 10 </a>
|
||||
<a class="prev_on" href="/list/0/2.html">下一页</a>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="customize"} {/block}
|
||||
116
code/app/home/view/haoZi/Novel/getNovelChapter.html
Normal file
116
code/app/home/view/haoZi/Novel/getNovelChapter.html
Normal file
@@ -0,0 +1,116 @@
|
||||
{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"}
|
||||
<h1 class="headline">
|
||||
<a href="/shishang/161.html">《满朝文武都能听到我的心声》</a>
|
||||
</h1>
|
||||
<h1 class="headline">101 朕拳打南山敬老院(第1页)</h1>
|
||||
<div class="pager">
|
||||
<a class="url_pre" id="pb_prev" href="/read/161/31043.html" style="">上页</a>
|
||||
<a id="pb_mulu" href="/index/161/1/">目录</a>
|
||||
<a id="pb_mulu" onclick="shuqian(161,31050,'https%3A%2F%2Fwww.hzpxw.net%2Fread%2F161%2F31050.html')">存书签</a>
|
||||
<a class="url_next" id="pb_next" href="/read/161/31050_1.html">下页</a>
|
||||
</div>
|
||||
<div class="content">
|
||||
<p>当然,在开始修史前,编修们决定给许烟杪做个特训。</p>
|
||||
<p>“来,许郎,我问你,你是史官,要记录一件事:皇帝得了一匹烈马,三年过去马仍桀骜,将军为其驯马,短短百日即令马服从,帝问其如何做到,他告知:使马忍渴受训,从人驱遣。”</p>
|
||||
<p>许烟杪琢磨了一下,开始下笔。</p>
|
||||
<p>——经过两年的工作环境熏陶,他已经可以相对熟练地使用文言文了。</p>
|
||||
<p>“上得烈马,三年不得乘。将军献言:百日可令其驯服。遂使之。果得,上问其由。曰:使马久渴则从人。”</p>
|
||||
<p>编修看毕,很是惊喜:“许郎初涉修史,便已摸到精髓了!不错,记史便是越简练越好,‘上得烈马,三年不得乘’,此句便足以超过九成史官!”</p>
|
||||
<p>许烟杪眼神清亮:“谢编修!”</p>
|
||||
<p>那编修一愣:“你谢我作甚?”</p>
|
||||
<p>许烟杪不好意思地笑:“此前我听编修言你们修前朝史已修了十年,便怕我的到来给诸位添麻烦。”</p>
|
||||
<p>那编修本来平静的情绪,又微妙起了望不见的波澜。他深深看了许烟杪一眼,本来觉得这白泽过来当个吉祥物,提供正史就可以了,至于史书,编得大差不差就行,反正也不是指望他来做这个的。</p>
|
||||
<p>但此刻,编修提笔,在纸上写了一句话:“你来看看。”</p>
|
||||
<p>许烟杪探头,就见他写的文字下面,是板板正正的:上得烈马,三年不得乘。将军闻之,以渴服马,解上愁。</p>
|
||||
<p>许烟杪眼睛一下子亮了起来。</p>
|
||||
<p>他明白了!</p>
|
||||
<p>*</p>
|
||||
<p>老皇帝进入椒房殿的时候,窦皇后都吓了一跳:“怎这般狼狈!”</p>
|
||||
<p>怎么胡子乱糟糟的!衣服也有褶皱了!</p>
|
||||
<p>老皇帝骂道:“匹夫!皆是匹夫!”</p>
|
||||
<p>然后气冲冲地向窦皇后诉说自己刚才的遭遇:“他们一个个闹着要上吊不算,还言语围攻朕!还捋朕的龙须!朕不想和他们计较,要走,还抓着不让朕走!”</p>
|
||||
<p>——气到‘朕’字都冒出来了。</p>
|
||||
<p>窦皇后:“……”</p>
|
||||
<p>都把大臣们气到上手抓着皇帝不让他走了……尤其是她家五郎这种暴脾气的皇帝……</p>
|
||||
<p>“五郎,你和我说真话。”窦皇后表情一下子严肃起来:“你不会是一气之下,砸了大臣的祖坟吧?”</p>
|
||||
<p>她本来是挑严重的说,没想到对面的人诡异地沉默了。</p>
|
||||
<p>“……你?”窦皇后的尾音不是很稳。</p>
|
||||
<p>老皇帝咳嗽一声:“也没这么严重,比这个轻一点……也不是,轻了一些……呃,总之就是轻了。”</p>
|
||||
<p>要不是实在心虚,他也不会只是在老婆面前骂几句这群粗鄙之人不要太过分。</p>
|
||||
<p>——早就让人拖出去打板子了。</p>
|
||||
<p>窦皇后:“究竟是何事?”</p>
|
||||
<p>老皇帝眼神一漂:“让许烟杪去修周史。”</p>
|
||||
<p>窦皇后:“……”</p>
|
||||
<p>这和掘人家祖坟也没差多少了。真的怨不得大臣一气之下做出以下犯上的事情。</p>
|
||||
<p>但看看丈夫下巴上面被揪得乱糟糟的胡子,窦皇后还是没忍住笑出声。</p>
|
||||
<p>老皇帝:“妹子!你又不帮我!”</p>
|
||||
<p>窦皇后乐不可支:“你啊,大臣也不是泥捏的,这匹夫一怒……还好只是揪揪胡子,拉着衣服不让你走。”</p>
|
||||
</div>
|
||||
|
||||
<div class="pager">
|
||||
<a class="url_pre" id="pb_prev" href="/read/161/31043.html" style="">上页</a>
|
||||
<a id="pb_mulu" href="/shishang/161.html">书页</a>
|
||||
<a id="pb_mulu" onclick="shuqian(161,31050,'https%3A%2F%2Fwww.hzpxw.net%2Fread%2F161%2F31050.html')">存书签</a>
|
||||
<a class="url_next" id="pb_next" href="/read/161/31050_1.html">下页</a>
|
||||
</div>
|
||||
|
||||
<div class="tui">
|
||||
<div class="listtop">
|
||||
<b>书友点击:</b>
|
||||
<a href="/shishang/24823.html">见微知著(弟妹 H)</a>
|
||||
、<a href="/shishang/14480.html">私吻蝴蝶骨</a>
|
||||
、<a href="/shishang/68.html">官途,搭上女领导之后!</a>
|
||||
、<a href="/shishang/80.html">当明星从跑龙套开始</a>
|
||||
、<a href="/shishang/15651.html">投喂流放罪臣后,她被迫现形了</a>
|
||||
、<a href="/shishang/21394.html">龙傲天的反派小师妹</a>
|
||||
、<a href="/shishang/11330.html">龙凤猪旅行团</a>
|
||||
、<a href="/shishang/11190.html">袅袅春腰</a>
|
||||
、<a href="/shishang/413.html">无敌从觉醒武器大师开始</a>
|
||||
、<a href="/shishang/11365.html">下乡的姐姐回来了</a>
|
||||
、
|
||||
</div>
|
||||
</div>
|
||||
<div class="tui">
|
||||
<div class="listtop">
|
||||
<b>书友推荐:</b>
|
||||
<a href="/shishang/11914.html">以婚为名</a>
|
||||
、<a href="/shishang/11190.html">袅袅春腰</a>
|
||||
、<a href="/shishang/43344.html">官婿美人香</a>
|
||||
、<a href="/shishang/4095.html">望门娇媳</a>
|
||||
、<a href="/shishang/621.html">以你为名的夏天</a>
|
||||
、<a href="/shishang/23912.html">官道之权势滔天</a>
|
||||
、<a href="/shishang/15443.html">被嫡姐换亲之后</a>
|
||||
、<a href="/shishang/29873.html">他的暗卫</a>
|
||||
、<a href="/shishang/665.html">我的年轻岳母</a>
|
||||
、<a href="/shishang/11365.html">下乡的姐姐回来了</a>
|
||||
、
|
||||
</div>
|
||||
</div>
|
||||
<div class="tui">
|
||||
<div class="listtop">
|
||||
<b>书友收藏:</b>
|
||||
<a href="/shishang/23651.html">潘多拉的复仇(高干,nph)</a>
|
||||
、<a href="/shishang/64.html">千里宦途</a>
|
||||
、<a href="/shishang/73.html">医道官途</a>
|
||||
、<a href="/shishang/68.html">官途,搭上女领导之后!</a>
|
||||
、<a href="/shishang/35916.html">从边军走出来的悍卒</a>
|
||||
、<a href="/shishang/97.html">非常权途</a>
|
||||
、<a href="/shishang/54064.html">重生1958:发家致富从南锣鼓巷开始</a>
|
||||
、<a href="/shishang/41670.html">听说你暗恋我</a>
|
||||
、<a href="/shishang/79892.html">退婚后,我娶了未婚妻的堂妹</a>
|
||||
、<a href="/shishang/63.html">升迁之路</a>
|
||||
、
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="customize"} {/block}
|
||||
644
code/app/home/view/haoZi/Novel/getNovelChapterAll.html
Normal file
644
code/app/home/view/haoZi/Novel/getNovelChapterAll.html
Normal file
@@ -0,0 +1,644 @@
|
||||
{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"}
|
||||
<div class="detail">
|
||||
<img class="lazyload-img" data-encrypted="false" src="/static/img/default.jpg"
|
||||
data-src="https://www.630zw.org/img/176943.jpg" alt="满朝文武都能听到我的心声">
|
||||
<p class="name">
|
||||
<strong>满朝文武都能听到我的心声</strong>
|
||||
</p>
|
||||
<p class="author">
|
||||
<i class="layui-icon i_author"></i>
|
||||
<a href="/author/%E7%99%BD%E8%89%B2%E7%9A%84%E6%9C%A8.html">白色的木</a>
|
||||
</p>
|
||||
<p>
|
||||
<span class="layui-btn layui-btn-xs layui-btn-radius">其他小说</span>
|
||||
<span class="layui-btn layui-btn-xs layui-btn-radius layui-btn-danger">连载中</span>
|
||||
</p>
|
||||
<p class="new">
|
||||
最新章节:<a href="/read/161/8704762.html">第224章 许郎此去光耀万里</a>
|
||||
</p>
|
||||
<p>最后更新:2024-06-05 17:53:58</p>
|
||||
</div>
|
||||
<ul class="action">
|
||||
<li>
|
||||
<a href="/shishang/161.html">小说详情</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/30445.html">开始阅读</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:addbookcase('https://www.hzpxw.net/index/161/1/','161');">加入书架</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="box">
|
||||
<div class="title">满朝文武都能听到我的心声 章节列表(第2页)</div>
|
||||
<div class="page_num">
|
||||
<a href="/shishang/161.html" class="z">上一页</a>
|
||||
<select onchange="self.location.href=options[selectedIndex].value">
|
||||
<option value="/shishang/161.html">第1-100章</option>
|
||||
<option selected="selected" value="/index/161/1/">第101-200章</option>
|
||||
<option value="/index/161/2/">第201-223章</option>
|
||||
</select>
|
||||
<a href="/index/161/2/" class="y">下一页</a>
|
||||
</div>
|
||||
<ul class="vlist">
|
||||
<li>
|
||||
<a href="/read/161/31050.html">
|
||||
101 朕拳打南山敬老院<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31055.html">
|
||||
102 逼格好高让我看看<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31063.html">
|
||||
103 无人生还<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31068.html">
|
||||
104 big胆他是祥瑞 <span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31075.html">
|
||||
第 105 章 大夏君臣 如果我把两个人关一起能变性吗<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31080.html">
|
||||
第 106 章 为了不被老皇帝猜忌装了十五年的腿瘸坐了十五年的轮椅<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31087.html">
|
||||
第 107 章 保命第一<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31092.html">
|
||||
第 108 章 惊堂堂太子当街碰瓷竟是因为<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31100.html">
|
||||
109 城管大队来啦<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31105.html">
|
||||
110 舍利子色不异空空不异色色即是空空<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31110.html">
|
||||
111 让我看看是哪家倒霉蛋被选中了<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31114.html">
|
||||
112 公若不弃便拜为义父<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31119.html">
|
||||
113 太医快叫太医<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31124.html">
|
||||
114 我是不是误入什么修罗场了<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31130.html">
|
||||
115 十年里年年高三礼貌吗<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31134.html">
|
||||
116 这才是高端的认祖宗办法<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31137.html">
|
||||
117 得加钱<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31141.html">
|
||||
第 118 章 你好尊敬的欧罗巴医师能治一下我们太子吗<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31145.html">
|
||||
119 当初真不应该放过他们家祖坟<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31151.html">
|
||||
120 寒风萧瑟大雪纷飞他的背影无比凄凉<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31155.html">
|
||||
121 惊净身房或要立功<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31160.html">
|
||||
122 啥你喜欢皇帝岳母<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31164.html">
|
||||
123 换我我也心动<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31169.html">
|
||||
124 许郎岁二十及冠<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31175.html">
|
||||
125 树与瑶池<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31181.html">
|
||||
126 这贿赂是单送我一人的还是别的官员们都<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31188.html">
|
||||
127 撕碎别人的伞<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31191.html">
|
||||
128 哥哥你错啦<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31199.html">
|
||||
129 专业替考编五场会试保送五人<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31205.html">
|
||||
130 天统的官狗都不当<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31211.html">
|
||||
131 监督简单看系统<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31216.html">
|
||||
132 你信他还是信我是始皇帝<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31223.html">
|
||||
133 阎王爷点名2 0<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31228.html">
|
||||
134 皇恩浩荡啊<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31235.html">
|
||||
135 襄阳公主 与其反省自己不如质疑别人<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31240.html">
|
||||
136 榜下捉婿之从开始到结束<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31248.html">
|
||||
137 十郎我只图你一辈子对我好我不在乎你有<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31253.html">
|
||||
138 风险与投资<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31260.html">
|
||||
139 啊多么可歌可泣神圣伟大美好<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31265.html">
|
||||
140 今天抽个盲盒吧芜湖 谁第一个出来奏报<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31272.html">
|
||||
141 老皇帝风韵犹存小太子青涩可人<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31278.html">
|
||||
142 朕的宝贝红薯土豆玉米你们终于回来了<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31285.html">
|
||||
143 大可不必以这种方式青史留名<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31290.html">
|
||||
144 过不下去就回学校吃饭卡<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31297.html">
|
||||
第 145 章 今谢氏洛水远赴海外历时二载得回神种大功封洛县县侯<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31302.html">
|
||||
第 146 章 告老还乡后我写点回忆录记载同僚的糗事不过分吧<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31309.html">
|
||||
第 147 章 三十年河东三十年河西莫欺老年穷<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31315.html">
|
||||
第 148 章 惊皇帝居然公然抢大臣的土地<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31320.html">
|
||||
第 149 章 有杀气<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31327.html">
|
||||
第 150 章 捅破天了<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31330.html">
|
||||
第 151 章 天统消消乐一<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31337.html">
|
||||
第 152 章 天统消消乐二<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31343.html">
|
||||
第 153 章 天统消消乐三<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31350.html">
|
||||
第 154 章 天统消消乐四<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31355.html">
|
||||
第 155 章 天统消消乐五<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31362.html">
|
||||
第 156 章 天统消消乐六<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31365.html">
|
||||
第 157 章 天统消消乐七<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31372.html">
|
||||
第 158 章 天统消消乐八<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31377.html">
|
||||
第 159 章 天统消消乐九<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31384.html">
|
||||
第 160 章 大风刮来钱啦<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31389.html">
|
||||
第 161 章 一天不听八卦就不舒服<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31396.html">
|
||||
第 162 章 朝廷大助力是兄弟就帮我砍别的丞相候选人一刀<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31402.html">
|
||||
第 163 章 进宫看热闹<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31409.html">
|
||||
第 164 章 你们争丞相位置引起了小白泽的注意为什么倒霉的是我啊啊<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31414.html">
|
||||
第 165 章 老实人许烟杪<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31421.html">
|
||||
第 166 章 我也是你们play的一环吗<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31426.html">
|
||||
第 167 章 许适之啊许适之你不能再跑偏重点了<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31433.html">
|
||||
第 168 章 半日尚书<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31438.html">
|
||||
第 169 章 巨额财产来源不明罪<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31445.html">
|
||||
第 170 章 三气腐儒<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31450.html">
|
||||
第 171 章 还我血汗钱<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31458.html">
|
||||
第 172 章 神出鬼没小白泽<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31463.html">
|
||||
第 173 章 本宫只是想找到谁半年不冲厕所而已怎么揪出来两个奇奇怪怪<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31468.html">
|
||||
第 174 章 太子绕柱走<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31474.html">
|
||||
第 175 章 丰收的喜悦<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31482.html">
|
||||
第 176 章 陛下你也不想偷偷削武官底薪的事情被发现吧<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31487.html">
|
||||
第 177 章 卧槽老皇帝让武官随便搬他的私库<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31491.html">
|
||||
第 178 章 我的心跟你一起死了<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/31496.html">
|
||||
第 179 章 三年了版本该更新了<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596466.html">
|
||||
第 180 章 自有大儒替我辩经<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596470.html">
|
||||
第 181 章 难道你趴朱子床底下知道他没有纳尼姑<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596471.html">
|
||||
第 182 章 朱子的思想不重要朱子有没有纳尼姑睡儿媳才重要<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596473.html">
|
||||
第 183 章 此地无淫三百两<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596474.html">
|
||||
第 184 章 你真是个好人<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596475.html">
|
||||
第 185 章 男耕女织女子纺织乃本职若来做官便是不务正业<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596477.html">
|
||||
第 186 章 呵皇后来了又怎么样朕也不怕的<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596478.html">
|
||||
第 187 章 千里家书只为墙让他三尺又何妨<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596480.html">
|
||||
第 188 章 看到了吗这就是不好好读书的下场<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596481.html">
|
||||
第 189 章 社死的惨叫声<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596483.html">
|
||||
第 190 章 损还是小白泽损<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596484.html">
|
||||
第 191 章 你们最好好好听着我是怎么给大夏乃至给前朝擦屁股的<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596485.html">
|
||||
第 192 章 朕得你如鱼得水<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596486.html">
|
||||
第 193 章 这这瓜是不是过于甜了<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596487.html">
|
||||
第 194 章 智商税<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596489.html">
|
||||
第 195 章 陛下何故造反<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596491.html">
|
||||
第 196 章 尴尬不会消失只会转移<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596492.html">
|
||||
第 197 章 棋逢对手将遇良才<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596494.html">
|
||||
第 198 章 棋逢对手将遇良才2 0<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596496.html">
|
||||
第 199 章 娘啊<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/161/1596497.html">
|
||||
第 200 章 你娘活着影响你发挥了<span></span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="page_num">
|
||||
<a href="/shishang/161.html" class="z">上一页</a>
|
||||
<select onchange="self.location.href=options[selectedIndex].value">
|
||||
<option value="/shishang/161.html">第1-100章</option>
|
||||
<option selected="selected" value="/index/161/1/">第101-200章</option>
|
||||
<option value="/index/161/2/">第201-223章</option>
|
||||
</select>
|
||||
<a href="/index/161/2/" class="y">下一页</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tui">
|
||||
<div class="listtop">
|
||||
<b>书友点击:</b>
|
||||
<a href="/shishang/23697.html">不乖(姐夫,出轨)</a>
|
||||
、<a href="/shishang/23912.html">官道之权势滔天</a>
|
||||
、<a href="/shishang/609.html">蝶变</a>
|
||||
、<a href="/shishang/40.html">苟在修真世界</a>
|
||||
、<a href="/shishang/24025.html">玻璃灯</a>
|
||||
、<a href="/shishang/14480.html">私吻蝴蝶骨</a>
|
||||
、<a href="/shishang/15443.html">被嫡姐换亲之后</a>
|
||||
、<a href="/shishang/165.html">没你就不行之新征途</a>
|
||||
、<a href="/shishang/29873.html">他的暗卫</a>
|
||||
、<a href="/shishang/19030.html">翡翠衾(nph)</a>
|
||||
、<a href="/shishang/20117.html">女神攻略手册</a>
|
||||
、<a href="/shishang/665.html">我的年轻岳母</a>
|
||||
、<a href="/shishang/24677.html">鱼目珠子(高干1v1)</a>
|
||||
、<a href="/shishang/381.html">直播写纯爱文的我在虫族封神</a>
|
||||
、<a href="/shishang/236.html">触手怪她只想生存</a>
|
||||
、<a href="/shishang/607.html">归雾</a>
|
||||
、<a href="/shishang/36033.html">潘多拉的复仇</a>
|
||||
、<a href="/shishang/64.html">千里宦途</a>
|
||||
、<a href="/shishang/9387.html">岁岁平安</a>
|
||||
、<a href="/shishang/16617.html">吃了肉,就不能吃我了</a>
|
||||
、
|
||||
</div>
|
||||
</div>
|
||||
<div class="tui">
|
||||
<div class="listtop">
|
||||
<b>书友推荐:</b>
|
||||
<a href="/shishang/665.html">我的年轻岳母</a>
|
||||
、<a href="/shishang/381.html">直播写纯爱文的我在虫族封神</a>
|
||||
、<a href="/shishang/607.html">归雾</a>
|
||||
、<a href="/shishang/413.html">无敌从觉醒武器大师开始</a>
|
||||
、<a href="/shishang/612.html">古代猎户的养家日常</a>
|
||||
、<a href="/shishang/34605.html">认知性偏差</a>
|
||||
、<a href="/shishang/15443.html">被嫡姐换亲之后</a>
|
||||
、<a href="/shishang/14480.html">私吻蝴蝶骨</a>
|
||||
、<a href="/shishang/11332.html">替身男配只想赚钱</a>
|
||||
、<a href="/shishang/432.html">黑心大小姐带着空间下乡啦</a>
|
||||
、<a href="/shishang/11375.html">逐澳游戏</a>
|
||||
、<a href="/shishang/16617.html">吃了肉,就不能吃我了</a>
|
||||
、<a href="/shishang/3230.html">一品红人</a>
|
||||
、<a href="/shishang/507.html">七零宠婚:撩硬汉!生三胎</a>
|
||||
、<a href="/shishang/9394.html">大王万万不可!</a>
|
||||
、<a href="/shishang/69.html">误入官路</a>
|
||||
、<a href="/shishang/10893.html">含泪做1</a>
|
||||
、<a href="/shishang/609.html">蝶变</a>
|
||||
、<a href="/shishang/36040.html">无敌六皇子</a>
|
||||
、<a href="/shishang/165.html">没你就不行之新征途</a>
|
||||
、
|
||||
</div>
|
||||
</div>
|
||||
<div class="tui">
|
||||
<div class="listtop">
|
||||
<b>书友收藏:</b>
|
||||
<a href="/shishang/79245.html">癌症晚期,前任女友疯狂报复我</a>
|
||||
、<a href="/shishang/26313.html">天才少年,开局便是救世主</a>
|
||||
、<a href="/shishang/9394.html">大王万万不可!</a>
|
||||
、<a href="/shishang/105465.html">梨汁软糖【1V1甜H】</a>
|
||||
、<a href="/shishang/24865.html">诱奸儿媳</a>
|
||||
、<a href="/shishang/83700.html">官场之狐</a>
|
||||
、<a href="/shishang/11609.html">钟离先生一直在穿越</a>
|
||||
、<a href="/shishang/12819.html">云婳谢景行</a>
|
||||
、<a href="/shishang/70.html">官途:权力巅峰</a>
|
||||
、<a href="/shishang/609.html">蝶变</a>
|
||||
、<a href="/shishang/45096.html">开局一杆大狙,爆杀十万鞑子</a>
|
||||
、<a href="/shishang/3230.html">一品红人</a>
|
||||
、<a href="/shishang/16617.html">吃了肉,就不能吃我了</a>
|
||||
、<a href="/shishang/39442.html">官婿美人香全文完结</a>
|
||||
、<a href="/shishang/23875.html">青花冷(先婚后爱H)</a>
|
||||
、<a href="/shishang/288.html">七零大杂院小寡妇</a>
|
||||
、<a href="/shishang/78.html">官场:扶摇直上九万里</a>
|
||||
、<a href="/shishang/35716.html">官路浮沉</a>
|
||||
、<a href="/shishang/35916.html">从边军走出来的悍卒</a>
|
||||
、<a href="/shishang/236.html">触手怪她只想生存</a>
|
||||
、
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="customize"} {/block}
|
||||
699
code/app/home/view/haoZi/Novel/getNovelInfo.html
Normal file
699
code/app/home/view/haoZi/Novel/getNovelInfo.html
Normal file
@@ -0,0 +1,699 @@
|
||||
{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"}
|
||||
<div class="detail">
|
||||
<img class="lazyload-img" data-encrypted="false" src="/static/img/default.jpg"
|
||||
data-src="https://www.630zw.org/img/176943.jpg" alt="和扶弟魔老婆离婚后,我直接走上巅峰!">
|
||||
<p class="name">
|
||||
<strong>和扶弟魔老婆离婚后,我直接走上巅峰!</strong>
|
||||
</p>
|
||||
<p class="author">
|
||||
<i class="layui-icon i_author"></i>
|
||||
<a href="/author/%E5%A4%A9%E5%91%BD%E4%BA%BA%E6%82%9F%E7%8C%B4.html">天命人悟猴</a>
|
||||
</p>
|
||||
<p>
|
||||
<span class="layui-btn layui-btn-xs layui-btn-radius">都市小说</span>
|
||||
<span class="layui-btn layui-btn-xs layui-btn-radius layui-btn-danger">连载中</span>
|
||||
</p>
|
||||
<p class="new">
|
||||
最新章节:<a href="/read/125639/34796282.html">第344章</a>
|
||||
</p>
|
||||
<p>最后更新:2025-03-20 11:17:50</p>
|
||||
</div>
|
||||
<ul class="action">
|
||||
<li>
|
||||
<a href="/read/125639/34795938.html">开始阅读</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/index/125639/1/">章节目录</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:addbookcase('https://www.hzpxw.net/shishang/125639.html','125639');">加入书架</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="box">
|
||||
<div class="title">和扶弟魔老婆离婚后,我直接走上巅峰!小说简介</div>
|
||||
<div class="intro">
|
||||
<p>结婚两年半,妻子为了弟弟掏空家产,甚至拿走给工人的工资!面对妻子赵梦莹胡搅蛮缠的一家人,以及对方的颠倒黑白,许平安一通电话打给以前的战友。他不忍了!一场意外,再次见到高中同学,对方脱胎换骨。许平安也很惊讶,却不知自己是某人心中的白月光。离了赵梦莹,许平安逐渐走向人生巅峰,收获真爱,而前妻却开始死缠烂打。呵呵,他瞧不上!
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div class="title">和扶弟魔老婆离婚后,我直接走上巅峰! 最新章节</div>
|
||||
<ul class="vlist">
|
||||
<li>
|
||||
<a href="/read/125639/34796282.html">
|
||||
第344章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796281.html">
|
||||
第343章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796280.html">
|
||||
第342章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796279.html">
|
||||
第341章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796278.html">
|
||||
第340章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796277.html">
|
||||
第339章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796276.html">
|
||||
第338章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796275.html">
|
||||
第337章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796274.html">
|
||||
第336章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796273.html">
|
||||
第335章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796272.html">
|
||||
第334章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796271.html">
|
||||
第333章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">和扶弟魔老婆离婚后,我直接走上巅峰! 章节列表(第1页/100章)</div>
|
||||
<ul class="vlist">
|
||||
<li>
|
||||
<a href="/read/125639/34795938.html">
|
||||
第1章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795939.html">
|
||||
第2章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795940.html">
|
||||
第3章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795941.html">
|
||||
第4章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795942.html">
|
||||
第5章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795943.html">
|
||||
第6章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795944.html">
|
||||
第7章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795945.html">
|
||||
第8章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795946.html">
|
||||
第9章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795947.html">
|
||||
第10章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795948.html">
|
||||
第11章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795949.html">
|
||||
第12章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795950.html">
|
||||
第13章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795951.html">
|
||||
第14章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795952.html">
|
||||
第15章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795953.html">
|
||||
第16章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795954.html">
|
||||
第17章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795955.html">
|
||||
第18章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795956.html">
|
||||
第19章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795957.html">
|
||||
第20章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795958.html">
|
||||
第21章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795959.html">
|
||||
第22章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795960.html">
|
||||
第23章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795961.html">
|
||||
第24章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795962.html">
|
||||
第25章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795963.html">
|
||||
第26章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795964.html">
|
||||
第27章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795965.html">
|
||||
第28章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795966.html">
|
||||
第29章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795967.html">
|
||||
第30章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795968.html">
|
||||
第31章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795969.html">
|
||||
第32章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795970.html">
|
||||
第33章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795971.html">
|
||||
第34章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795972.html">
|
||||
第35章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795973.html">
|
||||
第36章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795974.html">
|
||||
第37章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795975.html">
|
||||
第38章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795976.html">
|
||||
第39章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795977.html">
|
||||
第40章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795978.html">
|
||||
第41章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795979.html">
|
||||
第42章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795980.html">
|
||||
第43章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795981.html">
|
||||
第44章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795982.html">
|
||||
第45章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795983.html">
|
||||
第46章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795984.html">
|
||||
第47章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795985.html">
|
||||
第48章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795986.html">
|
||||
第49章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795987.html">
|
||||
第50章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795988.html">
|
||||
第51章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795989.html">
|
||||
第52章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795990.html">
|
||||
第53章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795991.html">
|
||||
第54章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795992.html">
|
||||
第55章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795993.html">
|
||||
第56章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795994.html">
|
||||
第57章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795995.html">
|
||||
第58章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795996.html">
|
||||
第59章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795997.html">
|
||||
第60章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795998.html">
|
||||
第61章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34795999.html">
|
||||
第62章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796000.html">
|
||||
第63章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796001.html">
|
||||
第64章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796002.html">
|
||||
第65章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796003.html">
|
||||
第66章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796004.html">
|
||||
第67章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796005.html">
|
||||
第68章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796006.html">
|
||||
第69章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796007.html">
|
||||
第70章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796008.html">
|
||||
第71章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796009.html">
|
||||
第72章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796010.html">
|
||||
第73章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796011.html">
|
||||
第74章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796012.html">
|
||||
第75章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796013.html">
|
||||
第76章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796014.html">
|
||||
第77章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796015.html">
|
||||
第78章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796016.html">
|
||||
第79章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796017.html">
|
||||
第80章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796018.html">
|
||||
第81章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796019.html">
|
||||
第82章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796020.html">
|
||||
第83章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796021.html">
|
||||
第84章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796022.html">
|
||||
第85章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796023.html">
|
||||
第86章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796024.html">
|
||||
第87章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796025.html">
|
||||
第88章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796026.html">
|
||||
第89章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796027.html">
|
||||
第90章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796028.html">
|
||||
第91章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796029.html">
|
||||
第92章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796030.html">
|
||||
第93章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796031.html">
|
||||
第94章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796032.html">
|
||||
第95章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796033.html">
|
||||
第96章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796034.html">
|
||||
第97章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796035.html">
|
||||
第98章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796036.html">
|
||||
第99章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/read/125639/34796037.html">
|
||||
第100章<span></span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="now">
|
||||
<a href="/index/125639/1/">查看《和扶弟魔老婆离婚后,我直接走上巅峰!》全部章节...</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="tui">
|
||||
<div class="listtop">
|
||||
<b>书友点击:</b>
|
||||
<a href="/shishang/665.html">我的年轻岳母</a>
|
||||
、<a href="/shishang/21398.html">琉璃阶上</a>
|
||||
、<a href="/shishang/15443.html">被嫡姐换亲之后</a>
|
||||
、<a href="/shishang/621.html">以你为名的夏天</a>
|
||||
、<a href="/shishang/148.html">在北宋当陪房</a>
|
||||
、<a href="/shishang/381.html">直播写纯爱文的我在虫族封神</a>
|
||||
、<a href="/shishang/164.html">嫁给铁哥们</a>
|
||||
、<a href="/shishang/3230.html">一品红人</a>
|
||||
、<a href="/shishang/68.html">官途,搭上女领导之后!</a>
|
||||
、<a href="/shishang/24025.html">玻璃灯</a>
|
||||
、<a href="/shishang/64.html">千里宦途</a>
|
||||
、<a href="/shishang/7093.html">重生七零:糙汉老公掐腰宠</a>
|
||||
、<a href="/shishang/15651.html">投喂流放罪臣后,她被迫现形了</a>
|
||||
、<a href="/shishang/11330.html">龙凤猪旅行团</a>
|
||||
、<a href="/shishang/21847.html">陈放顾静姝</a>
|
||||
、<a href="/shishang/19030.html">翡翠衾(nph)</a>
|
||||
、<a href="/shishang/486.html">替嫡姐爬上龙床,她宠冠后宫</a>
|
||||
、<a href="/shishang/11332.html">替身男配只想赚钱</a>
|
||||
、<a href="/shishang/23152.html">穿书后成了狼孩</a>
|
||||
、<a href="/shishang/607.html">归雾</a>
|
||||
、
|
||||
</div>
|
||||
</div>
|
||||
<div class="tui">
|
||||
<div class="listtop">
|
||||
<b>书友推荐:</b>
|
||||
<a href="/shishang/43344.html">官婿美人香</a>
|
||||
、<a href="/shishang/12770.html">人间政道</a>
|
||||
、<a href="/shishang/165.html">没你就不行之新征途</a>
|
||||
、<a href="/shishang/381.html">直播写纯爱文的我在虫族封神</a>
|
||||
、<a href="/shishang/507.html">七零宠婚:撩硬汉!生三胎</a>
|
||||
、<a href="/shishang/11332.html">替身男配只想赚钱</a>
|
||||
、<a href="/shishang/19030.html">翡翠衾(nph)</a>
|
||||
、<a href="/shishang/15259.html">结局前炮灰们掀了马甲</a>
|
||||
、<a href="/shishang/24677.html">鱼目珠子(高干1v1)</a>
|
||||
、<a href="/shishang/1458.html">婚后心动:凌总追妻有点甜</a>
|
||||
、<a href="/shishang/9394.html">大王万万不可!</a>
|
||||
、<a href="/shishang/34605.html">认知性偏差</a>
|
||||
、<a href="/shishang/621.html">以你为名的夏天</a>
|
||||
、<a href="/shishang/80.html">当明星从跑龙套开始</a>
|
||||
、<a href="/shishang/10893.html">含泪做1</a>
|
||||
、<a href="/shishang/11330.html">龙凤猪旅行团</a>
|
||||
、<a href="/shishang/29873.html">他的暗卫</a>
|
||||
、<a href="/shishang/3230.html">一品红人</a>
|
||||
、<a href="/shishang/413.html">无敌从觉醒武器大师开始</a>
|
||||
、<a href="/shishang/573.html">他说我不配</a>
|
||||
、
|
||||
</div>
|
||||
</div>
|
||||
<div class="tui">
|
||||
<div class="listtop">
|
||||
<b>书友收藏:</b>
|
||||
<a href="/shishang/26313.html">天才少年,开局便是救世主</a>
|
||||
、<a href="/shishang/80.html">当明星从跑龙套开始</a>
|
||||
、<a href="/shishang/609.html">蝶变</a>
|
||||
、<a href="/shishang/68.html">官途,搭上女领导之后!</a>
|
||||
、<a href="/shishang/101156.html">华娱从男模开始</a>
|
||||
、<a href="/shishang/63.html">升迁之路</a>
|
||||
、<a href="/shishang/23629.html">优质肉棒攻略系统(np高辣文)</a>
|
||||
、<a href="/shishang/79892.html">退婚后,我娶了未婚妻的堂妹</a>
|
||||
、<a href="/shishang/15552.html">官场:救了女领导后,我一路飞升</a>
|
||||
、<a href="/shishang/83700.html">官场之狐</a>
|
||||
、<a href="/shishang/486.html">替嫡姐爬上龙床,她宠冠后宫</a>
|
||||
、<a href="/shishang/16055.html">绝品宏图</a>
|
||||
、<a href="/shishang/16617.html">吃了肉,就不能吃我了</a>
|
||||
、<a href="/shishang/78.html">官场:扶摇直上九万里</a>
|
||||
、<a href="/shishang/35716.html">官路浮沉</a>
|
||||
、<a href="/shishang/73.html">医道官途</a>
|
||||
、<a href="/shishang/45096.html">开局一杆大狙,爆杀十万鞑子</a>
|
||||
、<a href="/shishang/15443.html">被嫡姐换亲之后</a>
|
||||
、<a href="/shishang/23642.html">你男朋友下面真大(校园 np 高h)</a>
|
||||
、<a href="/shishang/97.html">非常权途</a>
|
||||
、
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="customize"} {/block}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user