[抛砖引玉]强制刷新图书目录

xiaoshuo88   ·   发表于 2022-6-1   ·   技术交流

又是我,这次遇到的问题是,突然发现以前的老书目录,源逻辑抓取有些问题,标题抓错了,但又原来的目录逻辑是只新增不更正,所以做一个新功能来强制更新目录。

代码如下:


application/admin/controller/Novel.php

...
// 强制刷新
public function refreshIndex($id){
        $id = array_unique((array)$this->request->param('id'));
        if ( empty($id) ) {
            $this->error('请选择要操作的数据!');
        }
        $NovelChapter=model('NovelChapter');
        $novel_update=false;
        $chapter=$NovelChapter->where([['novel_id','in',$id],['collect_id','<>',0]])->field('id,novel_id,collect_id,reurl,chapter')->select();
        $chapter = $chapter->toArray();
        foreach ($chapter as $key => $value) {
            $chapter_update=false;
            Db::name('novel_chapter')->where(['id'=>$value['id']])->update(['run_time'=>time()+Config::get('web.chapter_time_interval')*60]);
            $chapter_collect=Gather::get_chapter($value['collect_id'],$value['reurl']);
            if($chapter_collect){
                if(!empty($value['chapter'])){
                    $chapter_db=[];
                    $value['chapter']=model('common/api')->decompress_chapter($value['chapter']);
                    $value['chapter']=json_decode($value['chapter'],true);
                    $chapter_db = array_combine(array_column($value['chapter'],'reurl'),array_keys($value['chapter']));
                        // 清空原来的章节
                        $value['chapter']=array();
                }
                foreach ($chapter_collect as $k => $v){
                    $chapter_data=[];
                    if(isset($chapter_db[$v['url']])){
                                             //  如果已有,保留keys
                                             $keys=$chapter_db[$v['url']];
                                            }else{
                                             $keys=uniqidReal();
                                        }
                    $chapter_data['title']=$v["title"];
                    $chapter_data['intro']='';
                    $chapter_data['update_time']=time();
                    $chapter_data['issued']=1;
                    $chapter_data['word']=2000;
                    $chapter_data['reurl']=$v["url"];
                    $chapter_data['auto']=2;
                    $chapter_data['path']=$value['novel_id'].DIRECTORY_SEPARATOR.$keys.'.txt';
                    $value['chapter'][$keys]=$chapter_data;
                    $chapter_update=true;
                    $novel_update=true;
                    $data_link[]=url('home/chapter/index',['id'=>$value['id'],'key'=>$keys],true,true);
                }
                if($chapter_update==true){
                    $chapter_data_last=end($value['chapter']);
                    $updated=[
                        'id'=>key($value['chapter']),
                        'title'=>$chapter_data_last['title'],
                        'update_time'=>$chapter_data_last['update_time'],
                        'count'=>count($value['chapter'])
                    ];
                    $value['updated']=json_encode($updated);
                    $value['chapter']=json_encode($value['chapter']);
                    $value['chapter']=model('common/api')->compress_chapter($value['chapter']);
                    $value['run_time']=time()+Config::get('web.chapter_time_interval_over')*60;
                    Db::name('novel_chapter')->update($value);
                    model('common/DataOperation')->after('add','chapter',$data_link);
                }
            }
        }
        if($novel_update==true){
            Db::name('novel')->where(['id'=>$id])->update(['update_time'=>time()]);
            $this->success('操作成功!');
        }else{
            $this->error('操作失败');
        }
    }
...



application/admin/view/novel/index.html

...
// 菜单栏位置
<form class="layui-form" action="{:url('del')}"  actionRefreshIndex="{:url('refreshIndex')}">
    <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 layui-btn-warm" lay-submit lay-filter="refreshIndex" type="submit"><i class="layui-icon layui-icon-refresh-1"></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>
...

// layui的use代码里面,接着form.on('submit(search)')的代码块下面

form.on('submit(refreshIndex)', function(data){
    layer.confirm('确认要刷新目录吗?',function(index){
        var loadin_layer=layer.msg('刷新中,请稍后。', {icon: 16,shade: 0.3});
        $.post($(data.form).attr('actionRefreshIndex'),data.field, function(data){
            layer.close(loadin_layer);
            if(data.code){
                layer.msg(data.msg, {icon: 1,shade: 0.3,time: 2000},function(layero, index){
                    location.reload();
                });
            } else {
                layer.msg(data.msg, {icon: 0});
            }
        }, "json");
    });
    return false;
});

...


效果图:



选中书籍之后点击即可,支持多选

5 条回复   |  直到 2022-11-20 | 338 次浏览

15216330461
发表于 2022-6-2

补丁补的狂雨作者都不用自己想了

评论列表

  • 加载数据中...

编写评论内容

xiaoshuo88
发表于 2022-6-2

15216330461

2022-6-2

补丁补的狂雨作者都不用自己想了

这次也是借助了作者的代码逻辑弄的,有些功能就个人需求,不一定合大众哈

评论列表

  • 加载数据中...

编写评论内容

sk0237
发表于 2022-6-16

xiaoshuo88

2022-6-2

这次也是借助了作者的代码逻辑弄的,有些功能就个人需求,不一定合大众哈

作者,代码我要如何使用啊?新手不是太懂

评论列表

  • 加载数据中...

编写评论内容

xiaoshuo88
发表于 2022-6-16

sk0237

2022-6-16

作者,代码我要如何使用啊?新手不是太懂

找到对应的文件然后修改,需要一定的php代码基础,不太建议无基础自己改,容易出问题,如果官方更新覆盖了就要重新改一次


不修改代码情况下也可以把书删除,重新从源站拉取回来,目录也会恢复正常

评论列表

  • 加载数据中...

编写评论内容

xixi
发表于 2022-11-20

为什么我按你这个改了之后,点刷新直接删除选中的小说了,不是刷新目录

评论列表

  • 加载数据中...

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