本次更新
1.domain 增加了几个字段,已经 backup, 2.视图模板,替换模板分组,替换模板 数据增加了seed 播种 3. 标记了TODO
This commit is contained in:
@@ -157,6 +157,9 @@ class Site extends BaseController
|
|||||||
"d_name" => $Request->post('d_name'),
|
"d_name" => $Request->post('d_name'),
|
||||||
"d_keywords" => $Request->post('d_keywords'),
|
"d_keywords" => $Request->post('d_keywords'),
|
||||||
"d_description" => $Request->post('d_description'),
|
"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_statis" => $Request->post('d_statis'),
|
||||||
"d_logo_type" => $Request->post('d_logo_type'),
|
"d_logo_type" => $Request->post('d_logo_type'),
|
||||||
"d_text_log" => $Request->post('d_text_log'),
|
"d_text_log" => $Request->post('d_text_log'),
|
||||||
@@ -341,7 +344,8 @@ class Site extends BaseController
|
|||||||
$this->validate($arrData, $arrRule);
|
$this->validate($arrData, $arrRule);
|
||||||
|
|
||||||
$arrSfgId = explode(',', $arrData['sfg_id']);
|
$arrSfgId = explode(',', $arrData['sfg_id']);
|
||||||
SubjectFomartGroupModel::where('sfg_id', $arrSfgId)->delete();
|
|
||||||
|
SubjectFomartGroupModel::whereIn('sfg_id', $arrSfgId)->delete();
|
||||||
|
|
||||||
return $this->success();
|
return $this->success();
|
||||||
}
|
}
|
||||||
@@ -458,7 +462,7 @@ class Site extends BaseController
|
|||||||
$this->validate($arrData, $arrRule);
|
$this->validate($arrData, $arrRule);
|
||||||
|
|
||||||
$arrSfId = explode(',', $arrData['sf_id']);
|
$arrSfId = explode(',', $arrData['sf_id']);
|
||||||
SubjectFomartModel::where('sf_id', $arrSfId)->delete();
|
SubjectFomartModel::whereIn('sf_id', $arrSfId)->delete();
|
||||||
|
|
||||||
return $this->success();
|
return $this->success();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ abstract class BaseController
|
|||||||
{
|
{
|
||||||
ConverterMovel::setVal([
|
ConverterMovel::setVal([
|
||||||
'strSiteName' => $this->request->DomainModel->d_name,
|
'strSiteName' => $this->request->DomainModel->d_name,
|
||||||
|
'strSiteDomain' => $this->request->DomainModel->d_domain,
|
||||||
'strSiteKeywords' => $this->request->DomainModel->d_keywords,
|
'strSiteKeywords' => $this->request->DomainModel->d_keywords,
|
||||||
'strSiteDescription' => $this->request->DomainModel->d_description,
|
'strSiteDescription' => $this->request->DomainModel->d_description,
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ Route::get('/pc/books/:name-:n_id/chapter/latest', [Novel::class, 'getNovelLates
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 小说目录页面
|
* 小说目录页面
|
||||||
* /xiaoshuo/[name]-[novel-id]/mulu/order/[page]
|
* /xiaoshuo/[小说拼音]-[小说id]/mulu/order/[page]
|
||||||
*/
|
*/
|
||||||
Route::get('/xiaoshuo/:name-:intNovelId/mulu/:strOrder/[:intPage]', [Novel::class, 'getNovelChapterAll'])
|
Route::get('/xiaoshuo/:name-:intNovelId/mulu/:strOrder/[:intPage]', [Novel::class, 'getNovelChapterAll'])
|
||||||
->append(['boolIsMobile' => true, 'intUriType' => 1])
|
->append(['boolIsMobile' => true, 'intUriType' => 1])
|
||||||
@@ -93,13 +93,13 @@ Route::get('/pc/xiaoshuo/:name-:intNovelId/mulu/:strOrder/[:intPage]', [Novel::c
|
|||||||
->pattern(['intNovelId' => '\d+', 'name' => '[\w-]+', 'strOrder' => 'zheng|dao', 'intPage' => '\d+']);
|
->pattern(['intNovelId' => '\d+', 'name' => '[\w-]+', 'strOrder' => 'zheng|dao', 'intPage' => '\d+']);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* kan
|
* kan-小说详情
|
||||||
*/
|
*/
|
||||||
Route::get('/pc/kan/:name-:n_id-:n_forge_id', [Novel::class, 'getKanNovelInfo'])
|
Route::get('/pc/kan-xiaoshuo/:name-:n_id-:n_forge_id', [Novel::class, 'getKanNovelInfo'])
|
||||||
->append(['boolIsMobile' => false, 'intUriType' => 2])
|
->append(['boolIsMobile' => false, 'intUriType' => 2])
|
||||||
->pattern(['n_id' => '\d+','n_forge_id' => '\d+', 'name' => '[\w-]+',]);
|
->pattern(['n_id' => '\d+','n_forge_id' => '\d+', 'name' => '[\w-]+',]);
|
||||||
|
|
||||||
Route::get('/kan/:name-:n_id-:n_forge_id', [Novel::class, 'getKanNovelInfo'])
|
Route::get('/kan-xiaoshuo/:name-:n_id-:n_forge_id', [Novel::class, 'getKanNovelInfo'])
|
||||||
->append(['boolIsMobile' => true, 'intUriType' => 2])
|
->append(['boolIsMobile' => true, 'intUriType' => 2])
|
||||||
->pattern(['n_id' => '\d+','n_forge_id' => '\d+', 'name' => '[\w-]+',]);
|
->pattern(['n_id' => '\d+','n_forge_id' => '\d+', 'name' => '[\w-]+',]);
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,21 @@ class Index extends BaseController
|
|||||||
$strStatus = '已完结';
|
$strStatus = '已完结';
|
||||||
$arrEndNovelRankNovel = $NovelModel->getRankNovelOnCache($strKey, 10, 0, 'total',$strStatus);
|
$arrEndNovelRankNovel = $NovelModel->getRankNovelOnCache($strKey, 10, 0, 'total',$strStatus);
|
||||||
|
|
||||||
|
// 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(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([
|
View::assign([
|
||||||
'arrRecommendNovel' => $arrRecommendNovel,
|
'arrRecommendNovel' => $arrRecommendNovel,
|
||||||
@@ -50,7 +65,10 @@ class Index extends BaseController
|
|||||||
'arrWeekRankNovel' => $arrWeekRankNovel,
|
'arrWeekRankNovel' => $arrWeekRankNovel,
|
||||||
'arrMoonRankNovel' => $arrMoonRankNovel,
|
'arrMoonRankNovel' => $arrMoonRankNovel,
|
||||||
'arrEndNovelRankNovel' => $arrEndNovelRankNovel,
|
'arrEndNovelRankNovel' => $arrEndNovelRankNovel,
|
||||||
'strPageCode' => 'home'
|
'strPageCode' => 'home',
|
||||||
|
'strTitle' => $strTitle,
|
||||||
|
'strKeywords' => $strKeywords,
|
||||||
|
'strDescription' => $strDescription,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if ($boolIsMobile) {
|
if ($boolIsMobile) {
|
||||||
@@ -109,10 +127,20 @@ class Index extends BaseController
|
|||||||
// 最近更新-随机50
|
// 最近更新-随机50
|
||||||
$arrNewsUpdateNovel = $NovelModel->getSexNovelOnCache($Request->DomainModel->d_domain, 50);
|
$arrNewsUpdateNovel = $NovelModel->getSexNovelOnCache($Request->DomainModel->d_domain, 50);
|
||||||
|
|
||||||
$strTitle = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__));
|
// Title 模板
|
||||||
|
ConverterMovel::setVal([
|
||||||
$strTitle = ConverterMovel::convert($strTitle);
|
'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([
|
View::assign([
|
||||||
'arrNewsUpdateNovel' => $arrNewsUpdateNovel,
|
'arrNewsUpdateNovel' => $arrNewsUpdateNovel,
|
||||||
@@ -129,6 +157,8 @@ class Index extends BaseController
|
|||||||
'arrAdBanner' => [],
|
'arrAdBanner' => [],
|
||||||
'strPageCode' => 'home',
|
'strPageCode' => 'home',
|
||||||
'strTitle' => $strTitle,
|
'strTitle' => $strTitle,
|
||||||
|
'strKeywords' => $strKeywords,
|
||||||
|
'strDescription' => $strDescription,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -57,15 +57,29 @@ class Novel extends BaseController
|
|||||||
$strStatus = '已完结';
|
$strStatus = '已完结';
|
||||||
$arrEdnNovelRankNovel = $NovelModel->getRankNovelOnCache($strKey, 10, 0, 'total', $strStatus);
|
$arrEdnNovelRankNovel = $NovelModel->getRankNovelOnCache($strKey, 10, 0, 'total', $strStatus);
|
||||||
|
|
||||||
|
// Title 模板
|
||||||
|
ConverterMovel::setVal([
|
||||||
|
'intPage' => 1,
|
||||||
|
]);
|
||||||
|
// $strTitle = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__));
|
||||||
|
$strTitleTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@TITLE');
|
||||||
|
$strKeywordsTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@KEYWORDS');
|
||||||
|
$strDescriptionTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@DESCRIPTION');
|
||||||
|
|
||||||
|
$strTitle = ConverterMovel::convert($strTitleTemplate);
|
||||||
|
$strKeywords = ConverterMovel::convert($strKeywordsTemplate);
|
||||||
|
$strDescription = ConverterMovel::convert($strDescriptionTemplate);
|
||||||
|
|
||||||
View::assign([
|
View::assign([
|
||||||
'arrDayRankNovel' => $arrDayRankNovel,
|
'arrDayRankNovel' => $arrDayRankNovel,
|
||||||
'arrWeekRankNovel' => $arrWeekRankNovel,
|
'arrWeekRankNovel' => $arrWeekRankNovel,
|
||||||
|
|
||||||
'arrMoonRankNovel' => $arrMoonRankNovel,
|
'arrMoonRankNovel' => $arrMoonRankNovel,
|
||||||
'arrTotalRankNovel' => $arrTotalRankNovel,
|
'arrTotalRankNovel' => $arrTotalRankNovel,
|
||||||
'arrNewsNovelRankNovel' => $arrNewsNovelRankNovel,
|
'arrNewsNovelRankNovel' => $arrNewsNovelRankNovel,
|
||||||
'arrEdnNovelRankNovel' => $arrEdnNovelRankNovel,
|
'arrEdnNovelRankNovel' => $arrEdnNovelRankNovel,
|
||||||
|
'strTitle' => $strTitle,
|
||||||
|
'strKeywords' => $strKeywords,
|
||||||
|
'strDescription' => $strDescription,
|
||||||
'strPageCode' => 'rank'
|
'strPageCode' => 'rank'
|
||||||
]);
|
]);
|
||||||
if ($boolIsMobile) {
|
if ($boolIsMobile) {
|
||||||
@@ -96,6 +110,11 @@ class Novel extends BaseController
|
|||||||
'nansheng-xiaoshuo' => 1,
|
'nansheng-xiaoshuo' => 1,
|
||||||
'nvsheng-xiaoshuo' => 1,
|
'nvsheng-xiaoshuo' => 1,
|
||||||
];
|
];
|
||||||
|
$arrSexChinese = [
|
||||||
|
'all' => '',
|
||||||
|
'nansheng-xiaoshuo' => '男生',
|
||||||
|
'nvsheng-xiaoshuo' => '女生',
|
||||||
|
];
|
||||||
|
|
||||||
if (!key_exists($strGender, $arrSex)) {
|
if (!key_exists($strGender, $arrSex)) {
|
||||||
return response('Bad Request', 400);
|
return response('Bad Request', 400);
|
||||||
@@ -105,7 +124,7 @@ class Novel extends BaseController
|
|||||||
|
|
||||||
// 分类
|
// 分类
|
||||||
if ($strCategory == 'all') {
|
if ($strCategory == 'all') {
|
||||||
$strSearchCategory = NULL;
|
$strSearchCategory = '';
|
||||||
} else if (!in_array($strCategory, CategoryModel::$arrCategoryPinYin)) {
|
} else if (!in_array($strCategory, CategoryModel::$arrCategoryPinYin)) {
|
||||||
return response('Bad Request', 400);
|
return response('Bad Request', 400);
|
||||||
} else {
|
} else {
|
||||||
@@ -151,6 +170,25 @@ class Novel extends BaseController
|
|||||||
$strBaseUrl = sprintf('/shuku/%s/%s/%s/page{page}', $strGender, $strCategory, $strStatus);
|
$strBaseUrl = sprintf('/shuku/%s/%s/%s/page{page}', $strGender, $strCategory, $strStatus);
|
||||||
$arrPaginator = CusteomPage02::generate($intPage, $arrPage['total'], $intLimit, $strBaseUrl, $intButtomNum);
|
$arrPaginator = CusteomPage02::generate($intPage, $arrPage['total'], $intLimit, $strBaseUrl, $intButtomNum);
|
||||||
|
|
||||||
|
// TODO 下面的值要处理成汉字 start
|
||||||
|
// 更新值
|
||||||
|
ConverterMovel::setVal([
|
||||||
|
'intPage' => $intPage,
|
||||||
|
'strNovelSex' => $arrSexChinese[$strGender], //汉字 男生或者女生
|
||||||
|
'strNovelCategoryName' => str_replace("小说", "", $strSearchCategory), // 小说分类名汉字 玄幻 都市 。。。 ; 注意不要带 小说 2字,tkd 会重复堆叠
|
||||||
|
'strNovelStatus' => $strSearchStatus, // 小说状态 汉字
|
||||||
|
]);
|
||||||
|
// TODO end
|
||||||
|
|
||||||
|
// $strTitle = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__));
|
||||||
|
$strTitleTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@TITLE');
|
||||||
|
$strKeywordsTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@KEYWORDS');
|
||||||
|
$strDescriptionTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@DESCRIPTION');
|
||||||
|
|
||||||
|
$strTitle = ConverterMovel::convert($strTitleTemplate);
|
||||||
|
$strKeywords = ConverterMovel::convert($strKeywordsTemplate);
|
||||||
|
$strDescription = ConverterMovel::convert($strDescriptionTemplate);
|
||||||
|
|
||||||
View::assign([
|
View::assign([
|
||||||
'arrNovel' => $arrPage['data'],
|
'arrNovel' => $arrPage['data'],
|
||||||
'strPageCode' => 'library',
|
'strPageCode' => 'library',
|
||||||
@@ -159,11 +197,14 @@ class Novel extends BaseController
|
|||||||
'strStatus' => $strStatus,
|
'strStatus' => $strStatus,
|
||||||
'intPage' => $intPage,
|
'intPage' => $intPage,
|
||||||
'intTotalPage' => $arrPage['pages'],
|
'intTotalPage' => $arrPage['pages'],
|
||||||
// TODO 返回所有分类了,应该只返回对应 性别的分类,暂时按下面的返回了,你看看要咋处理
|
// TODO 返回所有分类了,应该只返回对应 性别的分类,我暂时按下面的返回了,你看看需要改不 start
|
||||||
// 'arrCategory' => array_combine(array_values(CategoryModel::$arrCategoryPinYin), array_values(CategoryModel::$arrCategory)),
|
// 'arrCategory' => array_combine(array_values(CategoryModel::$arrCategoryPinYin), array_values(CategoryModel::$arrCategory)),
|
||||||
'arrCategoryAll' => CategoryModel::$arrCategoryAll,
|
'arrCategoryAll' => CategoryModel::$arrCategoryAll,
|
||||||
|
// TODO end
|
||||||
'arrPaginator' => $arrPaginator,
|
'arrPaginator' => $arrPaginator,
|
||||||
|
'strTitle' => $strTitle,
|
||||||
|
'strKeywords' => $strKeywords,
|
||||||
|
'strDescription' => $strDescription,
|
||||||
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -224,12 +265,30 @@ class Novel extends BaseController
|
|||||||
$intCount = 20;
|
$intCount = 20;
|
||||||
$arrNewsUpdateNovel = $NovelModel->getCommonNovelOnCache($strKey, $intLifeTime, $intCount, $intType, NULL, ['og_novel_update_time' => -1]);
|
$arrNewsUpdateNovel = $NovelModel->getCommonNovelOnCache($strKey, $intLifeTime, $intCount, $intType, NULL, ['og_novel_update_time' => -1]);
|
||||||
|
|
||||||
|
// 更新值
|
||||||
|
ConverterMovel::setVal([
|
||||||
|
'intPage' => 1,
|
||||||
|
'strNovelSex' => $strNovelChannel == 'boys' ? '男生' : '女生', //汉字 男生或者女生
|
||||||
|
]);
|
||||||
|
|
||||||
|
// $strTitle = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__));
|
||||||
|
$strTitleTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@TITLE');
|
||||||
|
$strKeywordsTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@KEYWORDS');
|
||||||
|
$strDescriptionTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@DESCRIPTION');
|
||||||
|
|
||||||
|
$strTitle = ConverterMovel::convert($strTitleTemplate);
|
||||||
|
$strKeywords = ConverterMovel::convert($strKeywordsTemplate);
|
||||||
|
$strDescription = ConverterMovel::convert($strDescriptionTemplate);
|
||||||
|
|
||||||
View::assign([
|
View::assign([
|
||||||
'arrRecommendSerializationNovel' => $arrRecommendSerializationNovel,
|
'arrRecommendSerializationNovel' => $arrRecommendSerializationNovel,
|
||||||
'arrRecommendEndNovel' => $arrRecommendEndNovel,
|
'arrRecommendEndNovel' => $arrRecommendEndNovel,
|
||||||
'arrNewsUpdateNovel' => $arrNewsUpdateNovel,
|
'arrNewsUpdateNovel' => $arrNewsUpdateNovel,
|
||||||
'arrAdBanner' => [],
|
'arrAdBanner' => [],
|
||||||
'strPageCode' => $strNovelChannel
|
'strPageCode' => $strNovelChannel,
|
||||||
|
'strTitle' => $strTitle,
|
||||||
|
'strKeywords' => $strKeywords,
|
||||||
|
'strDescription' => $strDescription,
|
||||||
]);
|
]);
|
||||||
if ($boolIsMobile) {
|
if ($boolIsMobile) {
|
||||||
return View::fetch();
|
return View::fetch();
|
||||||
@@ -372,16 +431,26 @@ class Novel extends BaseController
|
|||||||
$arrRelateveNovel = $NovelModel->getNovel(['n_id' => [
|
$arrRelateveNovel = $NovelModel->getNovel(['n_id' => [
|
||||||
'$in' => $arrRelateveNId,
|
'$in' => $arrRelateveNId,
|
||||||
]], 10);
|
]], 10);
|
||||||
// echo '<pre>';
|
|
||||||
// var_dump($arrNovel);exit;
|
|
||||||
|
|
||||||
// $strNovel = '斗罗大陆';
|
// 更新值
|
||||||
|
ConverterMovel::setVal([
|
||||||
|
'intPage' => 1,
|
||||||
|
'strNovelName' => $arrNovel['og_novel_book_name'],
|
||||||
|
'strNovelAuthor' => $arrNovel['og_novel_author'],
|
||||||
|
'strNovelCategoryName' => $arrNovel['og_novel_category'],
|
||||||
|
'strNovelSex' => '男生', // TODO 汉字 男生或者女生
|
||||||
|
'strNovelStatus' => $arrNovel['og_novel_status'],
|
||||||
|
'strNovelDescription' => $arrNovel['n_page_description'],
|
||||||
|
]);
|
||||||
|
|
||||||
// ConverterMovel::setVal("strNovelName", $strNovel);
|
$strTitleTemplate = $Request->DomainModel->getFomartSubject('NOVEL@GETNOVELINFO@TITLE');
|
||||||
|
$strKeywordsTemplate = $Request->DomainModel->getFomartSubject('NOVEL@GETNOVELINFO@KEYWORDS');
|
||||||
|
$strDescriptionTemplate = $Request->DomainModel->getFomartSubject('NOVEL@GETNOVELINFO@DESCRIPTION');
|
||||||
|
|
||||||
// $strTitle = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__));
|
$strTitle = ConverterMovel::convert($strTitleTemplate);
|
||||||
|
$strKeywords = ConverterMovel::convert($strKeywordsTemplate);
|
||||||
|
$strDescription = ConverterMovel::convert($strDescriptionTemplate);
|
||||||
|
|
||||||
// $strTitle = ConverterMovel::convert($strTitle);
|
|
||||||
|
|
||||||
View::assign([
|
View::assign([
|
||||||
'arrRelateveNovel' => $arrRelateveNovel,
|
'arrRelateveNovel' => $arrRelateveNovel,
|
||||||
@@ -390,7 +459,9 @@ class Novel extends BaseController
|
|||||||
'arrNovelClicks' => $arrNovelClicks,
|
'arrNovelClicks' => $arrNovelClicks,
|
||||||
'strFocus' => $strFocus,
|
'strFocus' => $strFocus,
|
||||||
'strPageCode' => 'boy',
|
'strPageCode' => 'boy',
|
||||||
// 'strTitle' => $strTitle,
|
'strTitle' => $strTitle,
|
||||||
|
'strKeywords' => $strKeywords,
|
||||||
|
'strDescription' => $strDescription,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if ($boolIsMobile) {
|
if ($boolIsMobile) {
|
||||||
@@ -420,7 +491,6 @@ class Novel extends BaseController
|
|||||||
// 分品拼音
|
// 分品拼音
|
||||||
$arrNovel['category_pinyin'] = CategoryModel::getPinYinByZh($arrNovel['og_novel_category']);
|
$arrNovel['category_pinyin'] = CategoryModel::getPinYinByZh($arrNovel['og_novel_category']);
|
||||||
|
|
||||||
|
|
||||||
// 最后章节
|
// 最后章节
|
||||||
$ChapterModel = new ChapterModel;
|
$ChapterModel = new ChapterModel;
|
||||||
$arrLatestChapter = $ChapterModel->getLatestChapter($intNId);
|
$arrLatestChapter = $ChapterModel->getLatestChapter($intNId);
|
||||||
@@ -452,16 +522,25 @@ class Novel extends BaseController
|
|||||||
$arrRelateveNovel = $NovelModel->getNovel(['n_id' => [
|
$arrRelateveNovel = $NovelModel->getNovel(['n_id' => [
|
||||||
'$in' => $arrRelateveNId,
|
'$in' => $arrRelateveNId,
|
||||||
]], 10);
|
]], 10);
|
||||||
// echo '<pre>';
|
|
||||||
// var_dump($arrNovel);exit;
|
|
||||||
|
|
||||||
$strNovel = '斗罗大陆';
|
// 更新值
|
||||||
|
ConverterMovel::setVal([
|
||||||
|
'intPage' => 1,
|
||||||
|
'strNovelName' => $arrNovel['og_novel_book_name'],
|
||||||
|
'strNovelAuthor' => $arrNovel['og_novel_author'],
|
||||||
|
'strNovelCategoryName' => $arrNovel['og_novel_category'],
|
||||||
|
'strNovelSex' => '男生', // TODO 汉字 男生或者女生
|
||||||
|
'strNovelStatus' => $arrNovel['og_novel_status'],
|
||||||
|
'strNovelDescription' => $arrNovel['n_page_description'],
|
||||||
|
]);
|
||||||
|
|
||||||
ConverterMovel::setVal("strNovelName", $strNovel);
|
$strTitleTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@TITLE');
|
||||||
|
$strKeywordsTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@KEYWORDS');
|
||||||
|
$strDescriptionTemplate = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__) . '@DESCRIPTION');
|
||||||
|
|
||||||
$strTitle = $Request->DomainModel->getFomartSubject(getFomartSubjectKey(__METHOD__));
|
$strTitle = ConverterMovel::convert($strTitleTemplate);
|
||||||
|
$strKeywords = ConverterMovel::convert($strKeywordsTemplate);
|
||||||
$strTitle = ConverterMovel::convert($strTitle);
|
$strDescription = ConverterMovel::convert($strDescriptionTemplate);
|
||||||
|
|
||||||
View::assign([
|
View::assign([
|
||||||
'arrRelateveNovel' => $arrRelateveNovel,
|
'arrRelateveNovel' => $arrRelateveNovel,
|
||||||
@@ -471,6 +550,8 @@ class Novel extends BaseController
|
|||||||
'strFocus' => $strFocus,
|
'strFocus' => $strFocus,
|
||||||
'strPageCode' => 'boy',
|
'strPageCode' => 'boy',
|
||||||
'strTitle' => $strTitle,
|
'strTitle' => $strTitle,
|
||||||
|
'strKeywords' => $strKeywords,
|
||||||
|
'strDescription' => $strDescription,
|
||||||
]);
|
]);
|
||||||
if ($boolIsMobile) {
|
if ($boolIsMobile) {
|
||||||
return View::fetch();
|
return View::fetch();
|
||||||
@@ -523,10 +604,26 @@ class Novel extends BaseController
|
|||||||
['id' => 8, 'name' => '小说3', 'author' => '作者3'],
|
['id' => 8, 'name' => '小说3', 'author' => '作者3'],
|
||||||
];
|
];
|
||||||
|
|
||||||
// 最新章节 取最新5章节
|
// 更新值
|
||||||
// 相邻推荐->关联的 kan 数据
|
ConverterMovel::setVal([
|
||||||
// 精品推荐->同分类随机10条数据
|
'intPage' => 1,
|
||||||
// 最新要点->取新意章节, 随机提取一部分内容 大概150字数
|
'strNovelName' => $arrNovel['og_novel_book_name'],
|
||||||
|
'strNovelAuthor' => $arrNovel['og_novel_author'],
|
||||||
|
'strNovelCategoryName' => $arrNovel['og_novel_category'],
|
||||||
|
'strNovelStatus' => $arrNovel['og_novel_status'],
|
||||||
|
'strNovelDescription' => $arrNovel['n_page_description'],
|
||||||
|
'strNovelChapterName' => $arrChapter['name'] ?? '',
|
||||||
|
'strNovelChapterSort' => $arrChapter['c_sort_num'] ?? '',
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
$strTitleTemplate = $Request->DomainModel->getFomartSubject('NOVEL@GETNOVELCHAPTER@TITLE');
|
||||||
|
$strKeywordsTemplate = $Request->DomainModel->getFomartSubject('NOVEL@GETNOVELCHAPTER@KEYWORDS');
|
||||||
|
$strDescriptionTemplate = $Request->DomainModel->getFomartSubject('NOVEL@GETNOVELCHAPTER@DESCRIPTION');
|
||||||
|
|
||||||
|
$strTitle = ConverterMovel::convert($strTitleTemplate);
|
||||||
|
$strKeywords = ConverterMovel::convert($strKeywordsTemplate);
|
||||||
|
$strDescription = ConverterMovel::convert($strDescriptionTemplate);
|
||||||
|
|
||||||
View::assign([
|
View::assign([
|
||||||
'arrNewsNovel' => $arrNewsNovel,
|
'arrNewsNovel' => $arrNewsNovel,
|
||||||
@@ -542,6 +639,9 @@ class Novel extends BaseController
|
|||||||
'intNovelId' => $intNId,
|
'intNovelId' => $intNId,
|
||||||
'intChapterSort' => $arrChapter['c_sort_num'] ?? 0,
|
'intChapterSort' => $arrChapter['c_sort_num'] ?? 0,
|
||||||
'intChapterPage' => $arrChapter['c_page'] ?? 0,
|
'intChapterPage' => $arrChapter['c_page'] ?? 0,
|
||||||
|
'strTitle' => $strTitle,
|
||||||
|
'strKeywords' => $strKeywords,
|
||||||
|
'strDescription' => $strDescription,
|
||||||
]);
|
]);
|
||||||
if ($boolIsMobile) {
|
if ($boolIsMobile) {
|
||||||
return View::fetch('getNovelChapter');
|
return View::fetch('getNovelChapter');
|
||||||
@@ -583,9 +683,28 @@ class Novel extends BaseController
|
|||||||
$arrNextChapter = $ChapterModel->getNextChapter($arrChapter['n_id'], $arrChapter['c_sort_num'], $arrChapter['c_page']);
|
$arrNextChapter = $ChapterModel->getNextChapter($arrChapter['n_id'], $arrChapter['c_sort_num'], $arrChapter['c_page']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$arrCategoryAll = CategoryModel::$arrCategoryAll;
|
$arrCategoryAll = CategoryModel::$arrCategoryAll;
|
||||||
|
|
||||||
|
// 更新值
|
||||||
|
ConverterMovel::setVal([
|
||||||
|
'intPage' => 1,
|
||||||
|
'strNovelName' => $arrNovel['og_novel_book_name'],
|
||||||
|
'strNovelAuthor' => $arrNovel['og_novel_author'],
|
||||||
|
'strNovelCategoryName' => $arrNovel['og_novel_category'],
|
||||||
|
'strNovelStatus' => $arrNovel['og_novel_status'],
|
||||||
|
'strNovelDescription' => $arrNovel['n_page_description'],
|
||||||
|
'strNovelChapterName' => $arrChapter['name'],
|
||||||
|
'strNovelChapterSort' => $arrChapter['c_sort_num'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$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([
|
View::assign([
|
||||||
'arrNovel' => $arrNovel,
|
'arrNovel' => $arrNovel,
|
||||||
'arrCategoryAll' => $arrCategoryAll,
|
'arrCategoryAll' => $arrCategoryAll,
|
||||||
@@ -596,6 +715,9 @@ class Novel extends BaseController
|
|||||||
'intNovelId' => $intNovelId,
|
'intNovelId' => $intNovelId,
|
||||||
'intChapterSort' => $intChapterSort,
|
'intChapterSort' => $intChapterSort,
|
||||||
'intChapterPage' => $intChapterPage,
|
'intChapterPage' => $intChapterPage,
|
||||||
|
'strTitle' => $strTitle,
|
||||||
|
'strKeywords' => $strKeywords,
|
||||||
|
'strDescription' => $strDescription,
|
||||||
]);
|
]);
|
||||||
if ($boolIsMobile) {
|
if ($boolIsMobile) {
|
||||||
return View::fetch();
|
return View::fetch();
|
||||||
@@ -646,6 +768,25 @@ class Novel extends BaseController
|
|||||||
$strBaseUrl = sprintf('/pc/xiaoshuo/%s-%s/mulu/%s/{page}', $arrNovel['og_novel_pin_yin'], $intNId, $strOrder);
|
$strBaseUrl = sprintf('/pc/xiaoshuo/%s-%s/mulu/%s/{page}', $arrNovel['og_novel_pin_yin'], $intNId, $strOrder);
|
||||||
$arrPaginator = CusteomPage02::generate($intPage, $arrPage['total'], $intLimit, $strBaseUrl, $intButtomNum);
|
$arrPaginator = CusteomPage02::generate($intPage, $arrPage['total'], $intLimit, $strBaseUrl, $intButtomNum);
|
||||||
|
|
||||||
|
// 更新值
|
||||||
|
ConverterMovel::setVal([
|
||||||
|
'intPage' => $intPage,
|
||||||
|
'strNovelSex' => '男生', // TODO 汉字 男生或者女生
|
||||||
|
'strNovelName' => $arrNovel['og_novel_book_name'],
|
||||||
|
'strNovelAuthor' => $arrNovel['og_novel_author'],
|
||||||
|
'strNovelCategoryName' => $arrNovel['og_novel_category'],
|
||||||
|
'strNovelStatus' => $arrNovel['og_novel_status'],
|
||||||
|
'strNovelDescription' => $arrNovel['n_page_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([
|
View::assign([
|
||||||
'arrNovel' => $arrNovel,
|
'arrNovel' => $arrNovel,
|
||||||
'arrPage' => $arrPage,
|
'arrPage' => $arrPage,
|
||||||
@@ -655,6 +796,9 @@ class Novel extends BaseController
|
|||||||
'strOrder' => $strOrder,
|
'strOrder' => $strOrder,
|
||||||
'strPageCode' => 'chapters',
|
'strPageCode' => 'chapters',
|
||||||
'intLimit' => $intLimit,
|
'intLimit' => $intLimit,
|
||||||
|
'strTitle' => $strTitle,
|
||||||
|
'strKeywords' => $strKeywords,
|
||||||
|
'strDescription' => $strDescription,
|
||||||
]);
|
]);
|
||||||
if ($boolIsMobile) {
|
if ($boolIsMobile) {
|
||||||
return View::fetch();
|
return View::fetch();
|
||||||
@@ -673,13 +817,13 @@ class Novel extends BaseController
|
|||||||
{
|
{
|
||||||
$boolIsMobile = $Request->param('boolIsMobile');
|
$boolIsMobile = $Request->param('boolIsMobile');
|
||||||
|
|
||||||
$strKeywords = (string)$Request->get('keyword');
|
$strSearchKeywords = (string)$Request->get('keyword');
|
||||||
$intPage = (int)$Request->get('page', 1);
|
$intPage = (int)$Request->get('page', 1);
|
||||||
$intLimit = 20;
|
$intLimit = 20;
|
||||||
|
|
||||||
$strKey = sprintf('%s:PC:Novel:Search:%s:Page:%s:Limit:%s', $Request->DomainModel->d_domain, $strKeywords, $intPage, $intLimit);
|
$strKey = sprintf('%s:PC:Novel:Search:%s:Page:%s:Limit:%s', $Request->DomainModel->d_domain, $strSearchKeywords, $intPage, $intLimit);
|
||||||
|
|
||||||
if (empty($strKeywords)) {
|
if (empty($strSearchKeywords)) {
|
||||||
return response('请输入搜索的关键字', 400);
|
return response('请输入搜索的关键字', 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -687,30 +831,49 @@ class Novel extends BaseController
|
|||||||
|
|
||||||
$arrFilter = [
|
$arrFilter = [
|
||||||
'$or' => [
|
'$or' => [
|
||||||
['og_novel_book_name' => ['$regex' => $strKeywords, '$options' => 'i']],
|
['og_novel_book_name' => ['$regex' => $strSearchKeywords, '$options' => 'i']],
|
||||||
['og_novel_author' => ['$regex' => $strKeywords, '$options' => 'i']],
|
['og_novel_author' => ['$regex' => $strSearchKeywords, '$options' => 'i']],
|
||||||
['og_novel_category' => ['$regex' => $strKeywords, '$options' => 'i']],
|
['og_novel_category' => ['$regex' => $strSearchKeywords, '$options' => 'i']],
|
||||||
['og_description' => ['$regex' => $strKeywords, '$options' => 'i']],
|
['og_description' => ['$regex' => $strSearchKeywords, '$options' => 'i']],
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
$arrPage = $NovelModel->getCommonPageOnCache($arrFilter, $intPage, $intLimit, [], $strKey);
|
$arrPage = $NovelModel->getCommonPageOnCache($arrFilter, $intPage, $intLimit, [], $strKey);
|
||||||
|
|
||||||
$intButtomNum = 10;
|
$intButtomNum = 10;
|
||||||
|
|
||||||
$strBaseUrl = sprintf('/search.html?keyword=%s&page={page}', $strKeywords);
|
$strBaseUrl = sprintf('/search.html?keyword=%s&page={page}', $strSearchKeywords);
|
||||||
$arrPaginator = CusteomPage02::generate($intPage, $arrPage['total'], $intLimit, $strBaseUrl, $intButtomNum);
|
$arrPaginator = CusteomPage02::generate($intPage, $arrPage['total'], $intLimit, $strBaseUrl, $intButtomNum);
|
||||||
|
|
||||||
|
// 更新值
|
||||||
|
ConverterMovel::setVal([
|
||||||
|
'intPage' => $intPage,
|
||||||
|
'strNovelSex' => '男生', // TODO 汉字 男生或者女生 // 取搜所的第一个小说的男生或者女生
|
||||||
|
'strSearchKeywords' => $strSearchKeywords,
|
||||||
|
'strNovelCategoryName' => '玄幻', // TODO 取搜所的第一个小说的分类 汉字(不带小说2字)
|
||||||
|
'strNovelStatus' => '完结', // TODO 取搜所的第一个小说的状态
|
||||||
|
]);
|
||||||
|
|
||||||
|
$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([
|
View::assign([
|
||||||
'arrPage' => $arrPage,
|
'arrPage' => $arrPage,
|
||||||
'arrPaginator' => $arrPaginator,
|
'arrPaginator' => $arrPaginator,
|
||||||
'strKeywords' => $strKeywords,
|
'strSearchKeywords' => $strSearchKeywords,
|
||||||
'intPage' => $intPage,
|
'intPage' => $intPage,
|
||||||
'intTotalPage' => $arrPage['pages'],
|
'intTotalPage' => $arrPage['pages'],
|
||||||
'strPageCode' => 'search'
|
'strPageCode' => 'search',
|
||||||
|
'strTitle' => $strTitle,
|
||||||
|
'strKeywords' => $strKeywords,
|
||||||
|
'strDescription' => $strDescription,
|
||||||
]);
|
]);
|
||||||
// echo $strKeywords;exit;
|
|
||||||
if ($boolIsMobile) {
|
if ($boolIsMobile) {
|
||||||
return View::fetch();
|
return View::fetch();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="baseH5" /}
|
{extend name="baseH5" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
{block name="logo-html"}
|
{block name="logo-html"}
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="baseH5" /}
|
{extend name="baseH5" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
{block name="logo-html"}
|
{block name="logo-html"}
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="baseH5" /}
|
{extend name="baseH5" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
{block name="logo-html"}
|
{block name="logo-html"}
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="baseH5" /}
|
{extend name="baseH5" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
{block name="logo-html"}
|
{block name="logo-html"}
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="baseH5" /}
|
{extend name="baseH5" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
{block name="logo-html"}
|
{block name="logo-html"}
|
||||||
|
|||||||
@@ -2,11 +2,15 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
|
<meta name="robots" content="index, follow" />
|
||||||
<meta name="keywords" content="狂雨小说">
|
<meta http-equiv="Cache-Control" content="no-transform, max-age=3600" />
|
||||||
<meta name="description" content="狂雨小说">
|
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no" />
|
||||||
<title>01 天龙问世_我真是一条龙-狂雨小说</title>
|
<meta name="keywords" content="{$strKeywords??''}">
|
||||||
|
<meta name="description" content="{$strDescription??''}">
|
||||||
|
<title>{$strTitle??''}</title>
|
||||||
|
<link rel="icon" href="/template/kuangyu/public/img/favicon.ico" type="image/x-icon" />
|
||||||
|
|
||||||
<link rel="stylesheet" href="/template/kuangyu/reader/wap/css/style.css" type="text/css">
|
<link rel="stylesheet" href="/template/kuangyu/reader/wap/css/style.css" type="text/css">
|
||||||
<link rel="stylesheet" href="//at.alicdn.com/t/font_934628_byagqjb6vae.css" type="text/css">
|
<link rel="stylesheet" href="//at.alicdn.com/t/font_934628_byagqjb6vae.css" type="text/css">
|
||||||
<link rel="stylesheet" href="/public/layer/need/layer.css" type="text/css">
|
<link rel="stylesheet" href="/public/layer/need/layer.css" type="text/css">
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="baseH5" /}
|
{extend name="baseH5" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
{block name="logo-html"}
|
{block name="logo-html"}
|
||||||
@@ -43,18 +60,11 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="attentions">
|
<div class="attentions">
|
||||||
<div class="page_num"><a href="/xiaoshuo/gui-zu-nong-min-106/mulu/zheng/1" class="z">上一页</a><select
|
<!-- 目录下拉分页-->
|
||||||
onchange="self.location.href=options[selectedIndex].value">
|
{include file="Public/allChapterPage" /}
|
||||||
<option value="/xiaoshuo/gui-zu-nong-min-106/mulu/zheng/1">第1-100章</option>
|
|
||||||
<option selected="selected" value="/index/47010/1/">第101-200章</option>
|
|
||||||
<option value="/xiaoshuo/gui-zu-nong-min-106/mulu/zheng/2">第201-300章</option>
|
|
||||||
<option value="/xiaoshuo/gui-zu-nong-min-106/mulu/zheng/3">第301-400章</option>
|
|
||||||
<option value="/xiaoshuo/gui-zu-nong-min-106/mulu/zheng/4">第401-500章</option>
|
|
||||||
</select><a href="/xiaoshuo/gui-zu-nong-min-106/mulu/zheng/2" class="y">下一页</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<ul class="clearfix">
|
<ul class="clearfix">
|
||||||
{volist name="arrChapter" id="Chapter" key="key"}
|
{volist name="arrPage.data" id="Chapter" key="key"}
|
||||||
<li>
|
<li>
|
||||||
<a href="/xiaoshuo/{$arrNovel.og_novel_pin_yin}-{$arrNovel.n_id}/zhang-{$Chapter.c_sort_num}"
|
<a href="/xiaoshuo/{$arrNovel.og_novel_pin_yin}-{$arrNovel.n_id}/zhang-{$Chapter.c_sort_num}"
|
||||||
title="{$Chapter.name}">{$Chapter.name}</a>
|
title="{$Chapter.name}">{$Chapter.name}</a>
|
||||||
@@ -62,15 +72,9 @@
|
|||||||
{/volist}
|
{/volist}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="page_num"><a href="/xiaoshuo/gui-zu-nong-min-106/mulu/zheng/1" class="z">上一页</a><select
|
|
||||||
onchange="self.location.href=options[selectedIndex].value">
|
<!-- 目录下拉分页-->
|
||||||
<option value="/xiaoshuo/gui-zu-nong-min-106/mulu/zheng/1">第1-100章</option>
|
{include file="Public/allChapterPage" /}
|
||||||
<option selected="selected" value="/index/47010/1/">第101-200章</option>
|
|
||||||
<option value="/xiaoshuo/gui-zu-nong-min-106/mulu/zheng/2">第201-300章</option>
|
|
||||||
<option value="/xiaoshuo/gui-zu-nong-min-106/mulu/zheng/3">第301-400章</option>
|
|
||||||
<option value="/xiaoshuo/gui-zu-nong-min-106/mulu/zheng/4">第401-500章</option>
|
|
||||||
</select><a href="/xiaoshuo/gui-zu-nong-min-106/mulu/zheng/2" class="y">下一页</a>
|
|
||||||
</div>
|
|
||||||
<div class="chapters-more">
|
<div class="chapters-more">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="baseH5" /}
|
{extend name="baseH5" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
{block name="logo-html"}
|
{block name="logo-html"}
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="baseH5" /}
|
{extend name="baseH5" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
{block name="logo-html"}
|
{block name="logo-html"}
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="baseH5" /}
|
{extend name="baseH5" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
{block name="logo-html"}
|
{block name="logo-html"}
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="basePcUser" /}
|
{extend name="basePcUser" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="basePcUser" /}
|
{extend name="basePcUser" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="basePcUser" /}
|
{extend name="basePcUser" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="basePc" /}
|
{extend name="basePc" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="basePc" /}
|
{extend name="basePc" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="basePc" /}
|
{extend name="basePc" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
{block name="head-css"}
|
{block name="head-css"}
|
||||||
<link rel="canonical" href='{Request->DomainModel->d_domain}/{site:nurl n_id="$arrNovel[n_id]" n_py="$arrNovel[og_novel_pin_yin]" /}'>
|
<link rel="canonical" href='{Request->DomainModel->d_domain}/{site:nurl n_id="$arrNovel[n_id]" n_py="$arrNovel[og_novel_pin_yin]" /}'>
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="basePc" /}
|
{extend name="basePc" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
{block name="head-css"}
|
{block name="head-css"}
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="basePc" /}
|
{extend name="basePc" /}
|
||||||
{block name='nav-active-class'}boy{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
{block name="head-css"}
|
{block name="head-css"}
|
||||||
|
|
||||||
|
|||||||
@@ -2,14 +2,16 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
|
<meta name="robots" content="index, follow" />
|
||||||
<meta name="keywords" content="狂雨小说">
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<meta name="description" content="狂雨小说">
|
<meta name="keywords" content="{$strKeywords??''}">
|
||||||
<title>01 天龙问世_我真是一条龙-狂雨小说</title>
|
<meta name="description" content="{$strDescription??''}">
|
||||||
|
<title>{$strTitle??''}</title>
|
||||||
|
<link rel="icon" href="/template/kuangyu/public/img/favicon.ico" type="image/x-icon" />
|
||||||
<link rel="stylesheet" href="/template/kuangyu/reader/web/css/style.css" type="text/css">
|
<link rel="stylesheet" href="/template/kuangyu/reader/web/css/style.css" type="text/css">
|
||||||
<link rel="stylesheet" href="/public/layer/need/layer.css" type="text/css">
|
<link rel="stylesheet" href="/public/layer/need/layer.css" type="text/css">
|
||||||
{block name="head-css"}
|
{block name="head-css"}
|
||||||
<link rel="canonical" href='{Request->DomainModel->d_domain}/pc/xiaoshuo/{$arrNovel.og_novel_pin_yin}-{$arrNovel.n_id}/zhang-{$arrChapter.c_sort_num}'>
|
<link rel="canonical" href='{Request->DomainModel->d_domain}/pc/xiaoshuo/{$arrNovel.og_novel_pin_yin}-{$arrNovel.n_id}/zhang-{$arrChapter.c_sort_num ?? 1}'>
|
||||||
{/block}
|
{/block}
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@@ -139,19 +141,21 @@
|
|||||||
data-info="0|-1|486ef2abee55d|0">
|
data-info="0|-1|486ef2abee55d|0">
|
||||||
<div class="main-text-wrap">
|
<div class="main-text-wrap">
|
||||||
<div class="text-head">
|
<div class="text-head">
|
||||||
<h3 class="j_chapterName">{$arrChapter.name}</h3>
|
<h3 class="j_chapterName">{$arrChapter.name ?? ''}</h3>
|
||||||
<div class="text-info cf">
|
<div class="text-info cf">
|
||||||
<div class="info fl">
|
<div class="info fl">
|
||||||
<a href='/pc{site:nurl n_id="$arrNovel[n_id]" n_py="$arrNovel[og_novel_pin_yin]" /}' target="_blank"> <em class="iconfont"></em> {$arrNovel.og_novel_book_name}</a>
|
<a href='/pc{site:nurl n_id="$arrNovel[n_id]" n_py="$arrNovel[og_novel_pin_yin]" /}' target="_blank"> <em class="iconfont"></em> {$arrNovel.og_novel_book_name}</a>
|
||||||
<a href="javascript:"
|
<a href="javascript:"
|
||||||
target="_blank"> <em class="iconfont"></em> {$arrNovel.og_novel_author}</a>
|
target="_blank"> <em class="iconfont"></em> {$arrNovel.og_novel_author}</a>
|
||||||
<i><em class="iconfont"></em><span class="j_chapterWordCut">2000</span>字</i>
|
<i><em class="iconfont"></em><span class="j_chapterWordCut">2000</span>字</i>
|
||||||
<i><em class="iconfont"></em><span class="j_updateTime">{$arrChapter.created_at}</span></i>
|
<i><em class="iconfont"></em><span class="j_updateTime">{$arrChapter.created_at ?? ''}</span></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="read-content j_readContent">
|
<div class="read-content j_readContent">
|
||||||
{$arrChapter.content|raw}
|
{if $arrChapter && $arrChapter.content}
|
||||||
|
{$arrChapter.content|raw }
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -170,14 +174,14 @@
|
|||||||
<span></span>
|
<span></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="chapter-control dib-wrap">
|
<div class="chapter-control dib-wrap">
|
||||||
{if $arrChapter.c_sort_num == 1}
|
{if $arrChapter && $arrChapter.c_sort_num && $arrChapter.c_sort_num == 1}
|
||||||
<a id="j_chapterPrev" href="javascript:void(0);">上一章</a>
|
<a id="j_chapterPrev" href="javascript:void(0);">上一章</a>
|
||||||
{else}
|
{else}
|
||||||
<a id="j_chapterPrev" href="/pc/xiaoshuo/{$arrNovel.og_novel_pin_yin}-{$arrNovel.n_id}/zhang-{$arrPreChapter.c_sort_num}">上一章</a>
|
<a id="j_chapterPrev" href="/pc/xiaoshuo/{$arrNovel.og_novel_pin_yin}-{$arrNovel.n_id}/zhang-{$arrPreChapter.c_sort_num ?? 1}">上一章</a>
|
||||||
{/if}
|
{/if}
|
||||||
<span>|</span>
|
<span>|</span>
|
||||||
{if $arrNextChapter && $arrNextChapter.c_sort_num}
|
{if $arrNextChapter && $arrNextChapter.c_sort_num}
|
||||||
<a id="j_chapterNext" href="/pc/xiaoshuo/{$arrNovel.og_novel_pin_yin}-{$arrNovel.n_id}/zhang-{$arrNextChapter.c_sort_num}">下一章</a>
|
<a id="j_chapterNext" href="/pc/xiaoshuo/{$arrNovel.og_novel_pin_yin}-{$arrNovel.n_id}/zhang-{$arrNextChapter.c_sort_num ?? 1}">下一章</a>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="basePc" /}
|
{extend name="basePc" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-css"}
|
{block name="head-css"}
|
||||||
<link rel="canonical" href='{Request->DomainModel->d_domain}/xiaoshuo/$arrNovel.og_novel_pin_yin-$arrNovel.n_id/mulu/zheng" /}'>
|
<link rel="canonical" href='{Request->DomainModel->d_domain}/xiaoshuo/$arrNovel.og_novel_pin_yin-$arrNovel.n_id/mulu/zheng" /}'>
|
||||||
{/block}
|
{/block}
|
||||||
|
|||||||
@@ -1,7 +1,23 @@
|
|||||||
{extend name="basePc" /}
|
{extend name="basePc" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
{block name="head-js"}{/block}
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-css"}
|
{block name="head-css"}
|
||||||
<link rel="canonical" href='{Request->DomainModel->d_domain}/{site:nurl n_id="$arrNovel[n_id]" n_py="$arrNovel[og_novel_pin_yin]" /}'>
|
<link rel="canonical" href='{Request->DomainModel->d_domain}/{site:nurl n_id="$arrNovel[n_id]" n_py="$arrNovel[og_novel_pin_yin]" /}'>
|
||||||
{/block}
|
{/block}
|
||||||
@@ -132,7 +148,7 @@
|
|||||||
<div class="pl_con">
|
<div class="pl_con">
|
||||||
{volist name="arrNovel.n_forge_novel" id="ForgeNovel" key="key"}
|
{volist name="arrNovel.n_forge_novel" id="ForgeNovel" key="key"}
|
||||||
<!-- n_forge_id -->
|
<!-- n_forge_id -->
|
||||||
<a href='/pc/kan/{$arrNovel.og_novel_pin_yin}-{$arrNovel.n_id}-{$ForgeNovel.n_forge_id}' target="_blank" class="red">{$ForgeNovel.n_forge_title}</a>
|
<a href='/pc/kan-xiaoshuo/{$arrNovel.og_novel_pin_yin}-{$arrNovel.n_id}-{$ForgeNovel.n_forge_id}' target="_blank" class="red">{$ForgeNovel.n_forge_title}</a>
|
||||||
{/volist}
|
{/volist}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,24 @@
|
|||||||
{extend name="basePc" /}
|
{extend name="basePc" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
{block name="head-css"}
|
{block name="head-css"}
|
||||||
<link rel="canonical" href="{Request->DomainModel->d_domain}/paihang/all">
|
<link rel="canonical" href="{Request->DomainModel->d_domain}/paihang/all">
|
||||||
{/block}
|
{/block}
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="basePc" /}
|
{extend name="basePc" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
|
|
||||||
@@ -10,7 +27,7 @@
|
|||||||
<div class="find">
|
<div class="find">
|
||||||
|
|
||||||
<div class="fi_t">
|
<div class="fi_t">
|
||||||
<div class="result">搜索<span style="color:red">“{$strKeywords}”</span>相关结果共有 <span style="color:red">{$arrPage.total}</span> 部小说</div>
|
<div class="result">搜索<span style="color:red">“{$strSearchKeywords}”</span>相关结果共有 <span style="color:red">{$arrPage.total}</span> 部小说</div>
|
||||||
<!-- <div class="boFi">
|
<!-- <div class="boFi">
|
||||||
<span>{$strKeywords}<s></s></span>
|
<span>{$strKeywords}<s></s></span>
|
||||||
<input type="text" class="search-val" url="/search.html" name="search_keyword" value="1"
|
<input type="text" class="search-val" url="/search.html" name="search_keyword" value="1"
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
{extend name="basePcUser" /}
|
{extend name="basePcUser" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,26 @@
|
|||||||
{extend name="basePc" /}
|
{extend name="basePc" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
{/block}
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
<link rel="canonical" href="/" />
|
||||||
|
|
||||||
{block name="main"}
|
{block name="main"}
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
|||||||
33
code/app/home/view/kuangyu/Public/allChapterPage.html
Normal file
33
code/app/home/view/kuangyu/Public/allChapterPage.html
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{if !empty($arrPaginator)}
|
||||||
|
<div class="page_num">
|
||||||
|
{volist name="arrPaginator" id="item"}
|
||||||
|
{eq name="item.type" value="prev"}
|
||||||
|
<a href="{$item.url ?: '#'}"
|
||||||
|
class="z {$item.disabled ? 'disabled' : ''}">
|
||||||
|
{$item.label}
|
||||||
|
</a>
|
||||||
|
{/eq}
|
||||||
|
{/volist}
|
||||||
|
|
||||||
|
<select onchange="self.location.href=options[selectedIndex].value">
|
||||||
|
{volist name="arrPaginator" id="item"}
|
||||||
|
{eq name="item.type" value="page"}
|
||||||
|
<?php $start = ($item['label'] - 1) * $intLimit + 1; ?>
|
||||||
|
<?php $end = $item['label'] * $intLimit; ?>
|
||||||
|
<option value="{$item.url}" {$item.current ? 'selected' : ''}>
|
||||||
|
第{$start}-{$end}章
|
||||||
|
</option>
|
||||||
|
{/eq}
|
||||||
|
{/volist}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
{volist name="arrPaginator" id="item"}
|
||||||
|
{eq name="item.type" value="next"}
|
||||||
|
<a href="{$item.url ?: '#'}"
|
||||||
|
class="y {$item.disabled ? 'disabled' : ''}">
|
||||||
|
{$item.label}
|
||||||
|
</a>
|
||||||
|
{/eq}
|
||||||
|
{/volist}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="baseH5User" /}
|
{extend name="baseH5User" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
{block name="head-name"}我的书架{/block}
|
{block name="head-name"}我的书架{/block}
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="baseH5User" /}
|
{extend name="baseH5User" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
{block name="head-name"}最近阅读{/block}
|
{block name="head-name"}最近阅读{/block}
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
{extend name="baseH5User" /}
|
{extend name="baseH5User" /}
|
||||||
{block name='nav-active-class'}home{/block}
|
{block name="title"}{$strTitle??''}{/block}
|
||||||
{block name="title"}{/block}
|
{block name="keywords"}{$strKeywords??''}{/block}
|
||||||
|
{block name="description"}{$strDescription??''}{/block}
|
||||||
|
{block name="head"}
|
||||||
|
<!-- 社交媒体标签 -->
|
||||||
|
<meta property="og:title" content="{$strTitle??''}" />
|
||||||
|
<meta property="og:description" content="{$strDescription??''}" />
|
||||||
|
<meta property="og:url" content="{Request->DomainModel->d_domain}" />
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<!-- 结构化数据 -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "NewsArticle",
|
||||||
|
"headline": "{$strTitle??''}",
|
||||||
|
"description": "{$strDescription??''}",
|
||||||
|
"datePublished": "2025-04-05"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
|
|
||||||
{block name="head-name"}用户中心{/block}
|
{block name="head-name"}用户中心{/block}
|
||||||
|
|||||||
@@ -3,16 +3,23 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta http-equiv="Cache-Control" content="no-transform" />
|
<meta name="robots" content="index, follow" />
|
||||||
<meta http-equiv="Cache-Control" content="no-siteapp" />
|
<meta http-equiv="Cache-Control" content="no-transform, max-age=3600" />
|
||||||
<title>狂雨小说</title>
|
|
||||||
<meta name="keywords" content="狂雨小说" />
|
|
||||||
<meta name="description" content="狂雨小说" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no" />
|
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no" />
|
||||||
<link rel="stylesheet" href="/template/kuangyu/home/new_wap/css/style.css" />
|
<title>{block name="title"}{/block}</title>
|
||||||
|
<meta name="description" content='{block name="keywords"}{/block}'>
|
||||||
|
<meta name="description" content='{block name="description"}{/block}'>
|
||||||
|
<link rel="icon" href="/template/kuangyu/public/img/favicon.ico" type="image/x-icon" />
|
||||||
|
|
||||||
|
<link rel="preload" href="/template/kuangyu/home/new_wap/css/style.css" as="style" onload="this.rel='stylesheet'" />
|
||||||
|
<link rel="stylesheet" href="/template/kuangyu/home/new_wap/css/style.css" type="text/css">
|
||||||
|
<link rel="preload" href="/template/kuangyu/public/css/common.css" as="style" onload="this.rel='stylesheet'" />
|
||||||
<link rel="stylesheet" href="/template/kuangyu/public/css/common.css" type="text/css">
|
<link rel="stylesheet" href="/template/kuangyu/public/css/common.css" type="text/css">
|
||||||
<link rel="stylesheet" type="text/css" href="/template/kuangyu/public/css/mulu.css">
|
<link rel="preload" href="/template/kuangyu/public/css/mulu.css" as="style" onload="this.rel='stylesheet'" />
|
||||||
|
<link rel="stylesheet" href="/template/kuangyu/public/css/mulu.css" type="text/css">
|
||||||
<link rel="stylesheet" href="/public/layer/need/layer.css" />
|
<link rel="stylesheet" href="/public/layer/need/layer.css" />
|
||||||
|
|
||||||
|
{block name="head"}{/block}
|
||||||
{block name="head-css"}{/block}
|
{block name="head-css"}{/block}
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
</head>
|
</head>
|
||||||
@@ -98,6 +105,12 @@
|
|||||||
<script src="/template/kuangyu/public/js/common.js"></script>
|
<script src="/template/kuangyu/public/js/common.js"></script>
|
||||||
|
|
||||||
{block name="footer-js"}{/block}
|
{block name="footer-js"}{/block}
|
||||||
|
|
||||||
|
<!-- 全局统计 -->
|
||||||
|
{site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
|
||||||
|
|
||||||
|
<!-- TODO 站点统计 这个无法渲染 -->
|
||||||
|
{Request->DomainModel->d_statis}
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -1,13 +1,19 @@
|
|||||||
<html data-dpr="1" style="font-size: 39px;">
|
<html data-dpr="1" style="font-size: 39px;">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport"
|
<meta name="robots" content="index, follow" />
|
||||||
content="width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
|
<meta http-equiv="Cache-Control" content="no-transform, max-age=3600" />
|
||||||
<title>狂雨小说</title>
|
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no" />
|
||||||
<meta name="format-detection" content="telephone=no">
|
<meta name="keywords" content="{$strKeywords??''}">
|
||||||
|
<meta name="description" content="{$strDescription??''}">
|
||||||
|
<title>{$strTitle??''}</title>
|
||||||
|
<link rel="icon" href="/template/kuangyu/public/img/favicon.ico" type="image/x-icon" />
|
||||||
<link rel="stylesheet" href="/template/kuangyu/user/wap/css/style.css">
|
<link rel="stylesheet" href="/template/kuangyu/user/wap/css/style.css">
|
||||||
<script type="text/javascript" src="/template/kuangyu/user/wap/js/flexible.min.js"></script>
|
<script type="text/javascript" src="/template/kuangyu/user/wap/js/flexible.min.js"></script>
|
||||||
|
{block name="head"}{/block}
|
||||||
|
{block name="head-css"}{/block}
|
||||||
|
{block name="head-js"}{/block}
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body style="font-size: 12px;">
|
<body style="font-size: 12px;">
|
||||||
@@ -18,7 +24,7 @@
|
|||||||
<div class="app_header_back"></div>
|
<div class="app_header_back"></div>
|
||||||
<div class="app_header_h1">
|
<div class="app_header_h1">
|
||||||
{block name="head-name"}{/block}
|
{block name="head-name"}{/block}
|
||||||
<a href="/user.html"> <i class="shujiaIco"></i>
|
<a href="/user"> <i class="shujiaIco"></i>
|
||||||
</a> <i class="moreIco"></i>
|
</a> <i class="moreIco"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -28,13 +34,13 @@
|
|||||||
<a href="/">首页</a>
|
<a href="/">首页</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="icon2">
|
<li class="icon2">
|
||||||
<a href="/shuku.html">书库</a>
|
<a href="/shuku">书库</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="icon3">
|
<li class="icon3">
|
||||||
<a href="/bookshelf.html">书架</a>
|
<a href="/bookshelf">书架</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="icon4">
|
<li class="icon4">
|
||||||
<a href="/user.html">个人中心</a>
|
<a href="/user">个人中心</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -45,6 +51,12 @@
|
|||||||
<script src="/public/jquery/jquery-3.7.1.min.js"></script>
|
<script src="/public/jquery/jquery-3.7.1.min.js"></script>
|
||||||
<script type="text/javascript" src="/template/kuangyu/user/wap/js/user.js"></script>
|
<script type="text/javascript" src="/template/kuangyu/user/wap/js/user.js"></script>
|
||||||
<script src="/template/kuangyu/public/js/common.js"></script>
|
<script src="/template/kuangyu/public/js/common.js"></script>
|
||||||
|
|
||||||
|
<!-- 全局统计 -->
|
||||||
|
{site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
|
||||||
|
|
||||||
|
<!-- TODO 站点统计 这个无法渲染 -->
|
||||||
|
{Request->DomainModel->d_statis}
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -3,14 +3,22 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
|
<meta name="robots" content="index, follow" />
|
||||||
<meta name="keywords" content="狂雨小说">
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<meta name="description" content="狂雨小说">
|
<title>{block name="title"}{/block}</title>
|
||||||
<title>{$strTitle??''}</title>
|
<meta name="description" content='{block name="keywords"}{/block}'>
|
||||||
|
<meta name="description" content='{block name="description"}{/block}'>
|
||||||
|
<link rel="icon" href="/template/kuangyu/public/img/favicon.ico" type="image/x-icon" />
|
||||||
|
|
||||||
|
<link rel="preload" href="/template/kuangyu/home/bai_web/css/style.css" as="style" onload="this.rel='stylesheet'" />
|
||||||
<link rel="stylesheet" href="/template/kuangyu/home/bai_web/css/style.css" type="text/css">
|
<link rel="stylesheet" href="/template/kuangyu/home/bai_web/css/style.css" type="text/css">
|
||||||
|
<link rel="preload" href="/template/kuangyu/public/css/common.css" as="style" onload="this.rel='stylesheet'" />
|
||||||
<link rel="stylesheet" href="/template/kuangyu/public/css/common.css" type="text/css">
|
<link rel="stylesheet" href="/template/kuangyu/public/css/common.css" type="text/css">
|
||||||
<link rel="stylesheet" type="text/css" href="/template/kuangyu/public/css/mulu.css">
|
<link rel="preload" href="/template/kuangyu/public/css/mulu.css" as="style" onload="this.rel='stylesheet'" />
|
||||||
|
<link rel="stylesheet" href="/template/kuangyu/public/css/mulu.css" type="text/css">
|
||||||
<link rel="stylesheet" href="/public/layer/need/layer.css" type="text/css">
|
<link rel="stylesheet" href="/public/layer/need/layer.css" type="text/css">
|
||||||
|
|
||||||
|
{block name="head"}{/block}
|
||||||
{block name="head-css"}{/block}
|
{block name="head-css"}{/block}
|
||||||
{block name="head-js"}{/block}
|
{block name="head-js"}{/block}
|
||||||
</head>
|
</head>
|
||||||
@@ -74,6 +82,12 @@
|
|||||||
|
|
||||||
{block name="footer-js"}{/block}
|
{block name="footer-js"}{/block}
|
||||||
|
|
||||||
|
<!-- 全局统计 -->
|
||||||
|
{site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
|
||||||
|
|
||||||
|
<!-- TODO 站点统计 这个无法渲染 -->
|
||||||
|
{Request->DomainModel->d_statis}
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -2,35 +2,42 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
|
<meta name="robots" content="index, follow" />
|
||||||
<title>狂雨小说</title>
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<meta name="keywords" content="{$strKeywords??''}">
|
||||||
|
<meta name="description" content="{$strDescription??''}">
|
||||||
|
<title>{$strTitle??''}</title>
|
||||||
|
<link rel="icon" href="/template/kuangyu/public/img/favicon.ico" type="image/x-icon" />
|
||||||
<link href="/template/kuangyu/user/web/css/user.css" rel="stylesheet">
|
<link href="/template/kuangyu/user/web/css/user.css" rel="stylesheet">
|
||||||
<link rel="stylesheet" href="/template/kuangyu/public/css/common.css" type="text/css">
|
<link rel="stylesheet" href="/template/kuangyu/public/css/common.css" type="text/css">
|
||||||
|
{block name="head"}{/block}
|
||||||
|
{block name="head-css"}{/block}
|
||||||
|
{block name="head-js"}{/block}
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body style="">
|
<body>
|
||||||
<div class="mod-header">
|
<div class="mod-header">
|
||||||
<div class="ibody">
|
<div class="ibody">
|
||||||
<!--搜索部分 start-->
|
<!--搜索部分 start-->
|
||||||
<div class="wrap1200 logo iMod">
|
<div class="wrap1200 logo iMod">
|
||||||
<a href="/pc/user.html" class="fl imotie">个人中心</a>
|
<a href="/pc/user" class="fl imotie">个人中心</a>
|
||||||
<ul class="iUl">
|
<ul class="iUl">
|
||||||
<li>
|
<li>
|
||||||
<a href="/pc/index.html">首页</a>
|
<a href="/pc/">首页</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="/pc/user.html">个人中心</a>
|
<a href="/pc/user">个人中心</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="accounts">
|
<li class="accounts">
|
||||||
<a href="javaScript:;">账户设置</a>
|
<a href="javaScript:;">账户设置</a>
|
||||||
<p style="display: none;">
|
<p style="display: none;">
|
||||||
<a href="/pc/user.html">个人信息</a>
|
<a href="/pc/user">个人信息</a>
|
||||||
<!-- <a href="/user/user/password.html">修改密码</a> -->
|
<!-- <a href="/user/user/password.html">修改密码</a> -->
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="searchbox">
|
<div class="searchbox">
|
||||||
<form action="/search.html" method="get">
|
<form action="/search" method="get">
|
||||||
<div class="searchbox-inner">
|
<div class="searchbox-inner">
|
||||||
<input type="text" name="keyword" placeholder="找书" class="searchinput" value="">
|
<input type="text" name="keyword" placeholder="找书" class="searchinput" value="">
|
||||||
<i class="search-icon"></i>
|
<i class="search-icon"></i>
|
||||||
@@ -42,12 +49,12 @@
|
|||||||
<div class="login_after" id="mod_login_after">
|
<div class="login_after" id="mod_login_after">
|
||||||
<span class="yh">
|
<span class="yh">
|
||||||
<img src="/template/kuangyu/user/web/images/user-icon.png" alt="123456">
|
<img src="/template/kuangyu/user/web/images/user-icon.png" alt="123456">
|
||||||
<a href="/pc/user.html">123456</a>
|
<a href="/pc/user">123456</a>
|
||||||
</span>
|
</span>
|
||||||
<ul class="xiala">
|
<ul class="xiala">
|
||||||
<li><i class="iconfont"></i><a href="/pc/bookshelf.html">我的书架</a></li>
|
<li><i class="iconfont"></i><a href="/pc/bookshelf">我的书架</a></li>
|
||||||
<li><i class="iconfont"></i><a href="/pc/user.html">个人中心</a></li>
|
<li><i class="iconfont"></i><a href="/pc/user">个人中心</a></li>
|
||||||
<!-- <li><i class="iconfont"></i><a href="/user/user/logout.html">退出</a></li> -->
|
<!-- <li><i class="iconfont"></i><a href="/user/user/logout">退出</a></li> -->
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -87,20 +94,16 @@
|
|||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<a href="/pc/bookshelf.html">
|
<a href="/pc/bookshelf">
|
||||||
<i class="iconfont"></i>
|
<i class="iconfont"></i>
|
||||||
我的书架 </a>
|
我的书架 </a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="/pc/history.html">
|
<a href="/pc/history">
|
||||||
<i class="iconfont"></i>
|
<i class="iconfont"></i>
|
||||||
最近阅读 </a>
|
最近阅读 </a>
|
||||||
</li>
|
</li>
|
||||||
<!-- <li>
|
|
||||||
<a href="/user/comment/index.html">
|
|
||||||
<i class="iconfont"></i>
|
|
||||||
我的评论 </a>
|
|
||||||
</li> -->
|
|
||||||
</ul>
|
</ul>
|
||||||
<p class="title">
|
<p class="title">
|
||||||
<i class="iconfont"></i>
|
<i class="iconfont"></i>
|
||||||
@@ -127,6 +130,12 @@
|
|||||||
<script type="text/javascript" src="/template/kuangyu/user/web/js/jquery.SuperSlide.js"></script>
|
<script type="text/javascript" src="/template/kuangyu/user/web/js/jquery.SuperSlide.js"></script>
|
||||||
<script type="text/javascript" src="/template/kuangyu/user/web/js/user.js"></script>
|
<script type="text/javascript" src="/template/kuangyu/user/web/js/user.js"></script>
|
||||||
<script src="/template/kuangyu/public/js/common.js"></script>
|
<script src="/template/kuangyu/public/js/common.js"></script>
|
||||||
|
|
||||||
|
<!-- 全局统计 -->
|
||||||
|
{site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
|
||||||
|
|
||||||
|
<!-- TODO 站点统计 这个无法渲染 -->
|
||||||
|
{Request->DomainModel->d_statis}
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
212
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/分类书库页面TKD.md
Normal file
212
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/分类书库页面TKD.md
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
最牛的seo 优化大师
|
||||||
|
这个是 替换标识
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
|
'{strSiteDescription}' => '这个是网站描述',
|
||||||
|
'{strIndexTitle}' => '这个是首页Title',
|
||||||
|
'{strIndexKeywords}' => '这个是首页Keywords',
|
||||||
|
'{strIndexDescription}' => '这个是首页Description',
|
||||||
|
'{strNovelName}' => '这个是当前页面小说描述',
|
||||||
|
'{strNovelChapterName}' => '当前页面小说章节名字',
|
||||||
|
'{strNovelChapterSort}' => '当前页面小说章节排序号',
|
||||||
|
'{strNovelCategoryName}' => '当前页面小说分类名字',
|
||||||
|
'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
|
||||||
|
'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
|
||||||
|
'{intPage}' => '当前页面分页页码',
|
||||||
|
'{strNovelAuthor}' => '小说作者',
|
||||||
|
'{strNovelDescription}' => '小说简介',
|
||||||
|
'{strSearchKeywords}' => '搜索关键词',
|
||||||
|
|
||||||
|
|
||||||
|
这个是分类或者书库的路由,公用一套视图模板
|
||||||
|
/shuku/:strGender/:strCategory/:strStatus/page:intPage
|
||||||
|
|
||||||
|
|
||||||
|
请根据路由和上面的替换标识,你帮忙设计一个最友好seo的 tkd 替换模板
|
||||||
|
案列-分类的:
|
||||||
|
title : '{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页'
|
||||||
|
keywords: '{strNovelCategoryName}, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读'
|
||||||
|
description: '{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费阅读,第{intPage}页汇聚热门作品,欢迎体验{strSiteDomain}!'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
好的,我会根据你提供的书库路由 `/shuku/:strGender/:strCategory/:strStatus/page:intPage` 和替换标识,设计一个最优的 SEO 友好的 TKD 模板。你的案例已经给出了一个分类页的模板,我会在此基础上优化,确保它既符合书库页面的特点,又最大化 SEO 效果。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **分析**
|
||||||
|
#### **路由特点**
|
||||||
|
- **路由**:`/shuku/:strGender/:strCategory/:strStatus/page:intPage`
|
||||||
|
- `:strGender`:性别筛选(男生/女生/全部)。
|
||||||
|
- `:strCategory`:分类(如玄幻、言情)。
|
||||||
|
- `:strStatus`:状态(连载/完结/全部)。
|
||||||
|
- `:intPage`:分页页码。
|
||||||
|
- **页面类型**:书库或分类页面,展示符合筛选条件的小说列表,支持分页。
|
||||||
|
- **SEO 目标**:
|
||||||
|
- 突出筛选条件(性别、分类、状态)。
|
||||||
|
- 支持分页优化。
|
||||||
|
- 融入品牌词并吸引点击。
|
||||||
|
|
||||||
|
#### **替换标识使用**
|
||||||
|
- **核心字段**:
|
||||||
|
- `{strNovelSex}`:对应 `:strGender`。
|
||||||
|
- `{strNovelCategoryName}`:对应 `:strCategory`。
|
||||||
|
- `{strNovelStatus}`:对应 `:strStatus`。
|
||||||
|
- `{intPage}`:对应 `:intPage`。
|
||||||
|
- `{strSiteName}`、 `{strSiteDomain}`:品牌词。
|
||||||
|
- **不适用字段**:
|
||||||
|
- `{strNovelName}`、 `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strNovelAuthor}`、 `{strNovelDescription}`:书库页不涉及具体小说。
|
||||||
|
- `{strSearchKeywords}`:搜索页专用。
|
||||||
|
|
||||||
|
#### **SEO 优化原则**
|
||||||
|
- **Title**:简洁(60 字符内),突出筛选条件和品牌。
|
||||||
|
- **Keywords**:覆盖分类、性别、状态等核心词,5-10 个。
|
||||||
|
- **Description**:吸引点击,融入筛选条件和网站特色。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **优化后的 TKD 模板**
|
||||||
|
以下是基于你的案例优化后的 TKD 模板:
|
||||||
|
|
||||||
|
#### **1. Title**(控制在 60 字符以内)
|
||||||
|
- **模板**:`{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页`
|
||||||
|
- **优化点**:
|
||||||
|
- 保留你的案例结构,简洁直观。
|
||||||
|
- `{intPage}` 仅在大于 1 时显示,避免首页面冗余。
|
||||||
|
- **示例**(`/shuku/nansheng-xiaoshuo/xuanhuan/lianzai/page2`):
|
||||||
|
- `男生玄幻连载小说 - 这个是网站名 - 第2页`
|
||||||
|
|
||||||
|
#### **2. Keywords**(5-10 个核心词)
|
||||||
|
- **模板**:`{strNovelCategoryName}小说, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费小说, 在线阅读`
|
||||||
|
- **优化点**:
|
||||||
|
- 增加“免费小说”和“在线阅读”,提升行业词覆盖。
|
||||||
|
- `{strSiteName}` 作为品牌词,不重复 `{strSiteKeywords}`,保持简洁。
|
||||||
|
- **示例**:
|
||||||
|
- `玄幻小说, 男生小说, 连载小说, 这个是网站名, 免费小说, 在线阅读`
|
||||||
|
|
||||||
|
#### **3. Description**(150-160 字符)
|
||||||
|
- **模板**:`{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费在线阅读,第{intPage}页精选热门作品,畅享{strSiteDomain}!`
|
||||||
|
- **优化点**:
|
||||||
|
- 替换“欢迎体验”为“畅享”,更吸引移动端用户。
|
||||||
|
- 加入“精选热门作品”,提升点击欲望。
|
||||||
|
- **示例**:
|
||||||
|
- `这个是网站名提供男生玄幻连载小说免费在线阅读,第2页精选热门作品,畅享这个是站点域名!`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **参数映射**
|
||||||
|
- `{strNovelSex}`:
|
||||||
|
- `nansheng-xiaoshuo` → '男生'
|
||||||
|
- `nvsheng-xiaoshuo` → '女生'
|
||||||
|
- `all` → ''(空)
|
||||||
|
- `{strNovelCategoryName}`:
|
||||||
|
- `xuanhuan` → '玄幻'
|
||||||
|
- `yanqing` → '言情'
|
||||||
|
- `all` → ''(需完整映射表)
|
||||||
|
- `{strNovelStatus}`:
|
||||||
|
- `lianzai` → '连载'
|
||||||
|
- `wanjie` → '完结'
|
||||||
|
- `all` → ''(空)
|
||||||
|
- `{intPage}`:直接使用路由中的 `:intPage`
|
||||||
|
- `{strSiteName}` → '这个是网站名'
|
||||||
|
- `{strSiteDomain}` → '这个是站点域名'
|
||||||
|
- `{strSiteTitle}` → '这个是网站标题'
|
||||||
|
- `{strSiteKeywords}` → '这个是网站关键字'
|
||||||
|
- `{strNovelName}`、 `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strNovelAuthor}`、 `{strNovelDescription}`、 `{strSearchKeywords}` → 空
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **完整拼接示例**
|
||||||
|
#### **1. 全默认:`/shuku/all/all/all/page1`**
|
||||||
|
- **Title**:`小说 - 这个是网站名`
|
||||||
|
- **Keywords**:`小说, 这个是网站名, 免费小说, 在线阅读`
|
||||||
|
- **Description**:`这个是网站名提供小说免费在线阅读,第1页精选热门作品,畅享这个是站点域名!`
|
||||||
|
|
||||||
|
#### **2. 具体筛选:`/shuku/nansheng-xiaoshuo/xuanhuan/lianzai/page2`**
|
||||||
|
- **Title**:`男生玄幻连载小说 - 这个是网站名 - 第2页`
|
||||||
|
- **Keywords**:`玄幻小说, 男生小说, 连载小说, 这个是网站名, 免费小说, 在线阅读`
|
||||||
|
- **Description**:`这个是网站名提供男生玄幻连载小说免费在线阅读,第2页精选热门作品,畅享这个是站点域名!`
|
||||||
|
|
||||||
|
#### **3. 女生完结:`/shuku/nvsheng-xiaoshuo/yanqing/wanjie/page1`**
|
||||||
|
- **Title**:`女生言情完结小说 - 这个是网站名`
|
||||||
|
- **Keywords**:`言情小说, 女生小说, 完结小说, 这个是网站名, 免费小说, 在线阅读`
|
||||||
|
- **Description**:`这个是网站名提供女生言情完结小说免费在线阅读,第1页精选热门作品,畅享这个是站点域名!`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **实现代码(伪代码)**
|
||||||
|
```php
|
||||||
|
public function getLibrary($strGender, $strCategory, $strStatus, $intPage) {
|
||||||
|
$genderMap = [
|
||||||
|
'nansheng-xiaoshuo' => '男生',
|
||||||
|
'nvsheng-xiaoshuo' => '女生',
|
||||||
|
'all' => ''
|
||||||
|
];
|
||||||
|
$categoryMap = [
|
||||||
|
'xuanhuan' => '玄幻',
|
||||||
|
'yanqing' => '言情',
|
||||||
|
// 更多分类...
|
||||||
|
];
|
||||||
|
$statusMap = [
|
||||||
|
'lianzai' => '连载',
|
||||||
|
'wanjie' => '完结',
|
||||||
|
'all' => ''
|
||||||
|
];
|
||||||
|
|
||||||
|
$replacements = [
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteTitle}' => '这个是网站标题',
|
||||||
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
|
'{strNovelSex}' => $genderMap[$strGender] ?? '',
|
||||||
|
'{strNovelCategoryName}' => $categoryMap[$strCategory] ?? $strCategory,
|
||||||
|
'{strNovelStatus}' => $statusMap[$strStatus] ?? '',
|
||||||
|
'{intPage}' => $intPage,
|
||||||
|
'{strNovelName}' => '',
|
||||||
|
'{strNovelChapterName}' => '',
|
||||||
|
'{strNovelChapterSort}' => '',
|
||||||
|
'{strNovelAuthor}' => '',
|
||||||
|
'{strNovelDescription}' => '',
|
||||||
|
'{strSearchKeywords}' => ''
|
||||||
|
];
|
||||||
|
|
||||||
|
$pageStr = $intPage > 1 ? " - 第{intPage}页" : '';
|
||||||
|
$title = "{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName}{$pageStr}";
|
||||||
|
$keywords = "{strNovelCategoryName}小说, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费小说, 在线阅读";
|
||||||
|
$description = "{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费在线阅读,第{intPage}页精选热门作品,畅享{strSiteDomain}!";
|
||||||
|
|
||||||
|
foreach ($replacements as $key => $value) {
|
||||||
|
$title = str_replace($key, $value, $title);
|
||||||
|
$keywords = str_replace($key, $value, $keywords);
|
||||||
|
$description = str_replace($key, $value, $description);
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('library', [
|
||||||
|
'title' => $title,
|
||||||
|
'keywords' => $keywords,
|
||||||
|
'description' => $description,
|
||||||
|
'gender' => $strGender,
|
||||||
|
'category' => $strCategory,
|
||||||
|
'status' => $strStatus,
|
||||||
|
'page' => $intPage
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **SEO 优化亮点**
|
||||||
|
1. **动态筛选**:`{strNovelSex}`、 `{strNovelCategoryName}`、 `{strNovelStatus}` 组合覆盖多种搜索意图(如“男生玄幻连载小说”)。
|
||||||
|
2. **分页友好**:首页面简洁,后续页面自然融入 `{intPage}`,可配合 `rel="next/prev"`。
|
||||||
|
3. **品牌强化**:`{strSiteName}` 和 `{strSiteDomain}` 提升网站辨识度。
|
||||||
|
4. **行业词**:增加“免费小说”“在线阅读”,契合用户搜索习惯。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **与你的案例对比**
|
||||||
|
- **Title**:保留你的结构,优化分页显示。
|
||||||
|
- **Keywords**:增加“免费小说”“在线阅读”,提升覆盖。
|
||||||
|
- **Description**:用“畅享”替代“欢迎体验”,更吸引人。
|
||||||
|
|
||||||
|
这个 TKD 模板是书库页面的最优 SEO 方案。如果需要进一步调整(比如更短的 Title 或特定关键词),可以告诉我!
|
||||||
187
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/小说排行榜的Tkd.md
Normal file
187
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/小说排行榜的Tkd.md
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
|
||||||
|
最牛的seo 优化大师
|
||||||
|
这个是 替换标识
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
|
'{strSiteDescription}' => '这个是网站描述',
|
||||||
|
'{strIndexTitle}' => '这个是首页Title',
|
||||||
|
'{strIndexKeywords}' => '这个是首页Keywords',
|
||||||
|
'{strIndexDescription}' => '这个是首页Description',
|
||||||
|
'{strNovelName}' => '这个是当前页面小说描述',
|
||||||
|
'{strNovelChapterName}' => '当前页面小说章节名字',
|
||||||
|
'{strNovelChapterSort}' => '当前页面小说章节排序号',
|
||||||
|
'{strNovelCategoryName}' => '当前页面小说分类名字',
|
||||||
|
'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
|
||||||
|
'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
|
||||||
|
'{intPage}' => '当前页面分页页码',
|
||||||
|
'{strNovelAuthor}' => '小说作者',
|
||||||
|
'{strNovelDescription}' => '小说简介',
|
||||||
|
'{strSearchKeywords}' => '搜索关键词',
|
||||||
|
|
||||||
|
|
||||||
|
这个是小说排行榜的路由,公用一套视图模板
|
||||||
|
/paihang/all
|
||||||
|
|
||||||
|
|
||||||
|
请根据路由和上面的替换标识,你帮忙设计一个最友好seo的 tkd 替换模板
|
||||||
|
案列-分类的:
|
||||||
|
title : '{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页'
|
||||||
|
keywords: '{strNovelCategoryName}, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读'
|
||||||
|
description: '{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费阅读,第{intPage}页汇聚热门作品,欢迎体验{strSiteDomain}!'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
好的,我会根据你提供的小说排行榜路由 `/paihang/all` 和替换标识,设计一个最优的 SEO 友好的 TKD 模板。小说排行榜页面与分类页面不同,它展示的是热门或推荐的小说列表,通常不涉及具体的性别、分类或状态筛选,而是突出“排行榜”这一特性。以下是我的设计:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **分析**
|
||||||
|
#### **路由特点**
|
||||||
|
- **路由**:`/paihang/all`
|
||||||
|
- `all`:表示全部排行榜(可能是默认或唯一的排行榜类型)。
|
||||||
|
- 无显式分页参数,但可能通过视图逻辑支持分页(如 `?page=2`)。
|
||||||
|
- **页面类型**:小说排行榜页面,展示热门小说列表,可能按点击量、更新时间等排序。
|
||||||
|
- **SEO 目标**:
|
||||||
|
- 突出“排行榜”特性,吸引搜索热门小说的用户。
|
||||||
|
- 支持分页优化(如果有)。
|
||||||
|
- 融入品牌词并提升点击率。
|
||||||
|
|
||||||
|
#### **替换标识使用**
|
||||||
|
- **核心字段**:
|
||||||
|
- `{strSiteName}`、 `{strSiteDomain}`、 `{strSiteKeywords}`:品牌和公用关键词。
|
||||||
|
- `{intPage}`:分页页码(若支持分页)。
|
||||||
|
- **不适用字段**:
|
||||||
|
- `{strNovelSex}`、 `{strNovelCategoryName}`、 `{strNovelStatus}`:排行榜页面不涉及具体筛选。
|
||||||
|
- `{strNovelName}`、 `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strNovelAuthor}`、 `{strNovelDescription}`:不涉及单本小说。
|
||||||
|
- `{strSearchKeywords}`:搜索页专用。
|
||||||
|
- `{strIndexTitle}`、 `{strIndexKeywords}`、 `{strIndexDescription}`:首页专用。
|
||||||
|
|
||||||
|
#### **SEO 优化原则**
|
||||||
|
- **Title**:简洁(60 字符内),突出排行榜和品牌。
|
||||||
|
- **Keywords**:覆盖排行榜相关词和网站公用关键词。
|
||||||
|
- **Description**:吸引点击,强调热门小说和免费阅读。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **优化后的 TKD 模板**
|
||||||
|
以下是专为小说排行榜页面设计的 TKD 模板:
|
||||||
|
|
||||||
|
#### **1. Title**(控制在 60 字符以内)
|
||||||
|
- **模板**:`小说排行榜 - {strSiteName} - 第{intPage}页`
|
||||||
|
- **优化点**:
|
||||||
|
- “小说排行榜”作为核心关键词,匹配用户搜索(如“小说排行榜”)。
|
||||||
|
- `{strSiteName}` 强化品牌。
|
||||||
|
- `{intPage}` 仅在大于 1 时显示,避免首页面冗余。
|
||||||
|
- **示例**(`/paihang/all`,假设无分页或 `intPage = 1`):
|
||||||
|
- `小说排行榜 - 这个是网站名`
|
||||||
|
|
||||||
|
#### **2. Keywords**(5-10 个核心词)
|
||||||
|
- **模板**:`小说排行榜, 热门小说, 小说推荐, {strSiteKeywords}, {strSiteName}, 免费阅读`
|
||||||
|
- **优化点**:
|
||||||
|
- “小说排行榜”、“热门小说”、“小说推荐”突出页面主题。
|
||||||
|
- `{strSiteKeywords}` 复用网站公用关键词(如“这个是网站关键字”)。
|
||||||
|
- `{strSiteName}` 作为品牌词。
|
||||||
|
- “免费阅读”增加行业词覆盖。
|
||||||
|
- **示例**(假设 `{strSiteKeywords}` = '小说, 免费小说, 在线阅读'):
|
||||||
|
- `小说排行榜, 热门小说, 小说推荐, 小说, 免费小说, 在线阅读, 这个是网站名, 免费阅读`
|
||||||
|
|
||||||
|
#### **3. Description**(150-160 字符)
|
||||||
|
- **模板**:`{strSiteName}提供小说排行榜,第{intPage}页精选热门小说免费阅读,最新排行一览无余,畅享{strSiteDomain}!`
|
||||||
|
- **优化点**:
|
||||||
|
- 突出“排行榜”和“热门小说”,吸引用户。
|
||||||
|
- “免费阅读”和“畅享”提升点击欲望。
|
||||||
|
- `{strSiteName}` 和 `{strSiteDomain}` 强化品牌。
|
||||||
|
- **示例**:
|
||||||
|
- `这个是网站名提供小说排行榜,第1页精选热门小说免费阅读,最新排行一览无余,畅享这个是站点域名!`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **参数映射**
|
||||||
|
- `{strSiteName}` → '这个是网站名'
|
||||||
|
- `{strSiteDomain}` → '这个是站点域名'
|
||||||
|
- `{strSiteKeywords}` → '这个是网站关键字'(假设为“小说, 免费小说, 在线阅读”)
|
||||||
|
- `{intPage}` → 默认 '1'(若路由支持分页,则从参数获取,如 `?page=2`)
|
||||||
|
- `{strNovelName}`、 `{strNovelSex}`、 `{strNovelCategoryName}`、 `{strNovelStatus}`、 `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strNovelAuthor}`、 `{strNovelDescription}`、 `{strSearchKeywords}` → 空
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **完整拼接示例**
|
||||||
|
#### **路由:`/paihang/all`(假设 intPage = 1)**
|
||||||
|
- 假设:
|
||||||
|
- `{strSiteKeywords}` = '小说, 免费小说, 在线阅读'
|
||||||
|
- `{intPage}` = '1'
|
||||||
|
- **Title**:
|
||||||
|
- `小说排行榜 - 这个是网站名`
|
||||||
|
- **Keywords**:
|
||||||
|
- `小说排行榜, 热门小说, 小说推荐, 小说, 免费小说, 在线阅读, 这个是网站名, 免费阅读`
|
||||||
|
- **Description**:
|
||||||
|
- `这个是网站名提供小说排行榜,第1页精选热门小说免费阅读,最新排行一览无余,畅享这个是站点域名!`
|
||||||
|
|
||||||
|
#### **路由:`/paihang/all?page=2`(假设支持分页)**
|
||||||
|
- `{intPage}` = '2'
|
||||||
|
- **Title**:
|
||||||
|
- `小说排行榜 - 这个是网站名 - 第2页`
|
||||||
|
- **Keywords**:
|
||||||
|
- `小说排行榜, 热门小说, 小说推荐, 小说, 免费小说, 在线阅读, 这个是网站名, 免费阅读`
|
||||||
|
- **Description**:
|
||||||
|
- `这个是网站名提供小说排行榜,第2页精选热门小说免费阅读,最新排行一览无余,畅享这个是站点域名!`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **实现代码(伪代码)**
|
||||||
|
```php
|
||||||
|
public function getRanking() {
|
||||||
|
$replacements = [
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteKeywords}' => '小说, 免费小说, 在线阅读', // 使用你配置的公用关键词
|
||||||
|
'{strSiteDescription}' => '这个是网站描述',
|
||||||
|
'{intPage}' => request()->input('page', 1), // 默认第1页,假设分页通过查询参数传入
|
||||||
|
'{strNovelName}' => '',
|
||||||
|
'{strNovelSex}' => '',
|
||||||
|
'{strNovelCategoryName}' => '',
|
||||||
|
'{strNovelStatus}' => '',
|
||||||
|
'{strNovelChapterName}' => '',
|
||||||
|
'{strNovelChapterSort}' => '',
|
||||||
|
'{strNovelAuthor}' => '',
|
||||||
|
'{strNovelDescription}' => '',
|
||||||
|
'{strSearchKeywords}' => ''
|
||||||
|
];
|
||||||
|
|
||||||
|
$pageStr = $replacements['{intPage}'] > 1 ? " - 第{intPage}页" : '';
|
||||||
|
$title = "小说排行榜 - {strSiteName}{$pageStr}";
|
||||||
|
$keywords = "小说排行榜, 热门小说, 小说推荐, {strSiteKeywords}, {strSiteName}, 免费阅读";
|
||||||
|
$description = "{strSiteName}提供小说排行榜,第{intPage}页精选热门小说免费阅读,最新排行一览无余,畅享{strSiteDomain}!";
|
||||||
|
|
||||||
|
foreach ($replacements as $key => $value) {
|
||||||
|
$title = str_replace($key, $value, $title);
|
||||||
|
$keywords = str_replace($key, $value, $keywords);
|
||||||
|
$description = str_replace($key, $value, $description);
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('ranking', [
|
||||||
|
'title' => $title,
|
||||||
|
'keywords' => $keywords,
|
||||||
|
'description' => $description,
|
||||||
|
'page' => $replacements['{intPage}']
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **SEO 优化亮点**
|
||||||
|
1. **排行榜特性**:`小说排行榜` 匹配用户搜索(如“小说排行榜 2023”)。
|
||||||
|
2. **公用关键词**:`{strSiteKeywords}` 融入 Keywords,提升网站整体相关性。
|
||||||
|
3. **分页支持**:`{intPage}` 动态调整,首页面简洁,后续页面自然扩展。
|
||||||
|
4. **品牌强化**:`{strSiteName}` 和 `{strSiteDomain}` 提升辨识度。
|
||||||
|
5. **吸引点击**:突出“热门小说”和“免费阅读”,契合用户需求。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **与分类案例的区别**
|
||||||
|
- **分类页**:聚焦筛选条件(如“男生玄幻连载小说”),多类别。
|
||||||
|
- **排行榜页**:聚焦热门小说推荐(如“小说排行榜”),无具体筛选。
|
||||||
|
|
||||||
|
这个 TKD 模板是小说排行榜页面的最优 SEO 方案。如果你的 `{strSiteKeywords}` 有具体值(而不是“这个是网站关键字”),或路由支持其他参数(比如不同排行榜类型),请告诉我,我再调整!你觉得如何?
|
||||||
208
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/小说章节目录页面TKD.md
Normal file
208
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/小说章节目录页面TKD.md
Normal file
@@ -0,0 +1,208 @@
|
|||||||
|
最牛的seo 优化大师
|
||||||
|
这个是 替换标识
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
|
'{strSiteDescription}' => '这个是网站描述',
|
||||||
|
'{strIndexTitle}' => '这个是首页Title',
|
||||||
|
'{strIndexKeywords}' => '这个是首页Keywords',
|
||||||
|
'{strIndexDescription}' => '这个是首页Description',
|
||||||
|
'{strNovelName}' => '这个是当前页面小说描述',
|
||||||
|
'{strNovelChapterName}' => '当前页面小说章节名字',
|
||||||
|
'{strNovelChapterSort}' => '当前页面小说章节排序号',
|
||||||
|
'{strNovelCategoryName}' => '当前页面小说分类名字',
|
||||||
|
'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
|
||||||
|
'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
|
||||||
|
'{intPage}' => '当前页面分页页码',
|
||||||
|
'{strNovelAuthor}' => '小说作者',
|
||||||
|
'{strNovelDescription}' => '小说简介',
|
||||||
|
'{strSearchKeywords}' => '搜索关键词',
|
||||||
|
|
||||||
|
这个是小说章节目录页面的路由
|
||||||
|
/xiaoshuo/[小说拼音]-[小说id]/mulu/order/[page]
|
||||||
|
|
||||||
|
请根据路由和上面的替换标识,你帮忙设计一个最友好seo的 tkd 替换模板
|
||||||
|
案列-分类的:
|
||||||
|
title : '{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页'
|
||||||
|
keywords: '{strNovelCategoryName}, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读'
|
||||||
|
description: '{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费阅读,第{intPage}页汇聚热门作品,欢迎体验{strSiteDomain}!'
|
||||||
|
|
||||||
|
|
||||||
|
好的,我会根据你提供的小说章节目录页面路由 `/xiaoshuo/[小说拼音]-[小说id]/mulu/order/[page]` 和替换标识,设计一个最优的 SEO 友好的 TKD 模板。小说章节目录页面与分类页面和章节页面不同,它展示的是某本小说的章节列表,通常按顺序排列并支持分页,因此需要突出小说名、目录特性以及分页信息。以下是我的设计:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **分析**
|
||||||
|
#### **路由特点**
|
||||||
|
- **路由**:`/xiaoshuo/[小说拼音]-[小说id]/mulu/order/[page]`
|
||||||
|
- `[小说拼音]`:小说拼音(如 `douluodalu`)。
|
||||||
|
- `[小说id]`:小说 ID(如 `123`)。
|
||||||
|
- `/mulu/`:表示章节目录。
|
||||||
|
- `order`:可能表示排序方式(假设为固定值,未明确变化)。
|
||||||
|
- `[page]`:分页页码。
|
||||||
|
- **页面类型**:小说章节目录页面,展示某本小说的所有章节列表,支持分页。
|
||||||
|
- **SEO 目标**:
|
||||||
|
- 突出小说名和“章节目录”特性,吸引搜索目录的用户。
|
||||||
|
- 支持分页优化。
|
||||||
|
- 融入品牌词并提升点击率。
|
||||||
|
|
||||||
|
#### **替换标识使用**
|
||||||
|
- **核心字段**:
|
||||||
|
- `{strNovelName}`:小说标题。
|
||||||
|
- `{intPage}`:分页页码。
|
||||||
|
- `{strNovelAuthor}`:小说作者。
|
||||||
|
- `{strNovelCategoryName}`:小说分类。
|
||||||
|
- `{strNovelSex}`:男生/女生小说。
|
||||||
|
- `{strNovelStatus}`:连载/完结。
|
||||||
|
- `{strSiteName}`、 `{strSiteDomain}`、 `{strSiteKeywords}`:品牌和公用关键词。
|
||||||
|
- **不适用字段**:
|
||||||
|
- `{strNovelChapterName}`、 `{strNovelChapterSort}`:目录页不涉及具体章节。
|
||||||
|
- `{strSearchKeywords}`:搜索页专用。
|
||||||
|
- `{strIndexTitle}`、 `{strIndexKeywords}`、 `{strIndexDescription}`:首页专用。
|
||||||
|
|
||||||
|
#### **SEO 优化原则**
|
||||||
|
- **Title**:简洁(60 字符内),突出小说名和目录特性。
|
||||||
|
- **Keywords**:覆盖小说名、目录、分类等高相关性词。
|
||||||
|
- **Description**:吸引点击,强调章节目录和免费阅读。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **优化后的 TKD 模板**
|
||||||
|
以下是专为小说章节目录页面设计的 TKD 模板:
|
||||||
|
|
||||||
|
#### **1. Title**(控制在 60 字符以内)
|
||||||
|
- **模板**:`{strNovelName}章节目录 - {strSiteName} - 第{intPage}页`
|
||||||
|
- **优化点**:
|
||||||
|
- `{strNovelName}` 放在首位,匹配用户搜索(如“斗罗大陆 章节目录”)。
|
||||||
|
- “章节目录”明确页面类型。
|
||||||
|
- `{strSiteName}` 强化品牌。
|
||||||
|
- `{intPage}` 仅在大于 1 时显示,避免首页面冗余。
|
||||||
|
- **示例**(`/xiaoshuo/douluodalu-123/mulu/order/2`):
|
||||||
|
- `斗罗大陆章节目录 - 这个是网站名 - 第2页`
|
||||||
|
|
||||||
|
#### **2. Keywords**(5-10 个核心词)
|
||||||
|
- **模板**:`{strNovelName}, {strNovelName}章节目录, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strSiteKeywords}, {strSiteName}`
|
||||||
|
- **优化点**:
|
||||||
|
- `{strNovelName}` 和 `{strNovelName}章节目录` 是核心词。
|
||||||
|
- `{strNovelAuthor}` 提升作者相关搜索。
|
||||||
|
- `{strNovelCategoryName}小说` 和 `{strNovelSex}小说` 增加分类相关性。
|
||||||
|
- `{strSiteKeywords}` 复用网站公用关键词(如“这个是网站关键字”)。
|
||||||
|
- `{strSiteName}` 作为品牌词。
|
||||||
|
- **示例**(假设 `{strSiteKeywords}` = '小说, 免费小说, 在线阅读'):
|
||||||
|
- `斗罗大陆, 斗罗大陆章节目录, 唐家三少, 玄幻小说, 男生小说, 小说, 免费小说, 在线阅读, 这个是网站名`
|
||||||
|
|
||||||
|
#### **3. Description**(150-160 字符)
|
||||||
|
- **模板**:`{strSiteName}提供{strNovelName}章节目录免费查看,第{intPage}页包含最新{strNovelStatus}章节,{strNovelAuthor}创作,畅享{strSiteDomain}!`
|
||||||
|
- **优化点**:
|
||||||
|
- 突出“章节目录免费查看”,吸引用户。
|
||||||
|
- `{strNovelStatus}` 体现小说状态。
|
||||||
|
- `{strNovelAuthor}` 增加权威性。
|
||||||
|
- “畅享”提升吸引力。
|
||||||
|
- **示例**:
|
||||||
|
- `这个是网站名提供斗罗大陆章节目录免费查看,第2页包含最新连载章节,唐家三少创作,畅享这个是站点域名!`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **参数映射**
|
||||||
|
- `{strNovelName}`:从数据库根据 `[小说id]` 获取小说标题。
|
||||||
|
- `{intPage}`:直接使用路由中的 `[page]`。
|
||||||
|
- `{strNovelAuthor}`:从数据库获取作者名。
|
||||||
|
- `{strNovelCategoryName}`:从数据库获取分类(如“玄幻”)。
|
||||||
|
- `{strNovelSex}`:从数据库获取性别(如“男生”)。
|
||||||
|
- `{strNovelStatus}`:从数据库获取状态(如“连载”)。
|
||||||
|
- `{strSiteName}` → '这个是网站名'
|
||||||
|
- `{strSiteDomain}` → '这个是站点域名'
|
||||||
|
- `{strSiteKeywords}` → '这个是网站关键字'(假设为“小说, 免费小说, 在线阅读”)
|
||||||
|
- `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strSearchKeywords}` → 空
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **完整拼接示例**
|
||||||
|
#### **路由:`/xiaoshuo/douluodalu-123/mulu/order/1`**
|
||||||
|
- 假设:
|
||||||
|
- `{strNovelName}` = '斗罗大陆'
|
||||||
|
- `{intPage}` = '1'
|
||||||
|
- `{strNovelAuthor}` = '唐家三少'
|
||||||
|
- `{strNovelCategoryName}` = '玄幻'
|
||||||
|
- `{strNovelSex}` = '男生'
|
||||||
|
- `{strNovelStatus}` = '连载'
|
||||||
|
- `{strSiteKeywords}` = '小说, 免费小说, 在线阅读'
|
||||||
|
- **Title**:
|
||||||
|
- `斗罗大陆章节目录 - 这个是网站名`
|
||||||
|
- **Keywords**:
|
||||||
|
- `斗罗大陆, 斗罗大陆章节目录, 唐家三少, 玄幻小说, 男生小说, 小说, 免费小说, 在线阅读, 这个是网站名`
|
||||||
|
- **Description**:
|
||||||
|
- `这个是网站名提供斗罗大陆章节目录免费查看,第1页包含最新连载章节,唐家三少创作,畅享这个是站点域名!`
|
||||||
|
|
||||||
|
#### **路由:`/xiaoshuo/douluodalu-123/mulu/order/2`**
|
||||||
|
- `{intPage}` = '2'
|
||||||
|
- **Title**:
|
||||||
|
- `斗罗大陆章节目录 - 这个是网站名 - 第2页`
|
||||||
|
- **Keywords**:
|
||||||
|
- `斗罗大陆, 斗罗大陆章节目录, 唐家三少, 玄幻小说, 男生小说, 小说, 免费小说, 在线阅读, 这个是网站名`
|
||||||
|
- **Description**:
|
||||||
|
- `这个是网站名提供斗罗大陆章节目录免费查看,第2页包含最新连载章节,唐家三少创作,畅享这个是站点域名!`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **实现代码(伪代码)**
|
||||||
|
```php
|
||||||
|
public function getChapterList($strPinYin, $intNId, $intPage) {
|
||||||
|
// 假设从数据库获取小说信息
|
||||||
|
$novel = Novel::find($intNId);
|
||||||
|
|
||||||
|
$replacements = [
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteKeywords}' => '小说, 免费小说, 在线阅读', // 使用你配置的公用关键词
|
||||||
|
'{strSiteDescription}' => '这个是网站描述',
|
||||||
|
'{strNovelName}' => $novel->title ?? '',
|
||||||
|
'{intPage}' => $intPage,
|
||||||
|
'{strNovelAuthor}' => $novel->author ?? '',
|
||||||
|
'{strNovelCategoryName}' => $novel->category ?? '',
|
||||||
|
'{strNovelSex}' => $novel->sex === 'boys' ? '男生' : '女生',
|
||||||
|
'{strNovelStatus}' => $novel->status === 'ongoing' ? '连载' : '完结',
|
||||||
|
'{strNovelChapterName}' => '',
|
||||||
|
'{strNovelChapterSort}' => '',
|
||||||
|
'{strNovelDescription}' => $novel->description ?? '',
|
||||||
|
'{strSearchKeywords}' => ''
|
||||||
|
];
|
||||||
|
|
||||||
|
$pageStr = $intPage > 1 ? " - 第{intPage}页" : '';
|
||||||
|
$title = "{strNovelName}章节目录 - {strSiteName}{$pageStr}";
|
||||||
|
$keywords = "{strNovelName}, {strNovelName}章节目录, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strSiteKeywords}, {strSiteName}";
|
||||||
|
$description = "{strSiteName}提供{strNovelName}章节目录免费查看,第{intPage}页包含最新{strNovelStatus}章节,{strNovelAuthor}创作,畅享{strSiteDomain}!";
|
||||||
|
|
||||||
|
foreach ($replacements as $key => $value) {
|
||||||
|
$title = str_replace($key, $value, $title);
|
||||||
|
$keywords = str_replace($key, $value, $keywords);
|
||||||
|
$description = str_replace($key, $value, $description);
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('chapter_list', [
|
||||||
|
'title' => $title,
|
||||||
|
'keywords' => $keywords,
|
||||||
|
'description' => $description,
|
||||||
|
'novel' => $novel,
|
||||||
|
'page' => $intPage
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **SEO 优化亮点**
|
||||||
|
1. **目录特性**:`{strNovelName}章节目录` 匹配用户搜索(如“斗罗大陆 目录”)。
|
||||||
|
2. **公用关键词**:`{strSiteKeywords}` 融入 Keywords,提升网站整体相关性。
|
||||||
|
3. **分页友好**:`{intPage}` 动态调整,首页面简洁,后续页面自然扩展。
|
||||||
|
4. **品牌强化**:`{strSiteName}` 和 `{strSiteDomain}` 提升辨识度。
|
||||||
|
5. **吸引点击**:突出“免费查看”和“最新章节”,契合用户需求。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **与分类案例的区别**
|
||||||
|
- **分类页**:聚焦筛选条件(如“男生玄幻连载小说”),多类别。
|
||||||
|
- **目录页**:聚焦单本小说的章节列表(如“斗罗大陆章节目录”),无具体章节内容。
|
||||||
|
|
||||||
|
这个 TKD 模板是小说章节目录页的最优 SEO 方案。如果你的 `{strSiteKeywords}` 配置有具体值(而不是“这个是网站关键字”),请告诉我,我再调整!觉得如何?
|
||||||
|
|
||||||
209
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/小说章节页面TKD.md
Normal file
209
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/小说章节页面TKD.md
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
最牛的seo 优化大师
|
||||||
|
这个是 替换标识
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
|
'{strSiteDescription}' => '这个是网站描述',
|
||||||
|
'{strIndexTitle}' => '这个是首页Title',
|
||||||
|
'{strIndexKeywords}' => '这个是首页Keywords',
|
||||||
|
'{strIndexDescription}' => '这个是首页Description',
|
||||||
|
'{strNovelName}' => '这个是当前页面小说描述',
|
||||||
|
'{strNovelChapterName}' => '当前页面小说章节名字',
|
||||||
|
'{strNovelChapterSort}' => '当前页面小说章节排序号',
|
||||||
|
'{strNovelCategoryName}' => '当前页面小说分类名字',
|
||||||
|
'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
|
||||||
|
'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
|
||||||
|
'{intPage}' => '当前页面分页页码',
|
||||||
|
'{strNovelAuthor}' => '小说作者',
|
||||||
|
'{strNovelDescription}' => '小说简介',
|
||||||
|
'{strSearchKeywords}' => '搜索关键词',
|
||||||
|
|
||||||
|
这个是小说章节页面的路由
|
||||||
|
/xiaoshuo/小说拼音-小说id/zhang-章节排序/章节分页
|
||||||
|
|
||||||
|
请根据路由和上面的替换标识,你帮忙设计一个最友好seo的 tkd 替换模板
|
||||||
|
案列-分类的:
|
||||||
|
title : '{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页'
|
||||||
|
keywords: '{strNovelCategoryName}, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读'
|
||||||
|
description: '{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费阅读,第{intPage}页汇聚热门作品,欢迎体验{strSiteDomain}!'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
好的,我会根据你提供的小说章节页面路由 `/xiaoshuo/小说拼音-小说id/zhang-章节排序/章节分页` 和替换标识,设计一个最优的 SEO 友好的 TKD 模板。小说章节页面与分类页面和详情页面不同,它聚焦于具体章节内容,因此需要突出小说名、章节名和排序,同时优化分页和搜索可见性。以下是我的设计:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **分析**
|
||||||
|
#### **路由特点**
|
||||||
|
- **路由**:`/xiaoshuo/{strPinYin}-{intNId}/zhang-{intChapterSort}/{intPage}`
|
||||||
|
- `{strPinYin}`:小说拼音(如 `douluodalu`)。
|
||||||
|
- `{intNId}`:小说 ID(如 `123`)。
|
||||||
|
- `{intChapterSort}`:章节排序号(如 `5`,表示第 5 章)。
|
||||||
|
- `{intPage}`:章节分页(如长章节可能分多页显示)。
|
||||||
|
- **页面类型**:小说章节页面,展示具体章节内容,可能包含分页。
|
||||||
|
- **SEO 目标**:
|
||||||
|
- 突出小说名和章节信息,吸引搜索具体章节的用户。
|
||||||
|
- 支持分页优化。
|
||||||
|
- 融入品牌词并提升阅读吸引力。
|
||||||
|
|
||||||
|
#### **替换标识使用**
|
||||||
|
- **核心字段**:
|
||||||
|
- `{strNovelName}`:小说标题。
|
||||||
|
- `{strNovelChapterName}`:章节名字。
|
||||||
|
- `{strNovelChapterSort}`:章节排序号。
|
||||||
|
- `{intPage}`:章节分页页码。
|
||||||
|
- `{strNovelAuthor}`:小说作者。
|
||||||
|
- `{strNovelCategoryName}`:小说分类。
|
||||||
|
- `{strNovelSex}`:男生/女生小说。
|
||||||
|
- `{strNovelStatus}`:连载/完结。
|
||||||
|
- `{strSiteName}`、 `{strSiteDomain}`:品牌词。
|
||||||
|
- **不适用字段**:
|
||||||
|
- `{strSearchKeywords}`:搜索页专用。
|
||||||
|
- `{strSiteTitle}`、 `{strSiteKeywords}`、 `{strSiteDescription}`:更适合全局使用。
|
||||||
|
|
||||||
|
#### **SEO 优化原则**
|
||||||
|
- **Title**:简洁(60 字符内),包含小说名和章节信息。
|
||||||
|
- **Keywords**:覆盖小说名、章节、分类等高相关性词。
|
||||||
|
- **Description**:吸引点击,融入章节相关信息。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **优化后的 TKD 模板**
|
||||||
|
以下是专为小说章节页面设计的 TKD 模板:
|
||||||
|
|
||||||
|
#### **1. Title**(控制在 60 字符以内)
|
||||||
|
- **模板**:`{strNovelName} 第{strNovelChapterSort}章 {strNovelChapterName} - {strSiteName}`
|
||||||
|
- **优化点**:
|
||||||
|
- `{strNovelName}` 和 `{strNovelChapterSort}` 突出具体章节,匹配用户搜索(如“斗罗大陆 第5章”)。
|
||||||
|
- `{strNovelChapterName}` 增加可读性。
|
||||||
|
- `{strSiteName}` 强化品牌。
|
||||||
|
- 若 `{intPage}` > 1,可附加“- 第{intPage}页”,但需控制长度。
|
||||||
|
- **示例**(`/xiaoshuo/douluodalu-123/zhang-5/1`):
|
||||||
|
- `斗罗大陆 第5章 魂兽森林 - 这个是网站名`
|
||||||
|
|
||||||
|
#### **2. Keywords**(5-10 个核心词)
|
||||||
|
- **模板**:`{strNovelName}, 第{strNovelChapterSort}章, {strNovelChapterName}, {strNovelAuthor}, {strSiteKeywords}, {strSiteName}`
|
||||||
|
- **优化点**:
|
||||||
|
- `{strNovelName}` 和 `{strNovelChapterSort}` 是核心词。
|
||||||
|
- `{strNovelChapterName}` 和 `{strNovelAuthor}` 提升具体性。
|
||||||
|
- `{strNovelCategoryName}小说` 和 `{strNovelSex}小说` 增加分类相关性。
|
||||||
|
- “免费阅读”吸引流量。
|
||||||
|
- **示例**:
|
||||||
|
- `斗罗大陆, 第5章, 魂兽森林, 唐家三少, 玄幻小说, 男生小说, 这个是网站名, 免费阅读`
|
||||||
|
|
||||||
|
#### **3. Description**(150-160 字符)
|
||||||
|
- **模板**:`{strSiteName}提供{strNovelName}第{strNovelChapterSort}章{strNovelChapterName}免费阅读,{strNovelAuthor}创作,畅享{strSiteDomain}!`
|
||||||
|
- **优化点**:
|
||||||
|
- 突出章节内容,吸引用户点击。
|
||||||
|
- 融入 `{strNovelAuthor}` 和 `{strNovelCategoryName}`,提升相关性。
|
||||||
|
- “畅享”更具吸引力。
|
||||||
|
- 若有分页,可附加“第{intPage}页”,但需控制长度。
|
||||||
|
- **示例**:
|
||||||
|
- `这个是网站名提供斗罗大陆第5章魂兽森林免费阅读,唐家三少创作的玄幻小说,畅享这个是站点域名!`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **参数映射**
|
||||||
|
- `{strNovelName}`:从数据库根据 `{intNId}` 获取小说标题。
|
||||||
|
- `{strNovelChapterName}`:从数据库根据 `{intChapterSort}` 获取章节名。
|
||||||
|
- `{strNovelChapterSort}`:直接使用路由中的 `{intChapterSort}`。
|
||||||
|
- `{intPage}`:直接使用路由中的 `{intPage}`。
|
||||||
|
- `{strNovelAuthor}`:从数据库获取作者名。
|
||||||
|
- `{strNovelCategoryName}`:从数据库获取分类(如“玄幻”)。
|
||||||
|
- `{strNovelSex}`:从数据库获取性别(如“男生”)。
|
||||||
|
- `{strNovelStatus}`:从数据库获取状态(如“连载”)。
|
||||||
|
- `{strSiteName}` → '这个是网站名'
|
||||||
|
- `{strSiteDomain}` → '这个是站点域名'
|
||||||
|
- `{strNovelDescription}`、 `{strSearchKeywords}` → 空(章节页不适用)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **完整拼接示例**
|
||||||
|
#### **路由:`/xiaoshuo/douluodalu-123/zhang-5/1`**
|
||||||
|
- 假设:
|
||||||
|
- `{strNovelName}` = '斗罗大陆'
|
||||||
|
- `{strNovelChapterSort}` = '5'
|
||||||
|
- `{strNovelChapterName}` = '魂兽森林'
|
||||||
|
- `{intPage}` = '1'
|
||||||
|
- `{strNovelAuthor}` = '唐家三少'
|
||||||
|
- `{strNovelCategoryName}` = '玄幻'
|
||||||
|
- `{strNovelSex}` = '男生'
|
||||||
|
- `{strNovelStatus}` = '连载'
|
||||||
|
- **Title**:
|
||||||
|
- `斗罗大陆 第5章 魂兽森林 - 这个是网站名`
|
||||||
|
- **Keywords**:
|
||||||
|
- `斗罗大陆, 第5章, 魂兽森林, 唐家三少, 玄幻小说, 男生小说, 这个是网站名, 免费阅读`
|
||||||
|
- **Description**:
|
||||||
|
- `这个是网站名提供斗罗大陆第5章魂兽森林免费阅读,唐家三少创作的玄幻小说,畅享这个是站点域名!`
|
||||||
|
|
||||||
|
#### **路由:`/xiaoshuo/douluodalu-123/zhang-5/2`**
|
||||||
|
- `{intPage}` = '2'
|
||||||
|
- **Title**:
|
||||||
|
- `斗罗大陆 第5章 魂兽森林 - 这个是网站名` (若需分页,可加“- 第2页”,但需截断)
|
||||||
|
- **Keywords**:
|
||||||
|
- `斗罗大陆, 第5章, 魂兽森林, 唐家三少, 玄幻小说, 男生小说, 这个是网站名, 免费阅读`
|
||||||
|
- **Description**:
|
||||||
|
- `这个是网站名提供斗罗大陆第5章魂兽森林免费阅读,唐家三少创作的玄幻小说,畅享这个是站点域名!`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **实现代码(伪代码)**
|
||||||
|
```php
|
||||||
|
public function getChapter($strPinYin, $intNId, $intChapterSort, $intPage) {
|
||||||
|
// 假设从数据库获取小说和章节信息
|
||||||
|
$novel = Novel::find($intNId);
|
||||||
|
$chapter = Chapter::where('novel_id', $intNId)->where('sort', $intChapterSort)->first();
|
||||||
|
|
||||||
|
$replacements = [
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteTitle}' => '这个是网站标题',
|
||||||
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
|
'{strNovelName}' => $novel->title ?? '',
|
||||||
|
'{strNovelChapterName}' => $chapter->title ?? '',
|
||||||
|
'{strNovelChapterSort}' => $intChapterSort,
|
||||||
|
'{intPage}' => $intPage,
|
||||||
|
'{strNovelAuthor}' => $novel->author ?? '',
|
||||||
|
'{strNovelCategoryName}' => $novel->category ?? '',
|
||||||
|
'{strNovelSex}' => $novel->sex === 'boys' ? '男生' : '女生',
|
||||||
|
'{strNovelStatus}' => $novel->status === 'ongoing' ? '连载' : '完结',
|
||||||
|
'{strNovelDescription}' => '',
|
||||||
|
'{strSearchKeywords}' => ''
|
||||||
|
];
|
||||||
|
|
||||||
|
$title = "{strNovelName} 第{strNovelChapterSort}章 {strNovelChapterName} - {strSiteName}";
|
||||||
|
$keywords = "{strNovelName}, 第{strNovelChapterSort}章, {strNovelChapterName}, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strSiteName}, 免费阅读";
|
||||||
|
$description = "{strSiteName}提供{strNovelName}第{strNovelChapterSort}章{strNovelChapterName}免费阅读,{strNovelAuthor}创作的{strNovelCategoryName}小说,畅享{strSiteDomain}!";
|
||||||
|
|
||||||
|
foreach ($replacements as $key => $value) {
|
||||||
|
$title = str_replace($key, $value, $title);
|
||||||
|
$keywords = str_replace($key, $value, $keywords);
|
||||||
|
$description = str_replace($key, $value, $description);
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('chapter', [
|
||||||
|
'title' => $title,
|
||||||
|
'keywords' => $keywords,
|
||||||
|
'description' => $description,
|
||||||
|
'novel' => $novel,
|
||||||
|
'chapter' => $chapter
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **SEO 优化亮点**
|
||||||
|
1. **章节精准**:`{strNovelName} 第{strNovelChapterSort}章 {strNovelChapterName}` 匹配用户搜索具体章节的习惯。
|
||||||
|
2. **关键词丰富**:包含小说名、章节、作者、分类等多维度词。
|
||||||
|
3. **分页支持**:`{intPage}` 可灵活扩展,若章节内容分多页,可在 Title 或 Description 中体现。
|
||||||
|
4. **品牌融入**:`{strSiteName}` 和 `{strSiteDomain}` 提升网站辨识度。
|
||||||
|
5. **吸引点击**:突出“免费阅读”和“畅享”,契合用户需求。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **与分类案例的区别**
|
||||||
|
- **分类页**:聚焦筛选条件(如“男生玄幻连载小说”),多分页。
|
||||||
|
- **章节页**:聚焦具体章节(如“斗罗大陆 第5章”),单章节内容。
|
||||||
|
|
||||||
|
这个 TKD 模板是小说章节页的最优 SEO 方案。如果需要调整(比如更短的 Title 或分页处理),可以告诉我!
|
||||||
195
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/小说详情页TKD设计.md
Normal file
195
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/小说详情页TKD设计.md
Normal file
@@ -0,0 +1,195 @@
|
|||||||
|
最牛的seo 优化大师
|
||||||
|
这个是 替换标识
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
|
'{strSiteDescription}' => '这个是网站描述',
|
||||||
|
'{strIndexTitle}' => '这个是首页Title',
|
||||||
|
'{strIndexKeywords}' => '这个是首页Keywords',
|
||||||
|
'{strIndexDescription}' => '这个是首页Description',
|
||||||
|
'{strNovelName}' => '这个是当前页面小说描述',
|
||||||
|
'{strNovelChapterName}' => '当前页面小说章节名字',
|
||||||
|
'{strNovelChapterSort}' => '当前页面小说章节排序号',
|
||||||
|
'{strNovelCategoryName}' => '当前页面小说分类名字',
|
||||||
|
'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
|
||||||
|
'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
|
||||||
|
'{intPage}' => '当前页面分页页码',
|
||||||
|
'{strNovelAuthor}' => '小说作者',
|
||||||
|
'{strNovelDescription}' => '小说简介',
|
||||||
|
'{strSearchKeywords}' => '搜索关键词',
|
||||||
|
|
||||||
|
|
||||||
|
这个是小说详情页面的路由
|
||||||
|
/xiaoshuo/{strPinYin}-{intNId}
|
||||||
|
|
||||||
|
请根据路由和上面的替换标识,你帮忙设计一个最友好seo的 tkd 替换模板
|
||||||
|
案列-分类的:
|
||||||
|
title : '{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页'
|
||||||
|
keywords: '{strNovelCategoryName}, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读'
|
||||||
|
description: '{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费阅读,第{intPage}页汇聚热门作品,欢迎体验{strSiteDomain}!'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
好的,我会根据你提供的小说详情页面路由 `/xiaoshuo/{strPinYin}-{intNId}` 和替换标识,设计一个最优的 SEO 友好的 TKD 模板。小说详情页面与分类页面不同,它聚焦于具体的小说,因此需要突出小说的标题、作者、分类等信息,同时融入网站品牌和吸引点击的元素。以下是我的设计:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **分析**
|
||||||
|
#### **路由特点**
|
||||||
|
- **路由**:`/xiaoshuo/{strPinYin}-{intNId}`
|
||||||
|
- `{strPinYin}`:小说的拼音(如小说名的拼音,用于 URL 可读性)。
|
||||||
|
- `{intNId}`:小说 ID(唯一标识符)。
|
||||||
|
- **页面类型**:小说详情页,通常展示小说标题、作者、简介、分类、状态等信息。
|
||||||
|
- **SEO 目标**:
|
||||||
|
- 突出具体小说(如 `{strNovelName}`)。
|
||||||
|
- 融入分类、性别、状态等信息,提升相关性。
|
||||||
|
- 吸引用户点击阅读。
|
||||||
|
|
||||||
|
#### **替换标识使用**
|
||||||
|
- **核心字段**:
|
||||||
|
- `{strNovelName}`:小说标题。
|
||||||
|
- `{strNovelAuthor}`:小说作者。
|
||||||
|
- `{strNovelCategoryName}`:小说分类。
|
||||||
|
- `{strNovelSex}`:男生/女生小说。
|
||||||
|
- `{strNovelStatus}`:连载/完结。
|
||||||
|
- `{strSiteName}`、 `{strSiteDomain}`:品牌词。
|
||||||
|
- **不适用字段**:
|
||||||
|
- `{intPage}`:详情页通常无分页,设为默认值 1 或留空。
|
||||||
|
- `{strNovelChapterName}`、 `{strNovelChapterSort}`:更适合章节页面。
|
||||||
|
- `{strSearchKeywords}`:搜索页专用。
|
||||||
|
|
||||||
|
#### **SEO 优化原则**
|
||||||
|
- **Title**:简洁(60 字符内),包含小说名和品牌词。
|
||||||
|
- **Keywords**:覆盖小说名、分类、作者等高相关性词。
|
||||||
|
- **Description**:吸引点击,融入简介和免费阅读亮点。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **优化后的 TKD 模板**
|
||||||
|
以下是专为小说详情页面设计的 TKD 模板:
|
||||||
|
|
||||||
|
#### **1. Title**(控制在 60 字符以内)
|
||||||
|
- **模板**:`{strNovelName} - {strNovelAuthor} - {strSiteName} - 免费阅读`
|
||||||
|
- **说明**:
|
||||||
|
- `{strNovelName}`:核心关键词,放在首位吸引搜索。
|
||||||
|
- `{strNovelAuthor}`:增加作者相关搜索的匹配度。
|
||||||
|
- `{strSiteName}`:品牌词。
|
||||||
|
- “免费阅读”:提升点击率。
|
||||||
|
- **示例**(假设小说名为“斗罗大陆”,作者为“唐家三少”):
|
||||||
|
- `斗罗大陆 - 唐家三少 - 这个是网站名 - 免费阅读`
|
||||||
|
|
||||||
|
#### **2. Keywords**(5-10 个核心词)
|
||||||
|
- **模板**:`{strNovelName}, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读`
|
||||||
|
- **说明**:
|
||||||
|
- `{strNovelName}` 和 `{strNovelAuthor}`:具体小说的核心词。
|
||||||
|
- `{strNovelCategoryName}小说`、 `{strNovelSex}小说`、 `{strNovelStatus}小说`:分类相关词。
|
||||||
|
- `{strSiteName}`:品牌词。
|
||||||
|
- “免费阅读”:高频行业词。
|
||||||
|
- **示例**:
|
||||||
|
- `斗罗大陆, 唐家三少, 玄幻小说, 男生小说, 连载小说, 这个是网站名, 免费阅读`
|
||||||
|
|
||||||
|
#### **3. Description**(150-160 字符)
|
||||||
|
- **模板**:`{strSiteName}提供{strNovelName}免费在线阅读,{strNovelAuthor}创作的{strNovelCategoryName}{strNovelStatus}小说,{strNovelDescription},欢迎体验{strSiteDomain}!`
|
||||||
|
- **说明**:
|
||||||
|
- `{strSiteName}` 和 `{strSiteDomain}`:品牌露出。
|
||||||
|
- `{strNovelName}` 和 `{strNovelAuthor}`:突出小说和作者。
|
||||||
|
- `{strNovelCategoryName}{strNovelStatus}小说`:分类和状态信息。
|
||||||
|
- `{strNovelDescription}`:简介吸引用户(需控制长度)。
|
||||||
|
- **示例**(假设简介为“少年逆天崛起”):
|
||||||
|
- `这个是网站名提供斗罗大陆免费在线阅读,唐家三少创作的玄幻连载小说,少年逆天崛起,欢迎体验这个是站点域名!`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **参数映射**
|
||||||
|
- `{strNovelName}`:从数据库根据 `{intNId}` 获取小说标题。
|
||||||
|
- `{strNovelAuthor}`:从数据库获取作者名。
|
||||||
|
- `{strNovelCategoryName}`:从数据库获取分类(如“玄幻”)。
|
||||||
|
- `{strNovelSex}`:从数据库获取性别(如“男生”)。
|
||||||
|
- `{strNovelStatus}`:从数据库获取状态(如“连载”)。
|
||||||
|
- `{strNovelDescription}`:从数据库获取简介(需截断至合适长度)。
|
||||||
|
- `{strSiteName}` → '这个是网站名'
|
||||||
|
- `{strSiteDomain}` → '这个是站点域名'
|
||||||
|
- `{strSiteTitle}` → '这个是网站标题'
|
||||||
|
- `{strSiteKeywords}` → '这个是网站关键字'
|
||||||
|
- `{intPage}` → 1(详情页无分页)
|
||||||
|
- `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strSearchKeywords}` → 空
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **完整拼接示例**
|
||||||
|
#### **路由:`/xiaoshuo/douluodalu-123`**
|
||||||
|
- 假设:
|
||||||
|
- `{strNovelName}` = '斗罗大陆'
|
||||||
|
- `{strNovelAuthor}` = '唐家三少'
|
||||||
|
- `{strNovelCategoryName}` = '玄幻'
|
||||||
|
- `{strNovelSex}` = '男生'
|
||||||
|
- `{strNovelStatus}` = '连载'
|
||||||
|
- `{strNovelDescription}` = '少年逆天崛起,成就无上斗罗'
|
||||||
|
- **Title**:
|
||||||
|
- `斗罗大陆 - 唐家三少 - 这个是网站名 - 免费阅读`
|
||||||
|
- **Keywords**:
|
||||||
|
- `斗罗大陆, 唐家三少, 玄幻小说, 男生小说, 连载小说, 这个是网站名, 免费阅读`
|
||||||
|
- **Description**:
|
||||||
|
- `这个是网站名提供斗罗大陆免费在线阅读,唐家三少创作的玄幻连载小说,少年逆天崛起,成就无上斗罗,欢迎体验这个是站点域名!`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **实现代码(伪代码)**
|
||||||
|
```php
|
||||||
|
public function getNovelDetail($strPinYin, $intNId) {
|
||||||
|
// 假设从数据库获取小说信息
|
||||||
|
$novel = Novel::find($intNId); // 示例,需替换为实际逻辑
|
||||||
|
|
||||||
|
$replacements = [
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteTitle}' => '这个是网站标题',
|
||||||
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
|
'{strNovelName}' => $novel->title ?? '',
|
||||||
|
'{strNovelAuthor}' => $novel->author ?? '',
|
||||||
|
'{strNovelCategoryName}' => $novel->category ?? '',
|
||||||
|
'{strNovelSex}' => $novel->sex === 'boys' ? '男生' : '女生',
|
||||||
|
'{strNovelStatus}' => $novel->status === 'ongoing' ? '连载' : '完结',
|
||||||
|
'{strNovelDescription}' => substr($novel->description ?? '', 0, 50), // 截断简介
|
||||||
|
'{intPage}' => 1, // 详情页无分页
|
||||||
|
'{strNovelChapterName}' => '',
|
||||||
|
'{strNovelChapterSort}' => '',
|
||||||
|
'{strSearchKeywords}' => ''
|
||||||
|
];
|
||||||
|
|
||||||
|
$title = "{strNovelName} - {strNovelAuthor} - {strSiteName} - 免费阅读";
|
||||||
|
$keywords = "{strNovelName}, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读";
|
||||||
|
$description = "{strSiteName}提供{strNovelName}免费在线阅读,{strNovelAuthor}创作的{strNovelCategoryName}{strNovelStatus}小说,{strNovelDescription},欢迎体验{strSiteDomain}!";
|
||||||
|
|
||||||
|
foreach ($replacements as $key => $value) {
|
||||||
|
$title = str_replace($key, $value, $title);
|
||||||
|
$keywords = str_replace($key, $value, $keywords);
|
||||||
|
$description = str_replace($key, $value, $description);
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('novel_detail', [
|
||||||
|
'title' => $title,
|
||||||
|
'keywords' => $keywords,
|
||||||
|
'description' => $description,
|
||||||
|
'novel' => $novel
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **SEO 优化亮点**
|
||||||
|
1. **小说名优先**:`{strNovelName}` 放在 Title 和 Keywords 首位,匹配用户搜索习惯(如“斗罗大陆 小说”)。
|
||||||
|
2. **作者强化**:`{strNovelAuthor}` 提升作者粉丝的搜索命中率。
|
||||||
|
3. **分类信息**:`{strNovelCategoryName}` 和 `{strNovelStatus}` 增加长尾词覆盖(如“玄幻连载小说”)。
|
||||||
|
4. **简介吸引**:`{strNovelDescription}` 简短展示小说亮点,激发阅读兴趣。
|
||||||
|
5. **品牌融入**:`{strSiteName}` 和 `{strSiteDomain}` 提升网站辨识度。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **与分类案例的区别**
|
||||||
|
- **分类页**(你的案例):聚焦类别(如“男生玄幻连载小说”),分页较多。
|
||||||
|
- **详情页**(此设计):聚焦具体小说(如“斗罗大陆”),无分页,突出标题和作者。
|
||||||
|
|
||||||
|
这个 TKD 模板是小说详情页的最优 SEO 方案。如果需要调整(比如更短的 Description 或更多关键词),可以告诉我!
|
||||||
100
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/搜索页Tkd.md
Normal file
100
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/搜索页Tkd.md
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
最牛的seo 优化大师
|
||||||
|
这个是 替换标识
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
|
'{strSiteDescription}' => '这个是网站描述',
|
||||||
|
'{strIndexTitle}' => '这个是首页Title',
|
||||||
|
'{strIndexKeywords}' => '这个是首页Keywords',
|
||||||
|
'{strIndexDescription}' => '这个是首页Description',
|
||||||
|
'{strNovelName}' => '这个是当前页面小说描述',
|
||||||
|
'{strNovelChapterName}' => '当前页面小说章节名字',
|
||||||
|
'{strNovelChapterSort}' => '当前页面小说章节排序号',
|
||||||
|
'{strNovelCategoryName}' => '当前页面小说分类名字',
|
||||||
|
'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
|
||||||
|
'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
|
||||||
|
'{intPage}' => '当前页面分页页码',
|
||||||
|
'{strNovelAuthor}' => '小说作者',
|
||||||
|
'{strNovelDescription}' => '小说简介',
|
||||||
|
'{strSearchKeywords}' => '搜索关键词',
|
||||||
|
|
||||||
|
|
||||||
|
这个是搜索页面的路由,公用一套视图模板
|
||||||
|
/search?keyword=jj&page=1
|
||||||
|
|
||||||
|
|
||||||
|
请根据路由和上面的替换标识,你帮忙设计一个最友好seo的 tkd 替换模板
|
||||||
|
案列-分类的:
|
||||||
|
title : '{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页'
|
||||||
|
keywords: '{strNovelCategoryName}, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读'
|
||||||
|
description: '{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费阅读,第{intPage}页汇聚热门作品,欢迎体验{strSiteDomain}!'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
根据你提供的搜索页面路由 `/search?keyword=jj&page=1` 和替换标识,我将为你设计一个针对搜索页面的 **SEO 友好** 的 TKD(Title、Keywords、Description)替换模板。搜索页面的 TKD 需要兼顾搜索引擎的抓取规则和用户体验,突出搜索关键词、分页信息以及站点品牌,同时保持自然流畅的语言。
|
||||||
|
|
||||||
|
以下是设计思路和最终模板:
|
||||||
|
|
||||||
|
### 设计思路
|
||||||
|
1. **Title(标题)**:
|
||||||
|
- 突出 `{strSearchKeywords}`(搜索关键词),这是搜索页面的核心。
|
||||||
|
- 加入 `{strSiteName}` 和 `{intPage}`,强化品牌和分页信息。
|
||||||
|
- 保持标题长度在 60 个字符以内(中文算 2 个字符),避免被搜索引擎截断。
|
||||||
|
- 使用分隔符(如 `-` 或 `|`)增强可读性。
|
||||||
|
|
||||||
|
2. **Keywords(关键词)**:
|
||||||
|
- 包含 `{strSearchKeywords}` 作为主关键词。
|
||||||
|
- 搭配站点品牌 `{strSiteName}` 和通用修饰词(如“免费阅读”)。
|
||||||
|
- 避免堆砌,保持 5-7 个核心词组,简洁且相关。
|
||||||
|
|
||||||
|
3. **Description(描述)**:
|
||||||
|
- 以 `{strSearchKeywords}` 开头,吸引用户点击。
|
||||||
|
- 融入 `{strSiteName}`、 `{strSiteDomain}` 和 `{intPage}`,提升品牌曝光。
|
||||||
|
- 控制在 150-160 个字符以内,确保完整显示在搜索结果中。
|
||||||
|
- 添加号召性语言(如“立即体验”),提升点击率。
|
||||||
|
|
||||||
|
### 搜索页面 TKD 替换模板
|
||||||
|
基于以上思路,结合你的路由和替换标识,我设计如下模板:
|
||||||
|
|
||||||
|
#### Title
|
||||||
|
```
|
||||||
|
'{strSearchKeywords} - {strSiteName}搜索 - 第{intPage}页'
|
||||||
|
```
|
||||||
|
- **示例**:输入 `keyword=jj&page=1` 时,生成:
|
||||||
|
`jj - 这个是网站名搜索 - 第1页`
|
||||||
|
- **解析**:标题简洁,直观展示搜索关键词,品牌名靠后,分页信息明确,适合搜索引擎和用户快速理解。
|
||||||
|
|
||||||
|
#### Keywords
|
||||||
|
```
|
||||||
|
'{strSearchKeywords}, {strSiteName}, 免费阅读, 在线搜索, 第{intPage}页'
|
||||||
|
```
|
||||||
|
- **示例**:输入 `keyword=jj&page=1` 时,生成:
|
||||||
|
`jj, 这个是网站名, 免费阅读, 在线搜索, 第1页`
|
||||||
|
- **解析**:关键词覆盖搜索词、站点名和通用阅读相关词,分页信息作为辅助,简洁不冗余。
|
||||||
|
|
||||||
|
#### Description
|
||||||
|
```
|
||||||
|
'{strSearchKeywords}搜索结果尽在{strSiteName},第{intPage}页提供免费阅读,访问{strSiteDomain}立即体验!'
|
||||||
|
```
|
||||||
|
- **示例**:输入 `keyword=jj&page=1` 时,生成:
|
||||||
|
`jj搜索结果尽在这个是网站名,第1页提供免费阅读,访问这个是站点域名立即体验!`
|
||||||
|
- **字符数**:约 50 个中文字符(100 字节),在搜索引擎显示范围内。
|
||||||
|
- **解析**:描述以搜索关键词开头,融入品牌和域名,结尾有行动号召,兼顾 SEO 和用户吸引。
|
||||||
|
|
||||||
|
### 优化后的特点
|
||||||
|
1. **动态适配**:模板根据 `{strSearchKeywords}` 和 `{intPage}` 动态生成,确保每个搜索页面 TKD 唯一,避免重复内容。
|
||||||
|
2. **SEO 友好**:标题和描述中关键词靠前,分页信息明确,符合搜索引擎对搜索结果页的偏好。
|
||||||
|
3. **用户体验**:语言自然,突出免费阅读和品牌,吸引用户点击。
|
||||||
|
4. **可扩展性**:如果未来需要调整(如加入小说分类或状态),模板可以轻松扩展。
|
||||||
|
|
||||||
|
### 与分类页面案例的对比
|
||||||
|
你的分类页面案例更偏向小说分类的结构化内容(包含 `{strNovelSex}`、 `{strNovelCategoryName}` 等),而搜索页面需要更灵活地围绕 `{strSearchKeywords}` 构建。搜索页面的 TKD 应尽量简洁,避免过多无关变量,确保聚焦用户输入的关键词。
|
||||||
|
|
||||||
|
### 如果需要调整
|
||||||
|
如果你希望在搜索页面加入更多变量(如 `{strNovelStatus}` 或 `{strNovelCategoryName}`),可以告诉我具体需求,我再帮你调整。例如:
|
||||||
|
- 如果搜索结果只限于某分类,可以加入 `{strNovelCategoryName}`:
|
||||||
|
```
|
||||||
|
Title: '{strSearchKeywords} - {strNovelCategoryName} - {strSiteName} - 第{intPage}页'
|
||||||
|
```
|
||||||
|
|
||||||
|
请告诉我你的想法或具体需求,我可以进一步优化!
|
||||||
192
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/男生女生页面TKD设计.md
Normal file
192
code/app/home/view/kuangyu/推广SEO过程设计记录/TKD/男生女生页面TKD设计.md
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
最牛的seo 优化大师
|
||||||
|
这个是 替换标识
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
|
'{strSiteDescription}' => '这个是网站描述',
|
||||||
|
'{strIndexTitle}' => '这个是首页Title',
|
||||||
|
'{strIndexKeywords}' => '这个是首页Keywords',
|
||||||
|
'{strIndexDescription}' => '这个是首页Description',
|
||||||
|
'{strNovelName}' => '这个是当前页面小说描述',
|
||||||
|
'{strNovelChapterName}' => '当前页面小说章节名字',
|
||||||
|
'{strNovelChapterSort}' => '当前页面小说章节排序号',
|
||||||
|
'{strNovelCategoryName}' => '当前页面小说分类名字',
|
||||||
|
'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
|
||||||
|
'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
|
||||||
|
'{intPage}' => '当前页面分页页码',
|
||||||
|
'{strNovelAuthor}' => '小说作者',
|
||||||
|
'{strNovelDescription}' => '小说简介',
|
||||||
|
'{strSearchKeywords}' => '搜索关键词',
|
||||||
|
|
||||||
|
|
||||||
|
这个是男生和女生的路由,公用一套视图模板
|
||||||
|
Route::get('/nansheng-xiaoshuo', [Novel::class, 'getNovelChannel'])->append(['boolIsMobile' => true, 'strChannel' => 'boys']);
|
||||||
|
Route::get('/nvsheng-xiaoshuo', [Novel::class, 'getNovelChannel'])->append(['boolIsMobile' => true, 'strChannel' => 'girls']);
|
||||||
|
|
||||||
|
|
||||||
|
请根据路由和上面的替换标识,你帮忙设计一个最友好seo的 tkd 替换模板
|
||||||
|
案列-分类的:
|
||||||
|
title : '{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页'
|
||||||
|
keywords: '{strNovelCategoryName}, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读'
|
||||||
|
description: '{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费阅读,第{intPage}页汇聚热门作品,欢迎体验{strSiteDomain}!'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
好的,我会根据你提供的路由和替换标识,设计一个最优的 SEO 友好的 TKD 模板,适用于男生和女生频道的公用视图模板(`/nansheng-xiaoshuo` 和 `/nvsheng-xiaoshuo`)。这个设计将结合你的案例,同时优化关键词密度、品牌曝光和用户吸引力。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **分析**
|
||||||
|
#### **路由特点**
|
||||||
|
- **路由**:
|
||||||
|
- `/nansheng-xiaoshuo`:男生小说频道,`strChannel = 'boys'`。
|
||||||
|
- `/nvsheng-xiaoshuo`:女生小说频道,`strChannel = 'girls'`。
|
||||||
|
- **参数**:
|
||||||
|
- `boolIsMobile = true`:适配移动端。
|
||||||
|
- 无具体分类 (`strCategory`) 和状态 (`strStatus`) 参数,因此这是一个频道首页,展示男生或女生小说的概览。
|
||||||
|
- `{intPage}` 在路由中未显式定义,但可能通过视图逻辑支持分页。
|
||||||
|
|
||||||
|
#### **替换标识**
|
||||||
|
- `{strNovelSex}`:从 `strChannel` 映射为“男生”或“女生”。
|
||||||
|
- `{strNovelCategoryName}` 和 `{strNovelStatus}`:频道首页无具体分类和状态,需调整为通用描述。
|
||||||
|
- `{strSiteName}`、 `{strSiteDomain}` 等:用于品牌强化。
|
||||||
|
- `{strNovelName}`、 `{strNovelChapterName}` 等:频道首页不适用,留空。
|
||||||
|
|
||||||
|
#### **SEO 目标**
|
||||||
|
- 突出频道特性(男生/女生小说)。
|
||||||
|
- 融入品牌词(网站名、域名)。
|
||||||
|
- 适配分页(如果有)。
|
||||||
|
- 吸引移动端用户(`boolIsMobile = true`)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **优化后的 TKD 模板**
|
||||||
|
以下是专为频道首页设计的 TKD 模板,基于你的案例并进一步优化:
|
||||||
|
|
||||||
|
#### **1. Title**(控制在 60 字符以内)
|
||||||
|
- **模板**:`{strNovelSex}小说 - {strSiteName} - 免费阅读 - 第{intPage}页`
|
||||||
|
- **说明**:
|
||||||
|
- `{strNovelSex}` 突出频道主题(男生/女生)。
|
||||||
|
- `{strSiteName}` 强化品牌。
|
||||||
|
- “免费阅读”吸引用户点击。
|
||||||
|
- `{intPage}` 仅在大于 1 时显示,避免首页面冗余。
|
||||||
|
|
||||||
|
#### **2. Keywords**(5-10 个核心词)
|
||||||
|
- **模板**:`{strNovelSex}小说, {strSiteKeywords}, 免费小说, 在线阅读, {strSiteName}`
|
||||||
|
- **说明**:
|
||||||
|
- `{strNovelSex}小说` 是核心关键词。
|
||||||
|
- `{strSiteKeywords}` 复用网站通用关键词。
|
||||||
|
- 添加“免费小说”“在线阅读”提升搜索覆盖。
|
||||||
|
|
||||||
|
#### **3. Description**(150-160 字符)
|
||||||
|
- **模板**:`{strSiteName}提供{strNovelSex}小说免费在线阅读,第{intPage}页精选热门作品,畅享{strSiteDomain},{strNovelSex}小说迷必备!`
|
||||||
|
- **说明**:
|
||||||
|
- `{strSiteName}` 和 `{strSiteDomain}` 提升品牌认知。
|
||||||
|
- “免费在线阅读”契合移动端用户习惯。
|
||||||
|
- “{strNovelSex}小说迷必备”增加用户粘性。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **参数映射**
|
||||||
|
- `{strNovelSex}`:
|
||||||
|
- `strChannel = 'boys'` → '男生'
|
||||||
|
- `strChannel = 'girls'` → '女生'
|
||||||
|
- `{strSiteName}` → '这个是网站名'
|
||||||
|
- `{strSiteDomain}` → '这个是站点域名'
|
||||||
|
- `{strSiteTitle}` → '这个是网站标题'
|
||||||
|
- `{strSiteKeywords}` → '这个是网站关键字'
|
||||||
|
- `{strSiteDescription}` → '这个是网站描述'
|
||||||
|
- `{intPage}` → 默认 1,若有分页逻辑则动态传入
|
||||||
|
- `{strNovelCategoryName}` → 空(频道首页无具体分类)
|
||||||
|
- `{strNovelStatus}` → 空(频道首页无状态筛选)
|
||||||
|
- `{strNovelName}`、 `{strNovelChapterName}`、 `{strNovelChapterSort}`、 `{strNovelAuthor}`、 `{strNovelDescription}`、 `{strSearchKeywords}` → 空(频道首页不适用)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **完整拼接示例**
|
||||||
|
#### **1. 男生频道首页:`/nansheng-xiaoshuo`(假设 intPage = 1)**
|
||||||
|
- **Title**: `男生小说 - 这个是网站名 - 免费阅读`
|
||||||
|
- **Keywords**: `男生小说, 这个是网站关键字, 免费小说, 在线阅读, 这个是网站名`
|
||||||
|
- **Description**: `这个是网站名提供男生小说免费在线阅读,第1页精选热门作品,畅享这个是站点域名,男生小说迷必备!`
|
||||||
|
|
||||||
|
#### **2. 女生频道首页:`/nvsheng-xiaoshuo`(假设 intPage = 1)**
|
||||||
|
- **Title**: `女生小说 - 这个是网站名 - 免费阅读`
|
||||||
|
- **Keywords**: `女生小说, 这个是网站关键字, 免费小说, 在线阅读, 这个是网站名`
|
||||||
|
- **Description**: `这个是网站名提供女生小说免费在线阅读,第1页精选热门作品,畅享这个是站点域名,女生小说迷必备!`
|
||||||
|
|
||||||
|
#### **3. 男生频道分页:`/nansheng-xiaoshuo`(假设 intPage = 2)**
|
||||||
|
- **Title**: `男生小说 - 这个是网站名 - 免费阅读 - 第2页`
|
||||||
|
- **Keywords**: `男生小说, 这个是网站关键字, 免费小说, 在线阅读, 这个是网站名`
|
||||||
|
- **Description**: `这个是网站名提供男生小说免费在线阅读,第2页精选热门作品,畅享这个是站点域名,男生小说迷必备!`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **实现代码(伪代码)**
|
||||||
|
```php
|
||||||
|
public function getNovelChannel($strChannel) {
|
||||||
|
// 映射表
|
||||||
|
$sexMap = [
|
||||||
|
'boys' => '男生',
|
||||||
|
'girls' => '女生'
|
||||||
|
];
|
||||||
|
|
||||||
|
// 替换标识赋值
|
||||||
|
$replacements = [
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteTitle}' => '这个是网站标题',
|
||||||
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
|
'{strSiteDescription}' => '这个是网站描述',
|
||||||
|
'{strNovelSex}' => $sexMap[$strChannel] ?? '',
|
||||||
|
'{strNovelCategoryName}' => '', // 频道首页无具体分类
|
||||||
|
'{strNovelStatus}' => '', // 频道首页无状态
|
||||||
|
'{intPage}' => request()->input('page', 1), // 默认第1页,假设分页通过查询参数传入
|
||||||
|
'{strNovelName}' => '',
|
||||||
|
'{strNovelChapterName}' => '',
|
||||||
|
'{strNovelChapterSort}' => '',
|
||||||
|
'{strNovelAuthor}' => '',
|
||||||
|
'{strNovelDescription}' => '',
|
||||||
|
'{strSearchKeywords}' => ''
|
||||||
|
];
|
||||||
|
|
||||||
|
// 动态生成 TKD
|
||||||
|
$pageStr = $replacements['{intPage}'] > 1 ? " - 第{intPage}页" : '';
|
||||||
|
$title = "{strNovelSex}小说 - {strSiteName} - 免费阅读{$pageStr}";
|
||||||
|
$keywords = "{strNovelSex}小说, {strSiteKeywords}, 免费小说, 在线阅读, {strSiteName}";
|
||||||
|
$description = "{strSiteName}提供{strNovelSex}小说免费在线阅读,第{intPage}页精选热门作品,畅享{strSiteDomain},{strNovelSex}小说迷必备!";
|
||||||
|
|
||||||
|
// 替换模板中的标识
|
||||||
|
foreach ($replacements as $key => $value) {
|
||||||
|
$title = str_replace($key, $value, $title);
|
||||||
|
$keywords = str_replace($key, $value, $keywords);
|
||||||
|
$description = str_replace($key, $value, $description);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回视图
|
||||||
|
return view('novel_channel', [
|
||||||
|
'title' => $title,
|
||||||
|
'keywords' => $keywords,
|
||||||
|
'description' => $description,
|
||||||
|
'channel' => $strChannel
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **SEO 优化亮点**
|
||||||
|
1. **核心关键词靠前**:`{strNovelSex}小说` 放在 Title 和 Description 开头,提升相关性。
|
||||||
|
2. **品牌强化**:`{strSiteName}` 和 `{strSiteDomain}` 融入 TKD,增加网站辨识度。
|
||||||
|
3. **移动端适配**:突出“免费在线阅读”,契合 `boolIsMobile = true` 的用户习惯。
|
||||||
|
4. **分页友好**:首页面简洁,后续页面自然融入 `{intPage}`,并可配合 `rel="next/prev"` 优化。
|
||||||
|
5. **通用性**:模板适用于男生和女生频道,公用一套视图。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **扩展建议**
|
||||||
|
- 如果频道首页支持分页,建议通过查询参数(如 `?page=2`)传入 `{intPage}`,并在代码中动态获取。
|
||||||
|
- 如果需要加入热门分类(如玄幻、言情),可以在 Description 中扩展描述,例如“涵盖玄幻、武侠等热门类型”。
|
||||||
|
- 若 `{strSiteKeywords}` 已包含“小说”相关词,可精简 Keywords,避免重复。
|
||||||
|
|
||||||
|
这个 TKD 模板是目前最优的 SEO 方案,兼顾了搜索排名和用户体验。如果有其他需求(比如具体分类或搜索页面),可以告诉我,我再调整!
|
||||||
@@ -18,27 +18,39 @@ class ConverterMovel
|
|||||||
'{strSiteDomain}' => '',
|
'{strSiteDomain}' => '',
|
||||||
'{strSiteKeywords}' => '',
|
'{strSiteKeywords}' => '',
|
||||||
'{strSiteDescription}' => '',
|
'{strSiteDescription}' => '',
|
||||||
|
'{strIndexTitle}' => '',
|
||||||
|
'{strIndexKeywords}' => '',
|
||||||
|
'{strIndexDescription}' => '',
|
||||||
'{strNovelName}' => '',
|
'{strNovelName}' => '',
|
||||||
'{strNovelChapterName}' => '',
|
'{strNovelChapterName}' => '',
|
||||||
'{strNovelChapterSort}' => '',
|
'{strNovelChapterSort}' => '',
|
||||||
'{strNovelCategoryName}' => '',
|
'{strNovelCategoryName}' => '',
|
||||||
|
'{strNovelSex}' => '',
|
||||||
|
'{strNovelStatus}' => '',
|
||||||
'{intPage}' => '',
|
'{intPage}' => '',
|
||||||
'{strNovelAuthor}' => '',
|
'{strNovelAuthor}' => '',
|
||||||
'{strNovelDescription}' => '',
|
'{strNovelDescription}' => '',
|
||||||
|
'{strSearchKeywords}' => '',
|
||||||
];
|
];
|
||||||
|
|
||||||
static public $arrDescription = [
|
static public $arrDescription = [
|
||||||
'{strSiteTitle}' => '这个是网站标题',
|
'{strSiteName}' => '这个是网站名',
|
||||||
'{strSiteDomain}' => '这个是站点域名',
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
'{strSiteKeywords}' => '这个是网站关键字',
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
'{strSiteDescription}' => '这个是网站描述',
|
'{strSiteDescription}' => '这个是网站描述',
|
||||||
'{strNovelName}' => '这个是当前页面小说标题',
|
'{strIndexTitle}' => '这个是首页Title',
|
||||||
|
'{strIndexKeywords}' => '这个是首页Keywords',
|
||||||
|
'{strIndexDescription}' => '这个是首页Description',
|
||||||
|
'{strNovelName}' => '这个是当前页面小说描述',
|
||||||
'{strNovelChapterName}' => '当前页面小说章节名字',
|
'{strNovelChapterName}' => '当前页面小说章节名字',
|
||||||
'{strNovelChapterSort}' => '当前页面小说章节排序号',
|
'{strNovelChapterSort}' => '当前页面小说章节排序号',
|
||||||
'{strNovelCategoryName}' => '当前页面小说分类名字',
|
'{strNovelCategoryName}' => '当前页面小说分类名字',
|
||||||
|
'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
|
||||||
|
'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
|
||||||
'{intPage}' => '当前页面分页页码',
|
'{intPage}' => '当前页面分页页码',
|
||||||
'{strNovelAuthor}' => '小说作者',
|
'{strNovelAuthor}' => '小说作者',
|
||||||
'{strNovelDescription}' => '小说简介',
|
'{strNovelDescription}' => '小说简介',
|
||||||
|
'{strSearchKeywords}' => '搜索关键词',
|
||||||
];
|
];
|
||||||
|
|
||||||
static private function getKey($strKey): string
|
static private function getKey($strKey): string
|
||||||
@@ -86,6 +98,8 @@ class ConverterMovel
|
|||||||
*/
|
*/
|
||||||
static public function convert(string $strSubject): string
|
static public function convert(string $strSubject): string
|
||||||
{
|
{
|
||||||
|
$strSubject = str_replace(array_keys(self::$arrMap), array_values(self::$arrMap), $strSubject);
|
||||||
|
|
||||||
return str_replace(array_keys(self::$arrMap), array_values(self::$arrMap), $strSubject);
|
return str_replace(array_keys(self::$arrMap), array_values(self::$arrMap), $strSubject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ class DomainModel extends BaseModel
|
|||||||
public function getFomartSubject($strKey) //, $intNum = 1, $boolRand = false)
|
public function getFomartSubject($strKey) //, $intNum = 1, $boolRand = false)
|
||||||
{
|
{
|
||||||
// echo $strKey;
|
// echo $strKey;
|
||||||
// //exit;
|
// exit;
|
||||||
// echo '<pre>';
|
// echo '<pre>';
|
||||||
// var_dump($this->t_cfg);
|
// var_dump($this->t_cfg);
|
||||||
// exit;
|
// exit;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ CREATE TABLE `admin_user` (
|
|||||||
`deleted_at` timestamp NULL DEFAULT NULL,
|
`deleted_at` timestamp NULL DEFAULT NULL,
|
||||||
PRIMARY KEY (`au_id`),
|
PRIMARY KEY (`au_id`),
|
||||||
UNIQUE KEY `au_name` (`au_name`)
|
UNIQUE KEY `au_name` (`au_name`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
@@ -49,7 +49,7 @@ CREATE TABLE `cai_ji_pei_zhi` (
|
|||||||
`cjpz_description` varchar(255) DEFAULT NULL,
|
`cjpz_description` varchar(255) DEFAULT NULL,
|
||||||
PRIMARY KEY (`cjpz_id`),
|
PRIMARY KEY (`cjpz_id`),
|
||||||
KEY `cjpz_code` (`cjpz_code`)
|
KEY `cjpz_code` (`cjpz_code`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
@@ -61,21 +61,24 @@ DROP TABLE IF EXISTS `domain`;
|
|||||||
/*!50503 SET character_set_client = utf8mb4 */;
|
/*!50503 SET character_set_client = utf8mb4 */;
|
||||||
CREATE TABLE `domain` (
|
CREATE TABLE `domain` (
|
||||||
`d_id` int NOT NULL AUTO_INCREMENT COMMENT '域名ID',
|
`d_id` int NOT NULL AUTO_INCREMENT COMMENT '域名ID',
|
||||||
`d_domain` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '域名',
|
`d_domain` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '域名',
|
||||||
`t_id` int DEFAULT NULL COMMENT '模板ID',
|
`t_id` int DEFAULT NULL COMMENT '模板ID',
|
||||||
`d_name` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '',
|
`d_name` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '站点名',
|
||||||
`d_keywords` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
`d_keywords` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '站点关键词',
|
||||||
`d_description` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
`d_description` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '站点描述',
|
||||||
`d_statis` text COLLATE utf8mb4_unicode_ci COMMENT '单域名统计',
|
`d_index_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '首页title模板',
|
||||||
|
`d_index_keywords` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '首页keywords模板',
|
||||||
|
`d_index_description` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '首页description模板',
|
||||||
|
`d_statis` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '单域名统计',
|
||||||
`d_logo_type` tinyint(1) DEFAULT NULL,
|
`d_logo_type` tinyint(1) DEFAULT NULL,
|
||||||
`d_text_log` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
`d_text_log` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
`d_img_log` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
`d_img_log` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
`d_content_encode` tinyint unsigned DEFAULT '0',
|
`d_content_encode` tinyint unsigned DEFAULT '0',
|
||||||
`t_cfg` json DEFAULT NULL,
|
`t_cfg` json DEFAULT NULL,
|
||||||
PRIMARY KEY (`d_id`),
|
PRIMARY KEY (`d_id`),
|
||||||
UNIQUE KEY `d_domain` (`d_domain`) USING BTREE,
|
UNIQUE KEY `d_domain` (`d_domain`) USING BTREE,
|
||||||
KEY `t_id` (`t_id`)
|
KEY `t_id` (`t_id`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='域名表';
|
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='域名表';
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
@@ -172,7 +175,7 @@ CREATE TABLE `plan_task` (
|
|||||||
PRIMARY KEY (`pt_id`) USING BTREE,
|
PRIMARY KEY (`pt_id`) USING BTREE,
|
||||||
KEY `pt_code` (`pt_code`) USING BTREE,
|
KEY `pt_code` (`pt_code`) USING BTREE,
|
||||||
KEY `pt_enable` (`pt_enable`) USING BTREE
|
KEY `pt_enable` (`pt_enable`) USING BTREE
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
|
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
@@ -187,7 +190,7 @@ CREATE TABLE `subject_fomart` (
|
|||||||
`sfg_id` int DEFAULT NULL COMMENT '所属格式化分组ID',
|
`sfg_id` int DEFAULT NULL COMMENT '所属格式化分组ID',
|
||||||
`sf_val` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '待格式化内容',
|
`sf_val` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '待格式化内容',
|
||||||
PRIMARY KEY (`sf_id`) USING BTREE
|
PRIMARY KEY (`sf_id`) USING BTREE
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
@@ -202,7 +205,7 @@ CREATE TABLE `subject_fomart_group` (
|
|||||||
`sfg_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
`sfg_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
`sfg_description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
|
`sfg_description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
|
||||||
PRIMARY KEY (`sfg_id`) USING BTREE
|
PRIMARY KEY (`sfg_id`) USING BTREE
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
@@ -220,7 +223,7 @@ CREATE TABLE `system_config` (
|
|||||||
`site_id` int DEFAULT '1' COMMENT '站点ID',
|
`site_id` int DEFAULT '1' COMMENT '站点ID',
|
||||||
PRIMARY KEY (`sc_id`),
|
PRIMARY KEY (`sc_id`),
|
||||||
KEY `site_id` (`site_id`)
|
KEY `site_id` (`site_id`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
@@ -233,12 +236,12 @@ DROP TABLE IF EXISTS `templates`;
|
|||||||
CREATE TABLE `templates` (
|
CREATE TABLE `templates` (
|
||||||
`t_id` int NOT NULL AUTO_INCREMENT COMMENT '视图模板ID',
|
`t_id` int NOT NULL AUTO_INCREMENT COMMENT '视图模板ID',
|
||||||
`t_default` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否默认模板',
|
`t_default` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否默认模板',
|
||||||
`t_code` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '模板编码',
|
`t_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '模板编码',
|
||||||
`t_path` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '模板位置',
|
`t_path` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '模板位置',
|
||||||
`t_cfg_template` json DEFAULT NULL COMMENT '模板需要配置的变量',
|
`t_cfg_template` json DEFAULT NULL COMMENT '模板需要配置的变量',
|
||||||
PRIMARY KEY (`t_id`),
|
PRIMARY KEY (`t_id`),
|
||||||
KEY `t_code` (`t_code`)
|
KEY `t_code` (`t_code`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='模板表';
|
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='模板表';
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
@@ -255,7 +258,7 @@ CREATE TABLE `zi_yuan_duan_dian` (
|
|||||||
`zydd_domain` varchar(255) DEFAULT NULL,
|
`zydd_domain` varchar(255) DEFAULT NULL,
|
||||||
PRIMARY KEY (`zydd_id`),
|
PRIMARY KEY (`zydd_id`),
|
||||||
KEY `zydd_code` (`zydd_code`)
|
KEY `zydd_code` (`zydd_code`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||||
|
|
||||||
@@ -267,4 +270,4 @@ CREATE TABLE `zi_yuan_duan_dian` (
|
|||||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
-- Dump completed on 2025-03-31 23:11:02
|
-- Dump completed on 2025-04-05 20:38:39
|
||||||
|
|||||||
@@ -3,80 +3,334 @@
|
|||||||
namespace database\seeders;;
|
namespace database\seeders;;
|
||||||
|
|
||||||
use app\model\TemplatesModel;
|
use app\model\TemplatesModel;
|
||||||
|
use app\model\SubjectFomartGroupModel;
|
||||||
|
use app\model\SubjectFomartModel;
|
||||||
|
|
||||||
class TemplateSeeder
|
class TemplateSeeder
|
||||||
{
|
{
|
||||||
static public function handle()
|
static public function handle()
|
||||||
{
|
{
|
||||||
$arrData = [
|
/**
|
||||||
|
* 替换模板分组 数据播种
|
||||||
|
* 狂雨模板
|
||||||
|
*/
|
||||||
|
$arrSubjectFomartGroupData = [
|
||||||
|
// TKD
|
||||||
|
'INDEX@INDEX@TITLE' => [
|
||||||
|
'description' => '首页Title 替换模板分组ID',
|
||||||
|
'sfg_id' => 1,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strIndexTitle}',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'INDEX@INDEX@KEYWORDS' => [
|
||||||
|
'description' => '首页Keywords 替换模板分组ID',
|
||||||
|
'sfg_id' => 2,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strIndexKeywords}',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'INDEX@INDEX@DESCRIPTION' => [
|
||||||
|
'description' => '首页Description 替换模板分组ID',
|
||||||
|
'sfg_id' => 3,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strIndexDescription}',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
|
||||||
|
'NOVEL@GETLIBRARY@TITLE' => [
|
||||||
|
'description' => '分类书库Title 替换模板分组ID',
|
||||||
|
'sfg_id' => 4,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETLIBRARY@KEYWORDS' => [
|
||||||
|
'description' => '分类书库Keywords 替换模板分组ID',
|
||||||
|
'sfg_id' => 5,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strNovelCategoryName}小说, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费小说, 在线阅读',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETLIBRARY@DESCRIPTION' => [
|
||||||
|
'description' => '分类书库Description 替换模板分组ID',
|
||||||
|
'sfg_id' => 6,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费在线阅读,第{intPage}页精选热门作品,畅享{strSiteDomain}!',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
|
||||||
|
'NOVEL@GETNOVELCHANNEL@TITLE' => [
|
||||||
|
'description' => '男女生Title 替换模板分组ID',
|
||||||
|
'sfg_id' => 7,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strNovelSex}小说 - {strSiteName} - 免费阅读 - 第{intPage}页',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETNOVELCHANNEL@KEYWORDS' => [
|
||||||
|
'description' => '男女生Keywords 替换模板分组ID',
|
||||||
|
'sfg_id' => 8,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strNovelSex}小说 - {strSiteKeywords} - 免费阅读 - 第{intPage}页',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETNOVELCHANNEL@DESCRIPTION' => [
|
||||||
|
'description' => '男女生Description 替换模板分组ID',
|
||||||
|
'sfg_id' => 9,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strNovelSex}小说 - {strSiteName} - 免费阅读 - 第{intPage}页',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
|
||||||
|
'NOVEL@GETNOVELINFO@TITLE' => [
|
||||||
|
'description' => '详情Title 替换模板分组ID',
|
||||||
|
'sfg_id' => 10,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strNovelName} - {strNovelAuthor} - {strSiteName} - 免费阅读',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETNOVELINFO@KEYWORDS' => [
|
||||||
|
'description' => '详情Keywords 替换模板分组ID',
|
||||||
|
'sfg_id' => 11,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strNovelName}, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETNOVELINFO@DESCRIPTION' => [
|
||||||
|
'description' => '详情Description 替换模板分组ID',
|
||||||
|
'sfg_id' => 12,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strSiteName}提供{strNovelName}免费在线阅读,{strNovelAuthor}创作的{strNovelCategoryName}{strNovelStatus}小说,{strNovelDescription},欢迎体验{strSiteDomain}!',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
|
||||||
|
'NOVEL@GETNOVELCHAPTERALL@TITLE' => [
|
||||||
|
'description' => '目录Title 替换模板分组ID',
|
||||||
|
'sfg_id' => 13,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strNovelName}章节目录 - {strSiteName} - 第{intPage}页',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETNOVELCHAPTERALL@KEYWORDS' => [
|
||||||
|
'description' => '目录Keywords 替换模板分组ID',
|
||||||
|
'sfg_id' => 14,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strNovelName}, {strNovelName}章节目录, {strNovelAuthor}, {strNovelCategoryName}小说, {strNovelSex}小说, {strSiteKeywords}, {strSiteName}',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETNOVELCHAPTERALL@DESCRIPTION' => [
|
||||||
|
'description' => '目录Description 替换模板分组ID',
|
||||||
|
'sfg_id' => 15,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strSiteName}提供{strNovelName}章节目录免费查看,第{intPage}页包含最新{strNovelStatus}章节,{strNovelAuthor}创作,畅享{strSiteDomain}!',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
|
||||||
|
'NOVEL@GETNOVELCHAPTER@TITLE' => [
|
||||||
|
'description' => '内容Title 替换模板分组ID',
|
||||||
|
'sfg_id' => 16,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strNovelName} 第{strNovelChapterSort}章 {strNovelChapterName} - {strSiteName}',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETNOVELCHAPTER@KEYWORDS' => [
|
||||||
|
'description' => '内容Keywords 替换模板分组ID',
|
||||||
|
'sfg_id' => 17,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strNovelName}, 第{strNovelChapterSort}章, {strNovelChapterName}, {strNovelAuthor}, {strSiteKeywords}, {strSiteName}, 免费阅读',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETNOVELCHAPTER@DESCRIPTION' => [
|
||||||
|
'description' => '内容Description 替换模板分组ID',
|
||||||
|
'sfg_id' => 18,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strSiteName}提供{strNovelName}第{strNovelChapterSort}章{strNovelChapterName}免费阅读,{strNovelAuthor}创作,畅享{strSiteDomain}!',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
|
||||||
|
'NOVEL@GETNOVELRANK@TITLE' => [
|
||||||
|
'description' => '排行榜Title 替换模板分组ID',
|
||||||
|
'sfg_id' => 19,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'小说排行榜 - {strSiteName} - 第{intPage}页',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETNOVELRANK@KEYWORDS' => [
|
||||||
|
'description' => '排行榜Keywords 替换模板分组ID',
|
||||||
|
'sfg_id' => 20,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'小说排行榜, 热门小说, 小说推荐, {strSiteKeywords}, {strSiteName}, 免费阅读',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETNOVELRANK@DESCRIPTION' => [
|
||||||
|
'description' => '排行榜Description 替换模板分组ID',
|
||||||
|
'sfg_id' => 21,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strSiteName}提供小说排行榜,第{intPage}页精选热门小说免费阅读,最新排行一览无余,畅享{strSiteDomain}!',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
|
||||||
|
'NOVEL@GETSEARCHNOVEL@TITLE' => [
|
||||||
|
'description' => '搜索页Title 替换模板分组ID',
|
||||||
|
'sfg_id' => 22,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strSearchKeywords} - 免费{strNovelSex}{strNovelCategoryName}小说阅读 - {strSiteName} - 第{intPage}页',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETSEARCHNOVEL@KEYWORDS' => [
|
||||||
|
'description' => '搜索页Keywords 替换模板分组ID',
|
||||||
|
'sfg_id' => 23,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strSearchKeywords}, {strNovelCategoryName}, {strNovelSex}小说, 免费小说, {strSiteName}, {strSiteDomain}',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL@GETSEARCHNOVEL@DESCRIPTION' => [
|
||||||
|
'description' => '搜索页Description 替换模板分组ID',
|
||||||
|
'sfg_id' => 24,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'{strSiteName}为您提供{strSearchKeywords}相关的{strNovelSex}{strNovelCategoryName}小说免费阅读资源。第{intPage}页精选热门作品,畅享高质量阅读体验,欢迎访问{strSiteDomain}!',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
|
||||||
|
// URL
|
||||||
|
'CATEGORY_INFO_URL' => [
|
||||||
|
'description' => '分类书库URL 替换模板分组ID',
|
||||||
|
'sfg_id' => 25,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'/shuku/{strGender}/{strCategory}/{strStatus}/page{intPage}',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NAN_SHENG_URL' => [
|
||||||
|
'description' => '男生URL 替换模板分组ID',
|
||||||
|
'sfg_id' => 26,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'/nansheng-xiaoshuo',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NV_SHENG_URL' => [
|
||||||
|
'description' => '女生URL 替换模板分组ID',
|
||||||
|
'sfg_id' => 27,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'/nvsheng-xiaoshuo',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'RANK_INFO_URL' => [
|
||||||
|
'description' => '排行榜URL 替换模板分组ID',
|
||||||
|
'sfg_id' => 28,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'/paihang/all',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NOVEL_INFO_URL' => [
|
||||||
|
'description' => '小说详情URL 替换模板分组ID',
|
||||||
|
'sfg_id' => 29,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'/xiaoshuo/{strPinYin}-{intNId}',
|
||||||
|
'/novel/{strPinYin}-{intNId}',
|
||||||
|
'/book/{strPinYin}-{intNId}',
|
||||||
|
'/xiaoshuo-{strPinYin}-{intNId}',
|
||||||
|
'/novel-{strPinYin}-{intNId}',
|
||||||
|
'/book-{strPinYin}-{intNId}',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'KAN_NOVEL_INFO_URL' => [
|
||||||
|
'description' => 'kan小说详情URL 替换模板分组ID',
|
||||||
|
'sfg_id' => 30,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'/kan-xiaoshuo/{strPinYin}-{intNId}',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'TABLE_INFO_URL' => [
|
||||||
|
'description' => '小说目录URL 替换模板分组ID',
|
||||||
|
'sfg_id' => 31,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'/xiaoshuo/{strPinYin}-{intNId}/mulu/{strOrder}/{intPage}',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'CONTENT_INFO_URL' => [
|
||||||
|
'description' => '内容章节URL 替换模板分组ID',
|
||||||
|
'sfg_id' => 32,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'/xiaoshuo/{strPinYin}-{intNId}/zhang-{intChapterSort}/{intChapterPage}',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'NEWS_CONTENT_INFO_URL' => [
|
||||||
|
'description' => '最新章节特殊页URL 替换模板分组ID',
|
||||||
|
'sfg_id' => 33,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'/books/{strPinYin}-{intNId}/chapter/latest',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'SEARCH_INFO_URL' => [
|
||||||
|
'description' => '搜索页URL 替换模板分组ID',
|
||||||
|
'sfg_id' => 34,
|
||||||
|
'arrSubjectFomart' => [
|
||||||
|
'/search?keywords={strSearchKeywords}&page={intPage}',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 视图模板 数据播种
|
||||||
|
*/
|
||||||
|
$arrTemplateData = [
|
||||||
[
|
[
|
||||||
't_id' => 1,
|
't_id' => 1,
|
||||||
't_default' => 1,
|
't_default' => 1,
|
||||||
't_code' => 'default',
|
't_code' => 'default',
|
||||||
't_path' => '/app/home/view/default/',
|
't_path' => '/app/home/view/default/',
|
||||||
't_cfg_template' => [
|
't_cfg_template' => $arrSubjectFomartGroupData,
|
||||||
'HOME@GETPCINDEX' => [
|
|
||||||
'description' => '首页Title 替换模板分组ID',
|
|
||||||
'sfg_id' => 0,
|
|
||||||
],
|
|
||||||
'NOVEL@GETNOVELINFO' => [
|
|
||||||
'description' => '小说详情TITLE 替换模板分组ID',
|
|
||||||
'sfg_id' => 0,
|
|
||||||
],
|
|
||||||
'NOVEL_INFO_URL' => [
|
|
||||||
'description' => '小说详情URL 替换模板分组ID',
|
|
||||||
'sfg_id' => 0,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
't_id' => 2,
|
't_id' => 2,
|
||||||
't_default' => 0,
|
't_default' => 0,
|
||||||
't_code' => 'kuangYu',
|
't_code' => 'kuangYu',
|
||||||
't_path' => '/app/home/view/kuangYu/',
|
't_path' => '/app/home/view/kuangYu/',
|
||||||
't_cfg_template' => [
|
't_cfg_template' => $arrSubjectFomartGroupData,
|
||||||
'INDEX@GETPCINDEX' => [
|
|
||||||
'description' => '首页Title 替换模板分组ID',
|
|
||||||
'sfg_id' => 0,
|
|
||||||
],
|
|
||||||
'NOVEL@GETNOVELINFO' => [
|
|
||||||
'description' => '小说详情TITLE 替换模板分组ID',
|
|
||||||
'sfg_id' => 0,
|
|
||||||
],
|
|
||||||
'NOVEL_INFO_URL' => [
|
|
||||||
'description' => '小说详情URL 替换模板分组ID',
|
|
||||||
'sfg_id' => 0,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
[
|
|
||||||
't_id' => 3,
|
|
||||||
't_default' => 0,
|
|
||||||
't_code' => 'haoZi',
|
|
||||||
't_path' => '/app/home/view/haoZi/',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
't_id' => 4,
|
|
||||||
't_default' => 0,
|
|
||||||
't_code' => 'xiongMao',
|
|
||||||
't_path' => '/app/home/view/xiongMao/',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
't_id' => 5,
|
|
||||||
't_default' => 0,
|
|
||||||
't_code' => 'shiKong',
|
|
||||||
't_path' => '/app/home/view/shiKong/',
|
|
||||||
],
|
],
|
||||||
|
// [
|
||||||
|
// 't_id' => 3,
|
||||||
|
// 't_default' => 0,
|
||||||
|
// 't_code' => 'haoZi',
|
||||||
|
// 't_path' => '/app/home/view/haoZi/',
|
||||||
|
// ],
|
||||||
|
// [
|
||||||
|
// 't_id' => 4,
|
||||||
|
// 't_default' => 0,
|
||||||
|
// 't_code' => 'xiongMao',
|
||||||
|
// 't_path' => '/app/home/view/xiongMao/',
|
||||||
|
// ],
|
||||||
|
// [
|
||||||
|
// 't_id' => 5,
|
||||||
|
// 't_default' => 0,
|
||||||
|
// 't_code' => 'shiKong',
|
||||||
|
// 't_path' => '/app/home/view/shiKong/',
|
||||||
|
// ],
|
||||||
|
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($arrData as $arrTemplate) {
|
self::initTemplate($arrTemplateData);
|
||||||
$TemplatesModel = TemplatesModel::where('t_id', $arrTemplate['t_id'])->find();
|
|
||||||
|
|
||||||
|
self::initSubjectFomartGroup($arrSubjectFomartGroupData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 视图模板 数据播种
|
||||||
|
*
|
||||||
|
* @param [type] $arrTemplateData
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
static public function initTemplate($arrTemplateData)
|
||||||
|
{
|
||||||
|
foreach ($arrTemplateData as $arrTemplate) {
|
||||||
|
$TemplatesModel = TemplatesModel::where('t_id', $arrTemplate['t_id'])->find();
|
||||||
|
foreach ($arrTemplate['t_cfg_template'] as $key => $arrCfgTemplate) {
|
||||||
|
unset($arrTemplate['t_cfg_template'][$key]['arrSubjectFomart']);
|
||||||
|
}
|
||||||
if (empty($TemplatesModel)) {
|
if (empty($TemplatesModel)) {
|
||||||
TemplatesModel::insert($arrTemplate);
|
TemplatesModel::insert($arrTemplate);
|
||||||
}else {
|
} else {
|
||||||
// 如果记录存在,更新记录
|
// 如果记录存在,更新记录
|
||||||
$TemplatesModel->update($arrTemplate);
|
$TemplatesModel->update($arrTemplate);
|
||||||
}
|
}
|
||||||
@@ -84,4 +338,47 @@ class TemplateSeeder
|
|||||||
|
|
||||||
TemplatesModel::flushCache();
|
TemplatesModel::flushCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 替换模板分组/替换模板 数据播种
|
||||||
|
*
|
||||||
|
* @param [type] $arrTemplateData
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
static public function initSubjectFomartGroup($arrSubjectFomartGroupData)
|
||||||
|
{
|
||||||
|
foreach ($arrSubjectFomartGroupData as $SubjectFomartGroup) {
|
||||||
|
$SubjectFomartGroupModel = SubjectFomartGroupModel::where('sfg_id', $SubjectFomartGroup['sfg_id'])->find();
|
||||||
|
|
||||||
|
$SubjectFomartGroupItem = [
|
||||||
|
'sfg_id' => $SubjectFomartGroup['sfg_id'],
|
||||||
|
'sfg_name' => str_replace(" 替换模板分组ID", "", $SubjectFomartGroup['description']),
|
||||||
|
'sfg_description' => str_replace(" 替换模板分组ID", "", $SubjectFomartGroup['description']),
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($SubjectFomartGroup['arrSubjectFomart'] as $SubjectFomart) {
|
||||||
|
$SubjectFomartItem = [
|
||||||
|
'sfg_id' => $SubjectFomartGroup['sfg_id'],
|
||||||
|
'sf_val' => $SubjectFomart
|
||||||
|
];
|
||||||
|
$SubjectFomartModel = SubjectFomartModel::where('sfg_id', $SubjectFomartItem['sfg_id'])->where('sf_val', $SubjectFomart)->find();
|
||||||
|
if (empty($SubjectFomartModel)) {
|
||||||
|
SubjectFomartModel::insert($SubjectFomartItem);
|
||||||
|
} else {
|
||||||
|
// 如果记录存在,更新记录
|
||||||
|
$SubjectFomartModel->where('sf_id', $SubjectFomartModel->sf_id)->update($SubjectFomartItem);
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
if (empty($SubjectFomartGroupModel)) {
|
||||||
|
SubjectFomartGroupModel::insert($SubjectFomartGroupItem);
|
||||||
|
} else {
|
||||||
|
// 如果记录存在,更新记录
|
||||||
|
$SubjectFomartGroupModel->update($SubjectFomartGroupItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SubjectFomartGroupModel::flushCache();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ use think\template\TagLib;
|
|||||||
class Site extends TagLib
|
class Site extends TagLib
|
||||||
{
|
{
|
||||||
protected $tags = [
|
protected $tags = [
|
||||||
|
'cfg' => ['attr' => 'code,encode', 'close' => 0],
|
||||||
'wz' => ['attr' => 'wz', 'close' => 0],
|
'wz' => ['attr' => 'wz', 'close' => 0],
|
||||||
'nurl' => ['attr' => 'n_id', 'close' => 0],
|
'nurl' => ['attr' => 'n_id', 'close' => 0],
|
||||||
'grm' => ['attr' => 'domain,code,line,diff', 'close' => 0],
|
'grm' => ['attr' => 'domain,code,line,diff', 'close' => 0],
|
||||||
@@ -15,7 +15,30 @@ class Site extends TagLib
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cfg 标签处理函数-系统配置
|
||||||
|
*
|
||||||
|
* @param array $tag
|
||||||
|
* @param string $content
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function tagCfg($tag)
|
||||||
|
{
|
||||||
|
$code = isset($tag['code']) ? $tag['code'] : '';
|
||||||
|
$encode = isset($tag['encode']) ? $tag['encode'] : 'false';
|
||||||
|
|
||||||
|
$parse = <<<EOD
|
||||||
|
<?php
|
||||||
|
\$strCfgVal = \\app\\model\\SystemConfigModel::getValByCode("{$code}");
|
||||||
|
if ("{$encode}" === "true") {
|
||||||
|
echo customEntities(\$strCfgVal);
|
||||||
|
} else {
|
||||||
|
echo \$strCfgVal;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
EOD;
|
||||||
|
return $parse;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文字处理函数
|
* 文字处理函数
|
||||||
|
|||||||
0
code/public/template/kuangyu/public/img/favicon.ico
Normal file
0
code/public/template/kuangyu/public/img/favicon.ico
Normal file
79
doc/tkd.md
Normal file
79
doc/tkd.md
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
## tkd 问ai 模板格式
|
||||||
|
|
||||||
|
这个是 替换标识
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteTitle}' => '这个是网站标题',
|
||||||
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
|
'{strSiteDescription}' => '这个是网站描述',
|
||||||
|
'{strNovelName}' => '这个是当前页面小说标题',
|
||||||
|
'{strNovelChapterName}' => '当前页面小说章节名字',
|
||||||
|
'{strNovelChapterSort}' => '当前页面小说章节排序号',
|
||||||
|
'{strNovelCategoryName}' => '当前页面小说分类名字',
|
||||||
|
'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
|
||||||
|
'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
|
||||||
|
'{intPage}' => '当前页面分页页码',
|
||||||
|
'{strNovelAuthor}' => '小说作者',
|
||||||
|
'{strNovelDescription}' => '小说简介',
|
||||||
|
'{strSearchKeywords}' => '搜索关键词',
|
||||||
|
|
||||||
|
这个是分类页的路由
|
||||||
|
Route::get('/shuku/:strGender/:strCategory/:strStatus/page:intPage', [Novel::class, 'getLibrary'])
|
||||||
|
->pattern([
|
||||||
|
'strGender' => 'nansheng-xiaoshuo|nvsheng-xiaoshuo|all',
|
||||||
|
'strCategory' => '[a-z\-]+',
|
||||||
|
'strStatus' => 'all|lianzai|wanjie',
|
||||||
|
'intPage' => '\d+'
|
||||||
|
])
|
||||||
|
->append(['boolIsMobile' => true]);
|
||||||
|
|
||||||
|
|
||||||
|
请根据路由和上面的替换标识,你帮忙设计一个最友好seo的 tkd 替换模板
|
||||||
|
案列-分类的:
|
||||||
|
title : '{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页'
|
||||||
|
keywords: '{strNovelCategoryName}, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读'
|
||||||
|
description: '{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费阅读,第{intPage}页汇聚热门作品,欢迎体验{strSiteDomain}!'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## tkd 问ai 模板格式
|
||||||
|
最牛的seo 优化大师
|
||||||
|
这个是 替换标识
|
||||||
|
'{strSiteName}' => '这个是网站名',
|
||||||
|
'{strSiteDomain}' => '这个是站点域名',
|
||||||
|
'{strSiteTitle}' => '这个是网站标题',
|
||||||
|
'{strSiteKeywords}' => '这个是网站关键字',
|
||||||
|
'{strSiteDescription}' => '这个是网站描述',
|
||||||
|
'{strNovelName}' => '这个是当前页面小说标题',
|
||||||
|
'{strNovelChapterName}' => '当前页面小说章节名字',
|
||||||
|
'{strNovelChapterSort}' => '当前页面小说章节排序号',
|
||||||
|
'{strNovelCategoryName}' => '当前页面小说分类名字',
|
||||||
|
'{strNovelSex}' => '当前页面小说是男生还是女生 小说',
|
||||||
|
'{strNovelStatus}' => '当前页面小说状态 是连载还是完结',
|
||||||
|
'{intPage}' => '当前页面分页页码',
|
||||||
|
'{strNovelAuthor}' => '小说作者',
|
||||||
|
'{strNovelDescription}' => '小说简介',
|
||||||
|
'{strSearchKeywords}' => '搜索关键词',
|
||||||
|
|
||||||
|
这个是男生和女生的路由,公用一套视图模板
|
||||||
|
Route::get('/nansheng-xiaoshuo', [Novel::class, 'getNovelChannel'])->append(['boolIsMobile' => true, 'strChannel' => 'boys']);
|
||||||
|
Route::get('/nvsheng-xiaoshuo', [Novel::class, 'getNovelChannel'])->append(['boolIsMobile' => true, 'strChannel' => 'girls']);
|
||||||
|
|
||||||
|
|
||||||
|
请根据路由和上面的替换标识,你帮忙设计一个最友好seo的 tkd 替换模板
|
||||||
|
案列-分类的:
|
||||||
|
title : '{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说 - {strSiteName} - 第{intPage}页'
|
||||||
|
keywords: '{strNovelCategoryName}, {strNovelSex}小说, {strNovelStatus}小说, {strSiteName}, 免费阅读'
|
||||||
|
description: '{strSiteName}提供{strNovelSex}{strNovelCategoryName}{strNovelStatus}小说免费阅读,第{intPage}页汇聚热门作品,欢迎体验{strSiteDomain}!'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user