修复搜索增强插件,自建模型无法重建索引bug

画风的人 26天前 2301

问题search_rebuild() 里模型列表是硬编码的 array(2=>'article', 3=>'product', 4=>'photo'),自建模型的 mid 不在其中,直接报"模型ID错误"。

修复:把硬编码数组替换为 $this->models->get_table_arr()(动态获取所有模型),同时加上 && $mid != 1 排除系统模型,与同文件里 rebuildindex() 函数的写法保持一致。


将hook/admin_tool_control_after.php代码全部替换为如下代码

<?php
//搜索插件设置
function search_setting(){
    if($_POST){
        $le_search = $this->kv->xget('le_search');
        $le_search['search_type'] = R('search_type','P');
        $le_search['admin_login_dir'] = R('admin_login_dir','P');
        $this->kv->set('le_search', $le_search);

        E(0,'修改成功');
    }else{

        $le_search = $this->kv->xget('le_search');

        $input = array();
        $arr = array(
            'fulltext'=>'MySQL 全文',
            'site'=>'百度搜索',
        );
        $input['search_type'] = form::layui_loop('radio','search_type', $arr,$le_search['search_type']);
        $input['admin_login_dir'] = form::get_text('admin_login_dir', $le_search['admin_login_dir']);
        $this->assign('input',$input);

        $models_arr = array();
        $models = $this->models->get_models();
        foreach ($models as $v){
            $mid = $v['mid'];
            if($mid < 2){
                continue;
            }

            $table = $v['tablename'];
            $name = $v['name'];
            $this->cms_content->table = 'cms_'.$table;
            $total = $this->cms_content->count();
            $start_key = 'le_search_'.$table.'_start';
            $start = intval($this->kv->xget($start_key));

            $url = '/index.php?comment-rebuildindex-mid-'.$mid.'-auth-'.C('auth_key');
            $models_arr[$table] = array(
                'mid'=>$mid,
                'name'=>$name,
                'total'=>form::get_number('total',$total),
                'input'=>form::get_number($table.'_start',$start),
                'url'=>form::get_text('url',$url)
            );
        }
        $this->assign('models',$models_arr);

        $this->display();
    }

}

//后台重建索引
function search_rebuild(){
    $le_search = $this->kv->xget('le_search');
    $admin_login_dir = ( isset($le_search['admin_login_dir']) && $le_search['admin_login_dir'] ) ? $le_search['admin_login_dir'] : 'admin';

    $mid = max(2, (int)R('mid','G'));
    $limit = 1000;

    $models = $this->models->get_table_arr();

    if(isset($models[$mid]) && $mid != 1){
        $table = $models[$mid];
        $start = (int)R('start');
        $this->cms_content->table = 'cms_'.$table;
        $total = $this->cms_content->count();
        $startkey = 'le_search_'.$table.'_start';
        if( $start >= $total ){
            $start = $total;
            $this->kv->set($startkey, $start);
            $url = '/'.$admin_login_dir.'/index.php?tool-search_setting';
            $this->message(1,'重建索引完毕',$url);
        }else{
            $page = max(1, ceil(($start + 1) / $limit));
            $list = $this->cms_content->list_arr(array(), 'id', 1, ($page-1)*$limit, $limit, $total);
            if(empty($list)) {
                $start = $total;
                $this->kv->set($startkey, $start);
                $url = '/'.$admin_login_dir.'/index.php?tool-search_setting';
                $this->message(1,'重建索引完毕',$url);
            } else {
                include_once PLUGIN_PATH.'le_search/func/search.func.php';
                $this->cms_content_search->table = 'cms_'.$table.'_search';
                foreach ($list as &$v) {
                    $id = $v['id'];
                    $title_cn_encode = search_cn_encode($v['title']);
                    if(!$this->cms_content_search->set($id, array('message' => $title_cn_encode))) {
                        $this->message(0,'重建索引失败,写入索引数据表出错');
                    }
                }
                $start += count($list);
                $this->kv->set($startkey, $start);

                $url = '/'.$admin_login_dir.'/index.php?tool-search_rebuild-mid-'.$mid.'-start-'.$start;
                $this->message(1,"正在对标题建立全文索引,总数:$total, 当前:".($start - $limit),$url);
            }
        }
    }else{
        $this->message(0,'模型ID错误!');
    }
}
最新回复 (0)
返回
发新帖