[抛砖引玉]小说管理页面的小修改

xiaoshuo88   ·   发表于 2022-4-7   ·   技术交流

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;
    }


感谢作者开源这个平台,试用了两天感觉越来越熟手了

5 条回复   |  直到 2022-4-20 | 922 次浏览

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

评论列表

  • 加载数据中...

编写评论内容
登录后才可发表内容