diff --git a/code/.example.env b/code/.example.env index 927e93d..96c76a3 100644 --- a/code/.example.env +++ b/code/.example.env @@ -51,3 +51,8 @@ MINIO_BUCKET = test001 # LocalStorage STORAGE_LOCAL_DIR = /mnt/gluster + + +# VIEW +VIEW_DISPLAY_CACHE = false +VIEW_TPL_CACHE = false \ No newline at end of file diff --git a/code/app/common.php b/code/app/common.php index 9de5c7e..10da1e7 100644 --- a/code/app/common.php +++ b/code/app/common.php @@ -144,6 +144,13 @@ namespace { throw new Exception("无法写入加密文件: $strOutImgPath"); } } + + /** + * 中文转码实体字符 + * + * @param string $text + * @return string + */ function customEntities($text) { $result = ''; diff --git a/code/app/home/config/router.php b/code/app/home/config/router.php index 7a3e35d..34dcdb5 100644 --- a/code/app/home/config/router.php +++ b/code/app/home/config/router.php @@ -2,30 +2,31 @@ declare(strict_types=1); +use app\home\controller\Novel; use think\facade\Route; # 路由别名,可以忽略 // Route::alias("/index.html", "/")->append(['boolIsMobile' => true]); // Route::alias("/pc/index.html", "/")->append(['boolIsMobile' => false]); -Route::get("/",'Index/index')->ext('html')->append(['boolIsMobile' => true]); -Route::get("/index",'Index/index')->ext('html')->append(['boolIsMobile' => true]); -Route::get("/pc/index",'Index/getPcIndex')->ext('html')->append(['boolIsMobile' => false]); -Route::get("/pc/",'Index/getPcIndex')->append(['boolIsMobile' => false]); +Route::get("/", 'Index/index')->ext('html')->append(['boolIsMobile' => true]); +Route::get("/index", 'Index/index')->ext('html')->append(['boolIsMobile' => true]); +Route::get("/pc/index", 'Index/getPcIndex')->ext('html')->append(['boolIsMobile' => false]); +Route::get("/pc/", 'Index/getPcIndex')->append(['boolIsMobile' => false]); //排行榜 Route::get('rank', 'Novel/getNovelRank')->ext('html')->append(['boolIsMobile' => true]); -Route::get("/pc/rank",'Novel/getNovelRank')->ext('html')->append(['boolIsMobile' => false]); +Route::get("/pc/rank", 'Novel/getNovelRank')->ext('html')->append(['boolIsMobile' => false]); // 男生/女生 -Route::get('boy', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => true,'strChannel'=>'boys']); -Route::get('pc/boy', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => false,'strChannel'=>'boys']); -Route::get('girl', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => true,'strChannel'=>'girls']); -Route::get('pc/girl', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => false,'strChannel'=>'girls']); -Route::get('novel-boys-channel', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => true,'strChannel'=>'boys']); -Route::get('pc/novel-boys-channel', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => false,'strChannel'=>'boys']); -Route::get('novel-girls-channel', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => true,'strChannel'=>'girls']); -Route::get('pc/novel-girls-channel', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => false,'strChannel'=>'girls']); +Route::get('boy', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => true, 'strChannel' => 'boys']); +Route::get('pc/boy', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => false, 'strChannel' => 'boys']); +Route::get('girl', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => true, 'strChannel' => 'girls']); +Route::get('pc/girl', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => false, 'strChannel' => 'girls']); +Route::get('novel-boys-channel', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => true, 'strChannel' => 'boys']); +Route::get('pc/novel-boys-channel', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => false, 'strChannel' => 'boys']); +Route::get('novel-girls-channel', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => true, 'strChannel' => 'girls']); +Route::get('pc/novel-girls-channel', 'Novel/getNovelChannel')->ext('html')->append(['boolIsMobile' => false, 'strChannel' => 'girls']); //分类 Route::get('class', 'Novel/getNovelCategory')->ext('html')->append(['boolIsMobile' => true]); @@ -33,7 +34,7 @@ Route::get('/pc/class', 'Novel/getNovelCategory')->ext('html')->append(['boolIsM // 书库 Route::get('library', 'Novel/getLibrary')->ext('html')->append(['boolIsMobile' => true]); -Route::get("pc/library",'Novel/getLibrary')->ext('html')->append(['boolIsMobile' => false]); +Route::get("pc/library", 'Novel/getLibrary')->ext('html')->append(['boolIsMobile' => false]); Route::get('shuku', 'Novel/getLibrary')->ext('html')->append(['boolIsMobile' => true]); Route::get('pc/shuku', 'Novel/getLibrary')->ext('html')->append(['boolIsMobile' => false]); Route::get('shuku/[:strNovelChannel]-[:intCategoryId]-[:strStatus]-[:strTextNumber]-[:strUpdateTime]-[:strSort]-[:intPage]', 'Novel/getLibrary')->ext('html')->append(['boolIsMobile' => true]); @@ -50,10 +51,36 @@ Route::get('/article/info-:intArticleId', 'Novel/getArticleInfo')->ext('html')-> Route::get('/pc/article/info-:intArticleId', 'Novel/getArticleInfo')->ext('html')->append(['boolIsMobile' => false]); // 小说详情 -Route::get('/info/:intNovelId', 'Novel/getNovelInfo')->ext('html')->append(['boolIsMobile' => true]); -Route::get('/pc/info/:intNovelId', 'Novel/getNovelInfo')->ext('html')->append(['boolIsMobile' => false]); -Route::get('/novel/:intNovelId', 'Novel/getNovelInfo')->ext('html')->append(['boolIsMobile' => true]); -Route::get('/pc/novel/:intNovelId', 'Novel/getNovelInfo')->ext('html')->append(['boolIsMobile' => false]); +Route::get('/info/:intNovelId', [Novel::class, 'getNovelInfo'])->ext('html')->append(['boolIsMobile' => true]); +Route::get('/pc/info/:intNovelId', [Novel::class, 'getNovelInfo'])->ext('html')->append(['boolIsMobile' => false]); +Route::get('/novel/:intNovelId', [Novel::class, 'getNovelInfo'])->ext('html')->append(['boolIsMobile' => true]); +Route::get('/pc/novel/:intNovelId', [Novel::class, 'getNovelInfo'])->ext('html')->append(['boolIsMobile' => false]); + +// example +// /book/{strPinYin}-{intNId}.html +// /novel/{strPinYin}-{intNId}.html +// /novel-{strPinYin}-{intNId}.html +// /book-{strPinYin}-{intNId}.html +Route::get('/pc/book/:name-:n_id', [Novel::class, 'getNovelInfo']) + ->append(['boolIsMobile' => false, 'intUriType' => 1]) + ->pattern(['n_id' => '\d+','name' => '[\w-]+',]) + ->ext('html'); + +Route::get('/pc/novel/:name-:n_id', [Novel::class, 'getNovelInfo']) + ->append(['boolIsMobile' => false, 'intUriType' => 2]) + ->pattern(['n_id' => '\d+','name' => '[\w-]+',]) + ->ext('html'); + +Route::get('/pc/novel-:name-:n_id', [Novel::class, 'getNovelInfo']) + ->append(['boolIsMobile' => false, 'intUriType' => 3]) + ->pattern(['n_id' => '\d+','name' => '[\w-]+',]) + ->ext('html'); + +Route::get('/pc/book-:name-:n_id', [Novel::class, 'getNovelInfo']) + ->append(['boolIsMobile' => false, 'intUriType' => 4]) + ->pattern(['n_id' => '\d+','name' => '[\w-]+',]) + ->ext('html'); + // 小说章节 Route::get('chapter/:intNovelId-:intChapterId-[:intChapterPage]', 'Novel/getNovelChapter')->ext('html')->append(['boolIsMobile' => true]); diff --git a/code/app/home/controller/Novel.php b/code/app/home/controller/Novel.php index e8da9c8..b951650 100644 --- a/code/app/home/controller/Novel.php +++ b/code/app/home/controller/Novel.php @@ -13,7 +13,7 @@ class Novel extends BaseController { public function index() { - + return View::fetch(); } @@ -120,10 +120,10 @@ class Novel extends BaseController } // 书库 [:strNovelChannel]-[:intCategoryId]-[:strStatus]-[:strTextNumber]-[:strUpdateTime]-[:strSort] - public function getLibrary(Request $Request,$strNovelChannel=null,$intCategoryId=null,$strStatus=null,$strTextNumber=null,$strUpdateTime=null,$strSort=null,$intPage=1) + public function getLibrary(Request $Request, $strNovelChannel = null, $intCategoryId = null, $strStatus = null, $strTextNumber = null, $strUpdateTime = null, $strSort = null, $intPage = 1) { $boolIsMobile = $Request->param('boolIsMobile'); - + // 模拟数据 $arrNovel = [ ['id' => 1, 'name' => '小说1', 'author' => '作者1'], @@ -151,7 +151,7 @@ class Novel extends BaseController public function getBookShelf(Request $Request) { $boolIsMobile = $Request->param('boolIsMobile'); - + // 模拟数据 $arrNewsNovel = [ ['id' => 1, 'name' => '小说1', 'author' => '作者1'], @@ -180,7 +180,7 @@ class Novel extends BaseController { $boolIsMobile = $Request->param('boolIsMobile'); $strNovelChannel = $Request->param('strChannel'); // 区分男生/女生频道 - + // 模拟数据-推荐等级为9的,连载的,男生频道/女生频道, 随机12个小说 $arrRecommendSerializationNovel = [ ['id' => 1, 'name' => '小说1', 'author' => '作者1'], @@ -206,8 +206,8 @@ class Novel extends BaseController ['id' => 6, 'name' => '小说3', 'author' => '作者3'], ['id' => 7, 'name' => '小说3', 'author' => '作者3'], ['id' => 8, 'name' => '小说3', 'author' => '作者3'], - - ]; + + ]; // 模拟数据-最近更新-随机50 $arrNewsUpdateNovel = [ @@ -246,13 +246,13 @@ class Novel extends BaseController return View::fetch('pc/getNovelChannel'); } } - + // 分类 public function getNovelCategory(Request $Request) { $boolIsMobile = $Request->param('boolIsMobile'); $strChannel = $Request->param('strChannel'); // 区分男生 / 女生频道 - + // 模拟数据-推荐等级为9的,连载的,男生频道/女生频道, 随机12个小说 $arrRecommendSerializationNovel = [ ['id' => 1, 'name' => '小说1', 'author' => '作者1'], @@ -278,8 +278,8 @@ class Novel extends BaseController ['id' => 6, 'name' => '小说3', 'author' => '作者3'], ['id' => 7, 'name' => '小说3', 'author' => '作者3'], ['id' => 8, 'name' => '小说3', 'author' => '作者3'], - - ]; + + ]; // 模拟数据-最近更新-随机50 $arrNewsUpdateNovel = [ @@ -320,10 +320,14 @@ class Novel extends BaseController } // 小说详情 - public function getNovelInfo(Request $Request,$intNovelId = 1) + public function getNovelInfo(Request $Request) { + $intNId = $Request->param('n_id'); + + + $boolIsMobile = $Request->param('boolIsMobile'); - + // 模拟数据-随机推荐数据10条 $arrRecommendNovel = [ ['id' => 1, 'name' => '小说1', 'author' => '作者1'], @@ -340,7 +344,7 @@ class Novel extends BaseController // 相邻推荐->关联的 kan 数据 // 精品推荐->同分类随机10条数据 // 最新要点->取新意章节, 随机提取一部分内容 大概150字数 - + View::assign([ 'arrRecommendNovel' => $arrRecommendNovel, @@ -357,7 +361,7 @@ class Novel extends BaseController public function getNovelChapter(Request $Request, $intNovelId = 1, $intChapterId = 1, $intChapterPage = 1) { $boolIsMobile = $Request->param('boolIsMobile'); - + // 模拟数据 $arrNewsNovel = [ ['id' => 1, 'name' => '小说1', 'author' => '作者1'], @@ -385,7 +389,7 @@ class Novel extends BaseController public function getNovelChapterAll(Request $Request) { $boolIsMobile = $Request->param('boolIsMobile'); - + // 模拟数据 $arrNovelChapterAll = [ ['id' => 1, 'name' => '小说1', 'author' => '作者1'], @@ -409,13 +413,13 @@ class Novel extends BaseController } } - + // 小说章节-搜索 public function getSearchNovel(Request $Request) { $boolIsMobile = $Request->param('boolIsMobile'); - + // 模拟数据 $arrSearchNovel = [ ['id' => 1, 'name' => '小说1', 'author' => '作者1'], @@ -440,10 +444,10 @@ class Novel extends BaseController } // 小说章节-文章-自定义页面-列表 - public function getArticleList(Request $Request,$intCategoryId = null ,$intPage = 1) + public function getArticleList(Request $Request, $intCategoryId = null, $intPage = 1) { $boolIsMobile = $Request->param('boolIsMobile'); - + // 模拟数据 $arrNewsNovel = [ ['id' => 1, 'name' => '小说1', 'author' => '作者1'], @@ -468,10 +472,10 @@ class Novel extends BaseController } // 小说章节-文章-自定义页面-详情 - public function getArticleInfo(Request $Request,$intArticleId) + public function getArticleInfo(Request $Request, $intArticleId) { $boolIsMobile = $Request->param('boolIsMobile'); - + // 模拟数据 $arrNewsNovel = [ ['id' => 1, 'name' => '小说1', 'author' => '作者1'], @@ -494,7 +498,4 @@ class Novel extends BaseController return View::fetch('pc/getArticleInfo'); } } - - - } diff --git a/code/app/home/view/kuangyu/Pc/index.html b/code/app/home/view/kuangyu/Pc/index.html index 36f129d..4b7694f 100644 --- a/code/app/home/view/kuangyu/Pc/index.html +++ b/code/app/home/view/kuangyu/Pc/index.html @@ -48,18 +48,24 @@