问题: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错误!');
}
}