debug
This commit is contained in:
47
doc/Install.md
Normal file
47
doc/Install.md
Normal file
@@ -0,0 +1,47 @@
|
||||
|
||||
|
||||
|
||||
### Nginx 配置
|
||||
|
||||
```shell
|
||||
location / {
|
||||
if (!-f $request_filename) {
|
||||
rewrite ^(.*)$ /index.php?s=/$1 last;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### 部署
|
||||
|
||||
- 1. 克隆代码
|
||||
- 2. 安装扩展 `composer install`
|
||||
- 3. 配置env文件 `cp .example.env .env`
|
||||
- 4. 上传logo 等图片到img public/statics/img/*
|
||||
- 5. 初始化数据库 `php think db:manage init`
|
||||
|
||||
|
||||
|
||||
### 升级
|
||||
- 1. 拉取代码
|
||||
- 2. 数据库升级 `php think migrate:run`
|
||||
- 2. 数据库升级 `php think mongo:manage`
|
||||
- 2. 数据播种 `php think db:manage seed`
|
||||
- 3. 关闭服务 `php think task stop`
|
||||
- 4. 启动服务 `php think task start -d`
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 7. 创建migrate //执行命令,创建一个操作文件,一定要用大驼峰写法,如下
|
||||
php think migrate:create AnyClassNameYouWant
|
||||
###
|
||||
/admin/system/initadminuser
|
||||
|
||||
keys "task:novel_source_id:*"
|
||||
|
||||
## 其它配置
|
||||
- 1. 统计代码要在广告配置添加
|
||||
- 2. 系统配置要吸怪对应的战斗信息
|
||||
- 3. seoTdk 管理要修改对应的tdk
|
||||
377
doc/TemplateTag.md
Normal file
377
doc/TemplateTag.md
Normal file
@@ -0,0 +1,377 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 系统配置
|
||||
{site:cfg code="YONG_JIU_DOMAIN" encode="false"/}
|
||||
|
||||
|
||||
# 广告配置
|
||||
{site:adcfg code="JIAO_YOU_XIA_ZAI" encode="false"/}
|
||||
|
||||
# 获取seo tdk
|
||||
{site:seotdk code="index" valcode="stc_title" encode="false"/}
|
||||
|
||||
# 获取 站点信息
|
||||
{site:site valcode="site_name" encode="false"/}
|
||||
|
||||
# 转码
|
||||
{site:wz wz="保存永久访问二维码" /}
|
||||
|
||||
# 小说分类 url
|
||||
{site:nflurl gender="$arrNovel[gender]" category="$arrNovel[category]" status="$arrNovel[status]" page="1"/}
|
||||
{site:nflurl gender="all" category="$arrNovel[category_pinyin]" status="all" page="1"/}
|
||||
|
||||
# 小说详情 url
|
||||
{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}
|
||||
|
||||
# 伪造小说详情 url
|
||||
{site:nnurl n_id="$arrNovel[n_id]" n_py="$arrNovel[n_name_pinyin]" n_fid="$ForgeNovel[n_forge_id]"/}
|
||||
|
||||
# 小说目录 url
|
||||
{site:nclurl n_id="$arrNovel[n_id]" n_py="$arrNovel[og_novel_pin_yin]" order="zheng" page="1"/}
|
||||
|
||||
# 小说章节 url
|
||||
{site:cpurl n_id="$arrNovel[n_id]" n_py="$arrNovel[og_novel_pin_yin]" c_sort="$Chapter[c_sort_num]" c_page="1"/}
|
||||
|
||||
# 小说最新章节 url
|
||||
{site:lcpurl n_id="$arrNovel[n_id]" n_py="$arrNovel[og_novel_pin_yin]" /}
|
||||
|
||||
# 搜索详情 url
|
||||
{site:souurl key="哈哈" p="1"/}
|
||||
|
||||
# 干扰码
|
||||
{site:grm domain="Request->DomainModel->d_domain" code="kuangyu-pc-index" line="50" diff="0" start="5" end="20" type="2" /}
|
||||
|
||||
|
||||
# 图片加密
|
||||
<img class="pre-img lozad" loading="lazy" src="/assets/images/loading_img_bg_default.jpg?v={site:cfg code='STATIC_FILE_VERSION' encode='false'/}"
|
||||
data-encrypted="true"
|
||||
data-src="{$vo.sp_fengmian_url}">
|
||||
|
||||
|
||||
<!-- <div class="page_num">
|
||||
{if condition='$intPage > 1 '}
|
||||
<a href='{$strPcPath}{site:nclurl n_id="$arrNovel[n_id]" n_py="$arrNovel[n_name_pinyin]" order="zheng" page="1"/}'
|
||||
class="z">
|
||||
{else}
|
||||
<a href="{if condition='$intPage > 1 '}/{$strFirstPath}/{$intNovelId}{if condition='$intPage > 2'}-{$intPage - 1}{/if}.html
|
||||
{else}/{$strFirstPath}/{$intNovelId}.html{/if}"
|
||||
class="z">
|
||||
{/if}
|
||||
|
||||
|
||||
上一页</a>
|
||||
<select onchange="self.location.href=this.value">
|
||||
{volist name="arrChapterPages" id="page"}
|
||||
<option value="/{$strFirstPath}/{$intNovelId}{if condition='$page.index neq 0'}-{$page.index+=1}{/if}.html"
|
||||
{if condition="$page.index == $intPage" }selected="selected" {/if}>
|
||||
第{$page.start}-{$page.end}章
|
||||
</option>
|
||||
{/volist}
|
||||
</select>
|
||||
<a href="{if condition='$intPage < $intTotalPages'}/{$strFirstPath}/{$intNovelId}-{$intPage + 1}.html{else}/{$strFirstPath}/{$intNovelId}-{$intTotalPages}.html{/if}"
|
||||
class="y">下一页</a>
|
||||
</div> -->
|
||||
|
||||
|
||||
|
||||
```php
|
||||
# 01、 获取多个小说数据并且遍历
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$count ?? '10'; # 查询条数
|
||||
$n_category ?? "all"; # 查询分类
|
||||
$sort_type ?? "all"; # 排序方式 news tuijian update
|
||||
$n_status ?? "all"; # 查询状态:
|
||||
# * * 'all' => '所有',
|
||||
# * * 'lianzai' => '连载中',
|
||||
# * * 'wanjie' => '已完结',
|
||||
$n_sex ?? "all"; # 查询性别:
|
||||
# * * 'all' => '所有',
|
||||
# * * 'man' => '男生',
|
||||
# * * 'women' => '女生',
|
||||
$diff_key ?? ""; # 缓存键值差异
|
||||
$cache_life ?? '0'; # 缓存时间,如果需要开启缓存,这个字段必须传,而且必须大于0
|
||||
$d_key ?? 'd_key'; # 查询出来的数据遍历的时候, 下标键变量的名称
|
||||
$d_val ?? 'd_val'; # 查询出来的数据遍历的时候, 值的名称
|
||||
# 样例
|
||||
{novel:list count="10" n_category="$Request.route.category" d_key="d_key" d_val="novel" cache_life="1000"}
|
||||
<li>
|
||||
Index: {$d_key}
|
||||
Title: {$novel.n_name}
|
||||
Author: {$novel.n_category}
|
||||
</li>
|
||||
{/novel:list}
|
||||
|
||||
|
||||
|
||||
# 02-1、 获取分页小说数据并且遍历
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$page ?? '1'; # 页码
|
||||
$limit ?? '10'; # 查询条数
|
||||
$n_category ?? "all"; # 查询分类
|
||||
$sort_type ?? "all"; # 排序方式
|
||||
$n_status ?? "all"; # 查询状态:
|
||||
# * * 'all' => '所有',
|
||||
# * * 'lianzai' => '连载中',
|
||||
# * * 'wanjie' => '已完结',
|
||||
$n_sex ?? "all"; # 查询性别:
|
||||
# * * 'all' => '所有',
|
||||
# * * 'man' => '男生',
|
||||
# * * 'women' => '女生',
|
||||
$key ?? ""; # 查询 搜索
|
||||
$button_num ?? "10"; # 分页按钮数量
|
||||
$diff_key ?? ""; # 缓存键值差异
|
||||
$cache_life ?? '0'; # 缓存时间,如果需要开启缓存,这个字段必须传,而且必须大于0
|
||||
$d_key ?? 'd_key'; # 查询出来的数据遍历的时候, 下标键变量的名称
|
||||
$d_val ?? 'd_val'; # 查询出来的数据遍历的时候, 值的名称
|
||||
$p_val ?? 'p_val'; # 分页页码数据,这是一个数组。和之前控制器渲染的那个数组一致的。
|
||||
$func ; # 这个参数是一个回调方法名,用来渲染分页页码数据的,该方法需要在 NovelService 类里面实现,func(array $arrParams, array $arrSort, array $arrNovel) generateCategoryPager generateSearchPager
|
||||
# 样例
|
||||
{novel:pager page="1" limit="10" n_category="$Request.route.category" d_key="d_key" d_val="novel" p_val="page_data" button_num="3" cache_life="1000" func="generateSearchPager"}
|
||||
<li>
|
||||
Index: {$d_key}
|
||||
Title: {$novel.n_name}
|
||||
Author: {$novel.n_category}
|
||||
</li>
|
||||
{/novel:pager}
|
||||
{php}var_dump($page_data);{/php}
|
||||
|
||||
# 02-2、 获取分页小说数据不遍历
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$page ?? '1'; # 页码
|
||||
$limit ?? '10'; # 查询条数
|
||||
$n_category ?? "all"; # 查询分类
|
||||
$sort_type ?? "all"; # 排序方式
|
||||
$n_status ?? "all"; # 查询状态:
|
||||
# * * 'all' => '所有',
|
||||
# * * 'lianzai' => '连载中',
|
||||
# * * 'wanjie' => '已完结',
|
||||
$n_sex ?? "all"; # 查询性别:
|
||||
# * * 'all' => '所有',
|
||||
# * * 'man' => '男生',
|
||||
# * * 'women' => '女生',
|
||||
$key ?? ""; # 查询 搜索
|
||||
$button_num ?? "10"; # 分页按钮数量
|
||||
$diff_key ?? ""; # 缓存键值差异
|
||||
$cache_life ?? '0'; # 缓存时间,如果需要开启缓存,这个字段必须传,而且必须大于0
|
||||
$d_key ?? 'd_key'; # 查询出来的数据遍历的时候, 下标键变量的名称
|
||||
$d_val ?? 'd_val'; # 查询出来的数据遍历的时候, 值的名称
|
||||
$p_val ?? 'p_val'; # 分页页码数据,这是一个数组。和之前控制器渲染的那个数组一致的。
|
||||
$export_name ?? 'n_num'; # 查询出来的 所有数据集合,所有数据都可以在里面取。
|
||||
$func ; # 这个参数是一个回调方法名,用来渲染分页页码数据的,该方法需要在 NovelService 类里面实现,func(array $arrParams, array $arrSort, array $arrNovel) generateCategoryPager generateSearchPager
|
||||
# 样例
|
||||
{novel:pagerexp page="$Request.get.page" limit="30"
|
||||
key="$Request.get.keyword"
|
||||
d_key="d_key"
|
||||
d_val="Novel" n
|
||||
p_val="page_data" button_num="10" cache_life="86400" func="generateSearchPager" export_name="resData" /}
|
||||
结构
|
||||
resData = [
|
||||
data = []
|
||||
p_data = [
|
||||
'total' => $intTotal,
|
||||
'page' => $intPage,
|
||||
'limit' => $intLimit,
|
||||
'pages' => ceil($intTotal / $intLimit)
|
||||
],
|
||||
]
|
||||
{php}var_dump($resData['p_data']);{/php}
|
||||
|
||||
# 03、获取替换模板替换后的数据
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$code ; # 替换模板编码
|
||||
# 样例
|
||||
{site:replace code="INDEX@INDEX@TITLE"}
|
||||
|
||||
|
||||
# 04、获取小说详情数据
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$n_id ; # 传入的小说ID
|
||||
$n_forge_id ; # 传入的伪造小说ID,默认值0,不伪造
|
||||
$n_key ; # 查询出来的数据待使用的变量名称
|
||||
# 样例
|
||||
{novel:info n_id="33" n_key="arrNovel01" n_forge_id="1125940" /}
|
||||
{$arrNovel01.n_name}
|
||||
|
||||
# 05、获取小说状态筛选条件
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$d_key ?? 'd_key'; # 查询出来的数据遍历的时候, 下标键变量的名称
|
||||
$d_val ?? 'd_val'; # 查询出来的数据遍历的时候, 值的名称
|
||||
# 样例
|
||||
{novel:status d_key="key" d_val="val"}
|
||||
<li> 键: {$key} - 值: {$val} </li>
|
||||
{/novel:status}
|
||||
|
||||
# 06、获取小说性别筛选条件
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$d_key ?? 'd_key'; # 查询出来的数据遍历的时候, 下标键变量的名称
|
||||
$d_val ?? 'd_val'; # 查询出来的数据遍历的时候, 值的名称
|
||||
# 样例
|
||||
{novel:sex d_key="key" d_val="val"}
|
||||
<li> 键: {$key} - 值: {$val} </li>
|
||||
{/novel:sex}
|
||||
|
||||
# 07、获取小说排序筛选条件
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$d_key ?? 'd_key'; # 查询出来的数据遍历的时候, 下标键变量的名称
|
||||
$d_val ?? 'd_val'; # 查询出来的数据遍历的时候, 值的名称
|
||||
# 样例
|
||||
{novel:sort d_key="key" d_val="val"}
|
||||
<li> 键: {$key} - 值: {$val} </li>
|
||||
{/novel:sort}
|
||||
|
||||
|
||||
# 08、获取小说分类筛选条件
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$d_key ?? 'd_key'; # 查询出来的数据遍历的时候, 下标键变量的名称
|
||||
$d_val ?? 'd_val'; # 查询出来的数据遍历的时候, 值的名称
|
||||
# 样例
|
||||
{novel:category d_key="key" d_val="val"}
|
||||
<li> 键: {$key} - 值: {$val} </li>
|
||||
{/novel:category}
|
||||
|
||||
|
||||
# 09、 获取指定小说多个章节数据并且遍历
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$count ?? '10'; # 查询条数
|
||||
$n_id ; # 小说ID
|
||||
$sort_type ?? "all"; # 排序方式
|
||||
$diff_key ?? ""; # 缓存键值差异
|
||||
$cache_life ?? '0'; # 缓存时间,如果需要开启缓存,这个字段必须传,而且必须大于0
|
||||
$d_key ?? 'd_key'; # 查询出来的数据遍历的时候, 下标键变量的名称
|
||||
$d_val ?? 'd_val'; # 查询出来的数据遍历的时候, 值的名称
|
||||
# 样例
|
||||
{chapter:list count="10" n_id="$Request.get.n_id" d_key="d_key" d_val="chapter" cache_life="1000"}
|
||||
<li>
|
||||
Index: {$d_key}
|
||||
章节名称: {$chapter.c_name}
|
||||
章节序号: {$chapter.c_sort_num}
|
||||
</li>
|
||||
{/chapter:list}
|
||||
|
||||
|
||||
# 10、 获取小说章节详情数据
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$n_id ; # 传入的小说ID
|
||||
$c_sort_num ; # 传入的章节索引
|
||||
$c_page ; # 传入的章节页码
|
||||
$n_key ; # 查询出来的数据待使用的变量名称
|
||||
# 样例
|
||||
{chapter:info n_id="1" c_sort_num="200" c_page="0" c_key="arrChapter01" /}
|
||||
{$arrChapter01.c_name}
|
||||
|
||||
|
||||
# 11-1、 获取指定小说章节分页数据并且遍历
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$page ?? '1'; # 页码
|
||||
$limit ?? '10'; # 查询条数
|
||||
$n_id ; # 小说ID
|
||||
$sort_type ?? "all"; # 排序方式
|
||||
$button_num ?? "10"; # 分页按钮数量
|
||||
|
||||
$diff_key ?? ""; # 缓存键值差异
|
||||
$cache_life ?? '0'; # 缓存时间,如果需要开启缓存,这个字段必须传,而且必须大于0
|
||||
$d_key ?? 'd_key'; # 查询出来的数据遍历的时候, 下标键变量的名称
|
||||
$d_val ?? 'd_val'; # 查询出来的数据遍历的时候, 值的名称
|
||||
$p_val ?? 'p_val'; # 分页页码数据,这是一个数组。和之前控制器渲染的那个数组一致的。
|
||||
$func ; # 这个参数是一个回调方法名,用来渲染分页页码数据的,该方法需要在 NovelService 类里面实现,func(array $arrParams, array $arrSort, array $arrNovel)
|
||||
# 样例
|
||||
{chapter:pager page="$Request.get.page" limit="10" n_id="$Request.get.n_id" d_key="d_key" d_val="chapter" cache_life="1000" button_num="3" sort_type="dao" func="generateChapterPager"}
|
||||
<li>
|
||||
Index: {$d_key}
|
||||
章节名称: {$chapter.c_name}
|
||||
章节序号: {$chapter.c_sort_num}
|
||||
</li>
|
||||
{/chapter:pager}
|
||||
|
||||
# 11-2、 获取分页小说章节数据不遍历
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$page ?? '1'; # 页码
|
||||
$limit ?? '10'; # 查询条数
|
||||
$n_id ; # 小说ID
|
||||
$sort_type ?? "all"; # 排序方式
|
||||
$button_num ?? "10"; # 分页按钮数量
|
||||
|
||||
$diff_key ?? ""; # 缓存键值差异
|
||||
$cache_life ?? '0'; # 缓存时间,如果需要开启缓存,这个字段必须传,而且必须大于0
|
||||
$d_key ?? 'd_key'; # 查询出来的数据遍历的时候, 下标键变量的名称
|
||||
$d_val ?? 'd_val'; # 查询出来的数据遍历的时候, 值的名称
|
||||
$p_val ?? 'p_val'; # 分页页码数据,这是一个数组。和之前控制器渲染的那个数组一致的。
|
||||
$export_name ?? 'n_num'; # 查询出来的 所有数据集合,所有数据都可以在里面取。
|
||||
$func ; # 这个参数是一个回调方法名,用来渲染分页页码数据的,该方法需要在 NovelService 类里面实现,func(array $arrParams, array $arrSort, array $arrNovel) generateCategoryPager generateSearchPager
|
||||
# 样例
|
||||
{chapter:pagerexp page="$Request.get.page" page="1" limit="10" n_id="$Request.get.n_id" d_key="d_key" d_val="chapter" cache_life="1000" button_num="3" sort_type="$Request.route.strOrder" func="generateChapterPager" export_name="resData" /}
|
||||
结构
|
||||
resData = [
|
||||
data = []
|
||||
p_data = [
|
||||
'pager' => []
|
||||
'total' => $intTotal,
|
||||
'page' => $intPage,
|
||||
'limit' => $intLimit,
|
||||
'pages' => ceil($intTotal / $intLimit)
|
||||
],
|
||||
]
|
||||
{php}var_dump($resData['p_data']);{/php}
|
||||
|
||||
# 12、 获取干扰码
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
|
||||
$page_code ?? ""; # 页面编码
|
||||
$diff ?? ""; # 差异值
|
||||
$limit ?? '1'; # 查询条数
|
||||
# 样例
|
||||
{site:grm page_code="fdasfadsf" diff="fadsfdsa" num="10" g_key="arrGrm" /}
|
||||
{php}var_dump($arrGrm);{/php}
|
||||
|
||||
|
||||
# 13、 获取指定类型小说排行榜并且遍历
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$count ?? '10'; # 查询条数
|
||||
$sort_type ?? "daily"; # 排序方式:
|
||||
# * * 'daily' => '天',
|
||||
# * * 'weekly' => '周',
|
||||
# * * 'monthly' => '月',
|
||||
# * * 'total' => '总',
|
||||
$n_status ?? "all"; # 查询状态:
|
||||
# * * 'all' => '所有',
|
||||
# * * 'lianzai' => '连载中',
|
||||
# * * 'wanjie' => '已完结',
|
||||
$n_sex ?? "all"; # 查询性别:
|
||||
# * * 'all' => '所有',
|
||||
# * * 'man' => '男生',
|
||||
# * * 'women' => '女生',
|
||||
$diff_key ?? ""; # 缓存键值差异
|
||||
$cache_life ?? '0'; # 缓存时间,如果需要开启缓存,这个字段必须传,而且必须大于0
|
||||
$d_key ?? 'd_key'; # 查询出来的数据遍历的时候, 下标键变量的名称
|
||||
$d_val ?? 'd_val'; # 查询出来的数据遍历的时候, 值的名称
|
||||
# 样例
|
||||
{novel:ranklist count="10" sort_type="total" n_status="wanjie" n_sex="man" d_key="d_key" d_val="novel" cache_life="1000"}
|
||||
<li>
|
||||
Index: {$d_key}
|
||||
Title: {$novel.n_name}
|
||||
Author: {$novel.n_category}
|
||||
</li>
|
||||
{/novel:ranklist}
|
||||
|
||||
# 14、 获取随机伪造小说列表并且遍历
|
||||
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号):
|
||||
$count ?? '10'; # 查询条数
|
||||
$diff_key ?? ""; # 缓存键值差异
|
||||
$cache_life ?? '0'; # 缓存时间,如果需要开启缓存,这个字段必须传,而且必须大于0
|
||||
$d_key ?? 'd_key'; # 查询出来的数据遍历的时候, 下标键变量的名称
|
||||
$d_val ?? 'd_val'; # 查询出来的数据遍历的时候, 值的名称
|
||||
# 样例
|
||||
{site:forgelist count="10" d_key="d_key" d_val="novel" cache_life="1000"}
|
||||
<li>
|
||||
Index: {$d_key}
|
||||
N ID: {$novel.n_id}
|
||||
N NAME PINYIN: {$novel.n_name_pinyin}
|
||||
N FORGE ID: {$novel.n_forge_id}
|
||||
N FORGE TITLE: {$novel.n_forge_title}
|
||||
|
||||
</li>
|
||||
{/site:forgelist}
|
||||
```
|
||||
43
doc/mongodb.md
Normal file
43
doc/mongodb.md
Normal file
@@ -0,0 +1,43 @@
|
||||
|
||||
|
||||
|
||||
```javascript
|
||||
|
||||
use novel
|
||||
db.dropDatabase("novel")
|
||||
use novel
|
||||
db.novel.createIndex({ "n_id": 1 })
|
||||
db.novel.createIndex({ "og_title": 1 })
|
||||
db.novel.createIndex({ "og_novel_status": 1 })
|
||||
db.novel.createIndex({ "n_site_uuid": 1 }, { unique: true })
|
||||
db.novel.createIndex({"n_related_novel.n_id": 1})
|
||||
db.novel.createIndex({"n_forge_novel.n_forge_id": 1})
|
||||
// db.novel.createIndex({ "og_novel_update_time": 1 })
|
||||
|
||||
// {
|
||||
// "n_related_novel": [
|
||||
// {"n_id": "33", "n_source_id":"11", "og_title":"小说名字"},
|
||||
// {"n_id": "44", "n_source_id":"11", "og_title":"小说名字"},
|
||||
// ]
|
||||
// }
|
||||
|
||||
// {
|
||||
// "n_forge_novel": [
|
||||
// {"n_forge_id": "33","n_forge_code": "33", "n_forge_title":"伪造小说名字"},
|
||||
// {"n_forge_id": "44","n_forge_code": "33", "n_forge_title":"伪造小说名字"},
|
||||
// ]
|
||||
// }
|
||||
|
||||
|
||||
// 小说章节索引
|
||||
db.chapter.createIndex({ "c_site_uuid": 1 }, { unique: true })
|
||||
db.chapter.createIndex({ "n_id": 1 })
|
||||
db.chapter.createIndex({ "c_sort_num": 1 })
|
||||
db.chapter.createIndex({ "c_page": 1 })
|
||||
|
||||
// 分类
|
||||
db.category.createIndex({"ca_name":1},{unique:true})
|
||||
|
||||
// 统计
|
||||
db.novel_clicks.createIndex({ "n_id": 1, "nc_date": 1, "nc_type": 1 },{ unique: true });
|
||||
````
|
||||
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}!'
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
doc/域名.xlsx
Normal file
BIN
doc/域名.xlsx
Normal file
Binary file not shown.
Reference in New Issue
Block a user