1. 现在数据表格显示的字段比较少,增加了作者、书源、父栏目名
2. 关键字现在只搜索正文,所以把作者、简介等也一并加进了搜索
3. 标题增加点击后跳转
效果是这样的:

涉及代码如下:
\application\admin\view\novel\index.html
...
<div class="layui-card-body">
<form class="layui-form" action="{:url('del')}">
<div style="padding-bottom: 10px;">
<button class="layui-btn layui-btn-danger" lay-submit lay-filter="del" type="submit"><i class="layui-icon layui-icon-delete"></i> 删除</button>
<button class="layui-btn" type="button" onclick="admin_show('添加','{:url('add')}',0,0,1)"><i class="layui-icon layui-icon-add-1"></i> 添加</button>
<button class="layui-btn layui-btn-normal" type="button" open-select open-title="修改栏目" open-url="{:url('category')}" open-width="400" open-height="150"><i class="layui-icon layui-icon-more"></i> 栏目</button>
</div>
<table class="layui-table">
<colgroup>
<col width="50">
<col width="80">
<col>
<col width="80">
<col width="150">
<col width="90">
<col width="90">
<col width="90">
<col width="150">
<col width="100">
<col width="400">
</colgroup>
<thead>
<tr>
<th><input name="layTableCheckbox" lay-filter="layTableAllChoose" type="checkbox" lay-skin="primary"></th>
<th>id</th>
<th>书名</th>
<th>作者</th>
<th>栏目</th>
<th>字数</th>
<th>连载</th>
<th>书源</th>
<th>更新时间</th>
<th>状态</th>
<th><div align="center">操作</div></th>
</tr>
</thead>
<tbody>
{notempty name="list"}
{volist name="list" id="vo"}
<tr>
<td><input name="id[]" type="checkbox" lay-skin="primary" value="{$vo.id}"></td>
<td>{$vo.id}</td>
<td>
<a href="{:url('home/novel/index',['id'=>$vo['id']])}" target="_blank">
{$vo.title}
</a>
<span class="pl-20">
{volist name="Think.config.web.document_position" id="pos"}
{if check_document_position($vo['position'],$key)}
{switch name="key"}
{case value="1"}<span class="layui-badge layui-bg-cyan">列推</span>{/case}
{case value="2"}<span class="layui-badge layui-bg-orange">频推</span>{/case}
{case value="4"}<span class="layui-badge">首推</span>{/case}
{/switch}
{/if}
{/volist}
{if $vo['create_time']>strtotime('-3month')}
<span class="layui-badge layui-bg-blue">新书</span>
{/if}
</span>
</td>
<td>{$vo.author}</td>
<td>{$vo.category_fulltext}</td>
<td>{:number_format($vo.word/10000,2)}万</td>
<td>{$vo.serialize_text}</td>
<td>{$vo.collect["title"]}</td>
<td>{$vo.update_time|time_format="Y-m-d H:i"}</td>
<td><input type="checkbox" name="status" value="{$vo.status}" lay-skin="switch" lay-text="正常|禁用" lay-filter="status" lay-url="{:url('status',['id'=>$vo['id']])}" {eq name="vo.status" value="1"}checked{/eq}></td>
<td>
<a onclick="admin_show('推荐','{:url('position',['id'=>$vo['id']])}',379,118,0,1)" class="layui-btn layui-bg-cyan layui-btn-xs" href="javascript:;"><i class="layui-icon layui-icon-star"></i>推荐</a>
<a onclick="admin_show('编辑','{:url('edit',['id'=>$vo['id']])}',0,0,1)" class="layui-btn layui-btn-normal layui-btn-xs" href="javascript:;"><i class="layui-icon layui-icon-edit"></i>编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" onclick="admin_del(this,'{:url('del',['id'=>$vo['id']])}')"><i class="layui-icon layui-icon-delete"></i>删除</a>
<a onclick="admin_show('管理章节','{:url('NovelChapter/index',['id'=>$vo['id']])}',0,0,1)" class="layui-btn layui-btn-xs" href="javascript:;"><i class="layui-icon layui-icon-add-1"></i>管理章节</a>
<a onclick="admin_show('管理评论','{:url('Comment/index',['type'=>'novel','id'=>$vo['id']])}',800,600)" class="layui-btn layui-btn-warm layui-btn-xs" href="javascript:;"><i class="layui-icon layui-icon-reply-fill"></i>评论{notempty name="vo['comment_count']"}<span class="layui-badge">{$vo['comment_count']}</span>{/notempty}</a>
</td>
</tr>
{/volist}
{else/}
<td colspan="8"> aOh! 暂时还没有内容! </td>
{/notempty}
</tbody>
</table>
<div class="page">
{$list->appends("keywords",Request::param("keywords"))|raw}
</div>
</form>
</div>
...\application\admin\model\Novel.php
...
// 新增方法,用于category_fulltext调用
public function getCategoryFullTextAttr($value,$data){
$parent = model('common/api')->get_category($data['category'],'pid');
$name = model('common/api')->get_category($data['category'],'title');
while ($parent && $parent!=0){
$name = model('common/api')->get_category($parent,'title') ."|" . $name;
$parent = model('common/api')->get_category($parent,'pid'); }
return $name;
}
...
// 小说列表
public function lists($extra=[]){
$map = [];
if(Request::param('category')){
$map[] = ['category','=',Request::param('category')];
}
$serialize=Request::param('serialize');
if(isset($serialize)){
$map[] = ['serialize','=',Request::param('serialize')];
}
if(Request::param('keywords')){
$map[] = ['title|author|content|tag','like','%'.Request::param('keywords').'%'];
}
if(Request::param('position')){
$map[] = ['position','exp',Db::raw('& '.Request::param('position').' = '.Request::param('position'))];
}
$status=Request::param('status');
if(isset($status)){
$map[] = ['status','=',$status];
}
if(Request::param('order')){
$order = Request::param('order');
if(strstr($order,'+')){
$order=str_replace('+',' ',$order);
}
}else{
$order = 'update_time desc';
}
if(isset($extra)){
$map=array_merge($map,$extra);
}
$list=Novel::where($map)->order($order)->paginate(config('web.list_rows'))->each(function($item, $key){
$item->comment_count = Db::name('comment')->where(['type'=>'novel','mid'=>$item->id,'pid'=>0])->count('id');
$item->collect = Db::name('novel_chapter')->alias("nc")->leftJoin("collect co","nc.collect_id = co.id")->field('co.title,co.id')->where(['novel_id'=>$item->id])->limit(1)->find();
});
return $list;
}
感谢作者开源这个平台,试用了两天感觉越来越熟手了
stan2515
发表于 2022-4-12
PHP 代码好像不对吧
评论列表
加载数据中...
stan2515
发表于 2022-4-12
$item->collect = Db::name('novel_chapter')->alias("nc")->leftJoin("collect co","nc.collect_id = co.id")->field('co.title,co.id')->where(['reurl'=>$item->reurl])->limit(1)->select();加载这段
{$vo.collect[0]["title"]}变量 的时候 他喵的网关繁忙 不会是我之前删除了 采集规则的原因吧
评论列表
加载数据中...
xiaoshuo88
发表于 2022-4-12
stan2515
2022-4-12
$item->collect = Db::name('novel_chapter')->alias("nc")->leftJoin("collect co","nc.collect_id = co.id")->field('co.title,co.id')->where(['reurl'=>$item->reurl])->limit(1)->select();加载这段
{$vo.collect[0]["title"]}变量 的时候 他喵的网关繁忙 不会是我之前删除了 采集规则的原因吧
我没有考虑删掉采集的情况,可以改成这样
\application\admin\view\novel\index.html
... <td>{$vo.collect["title"]}</td> ...\application\admin\model\Novel.php
... $item->collect = Db::name('novel_chapter')->alias("nc")->leftJoin("collect co","nc.collect_id = co.id")->field('co.title,co.id')->where(['novel_id'=>$item->id])->limit(1)->find(); ...这样如果删掉了采集,那一栏会留空
评论列表
加载数据中...
stan2515
发表于 2022-4-20
xiaoshuo88
2022-4-12
我没有考虑删掉采集的情况,可以改成这样
\application\admin\view\novel\index.html
... <td>{$vo.collect["title"]}</td> ...\application\admin\model\Novel.php
... $item->collect = Db::name('novel_chapter')->alias("nc")->leftJoin("collect co","nc.collect_id = co.id")->field('co.title,co.id')->where(['novel_id'=>$item->id])->limit(1)->find(); ...这样如果删掉了采集,那一栏会留空
感谢 问题已经解决了
评论列表
加载数据中...
stan2515
发表于 2022-4-20
评论列表
加载数据中...