所属栏目:发布日期:2016-09-14 08:15浏览量:2656作者:admin
DWPCMS中搜索功能有两种方式:检索标题--只搜索文章标题;智能模糊--搜索文章标题(title),作者(writer)和关键字(keywords)。如果关键字只存在于文章内容中(body字段),那就无法检索到。
首先简单说明一下修改思路,从以上两种搜索方式得知,DWPCMS能够搜索的内容均都存在于主表中(archives),而文章内容(暂时不考虑图片集和其他模型)则存在于附加表中(addonarticle)。所以我们需要将body添加到DMPCMS查找的字段中,另外需要查询时连接附加表。
1、head.htm模板页面中,searchtype需设置为titlekeyword,或者手动选择:
</select>
2、修改include文件夹中arc.searchview.class.php:
1.第224-228行函数GetKeywordSql()中,当$this->SearchType!="title"时,添加查找addf.body字段:
$kwsqls[] = " CONCAT(arc.title,' ',arc.writer,' ',arc.keywords,' ',addf.body) LIKE '%$k%' ";
2.第449行函数CountRecord()中,将
$cquery = "SELECT * FROM `{$this->AddTable}` arc WHERE ".$this->AddSql; 改为->
$cquery = "SELECT * FROM `pgy_archives` arc LEFT JOIN `pgy_dment_article` addf on (arc.id=addf.aid) WHERE ".$this->AddSql;
查找附加表中数据用于获取数据条数,
3.第696-699行函数GetArcList()中,将
$query="SELECT arc.*,act.typedir,act.typename,act.isdefault,act.defaultname,act.namerule, act.namerule2,act.ispart,act.moresite,act.siteurl,act.sitepath,addf.typeid,addf.body FROM `pgy_archives` arc LEFT JOIN `pgy_arctype` act ON arc.typeid=act.id LEFT JOIN `pgy_dment_article` addf ON arc.id=addf.aid WHERE {$this->AddSql} $ordersql LIMIT $limitstart,$row";
连接查找附加表typeid和body字段用于输出显示;
4.在最后添加函数GetKeyWordPos()用于获取关键第一次出现的位置,便于截取文章内容。
function GetKeyWordPos($fstr)
{ $ks = explode(' ',$this->Keywords);
//查找关键字位置$kpos
$klen = mb_strlen($ks[0], 'utf-8');
$tlen = mb_strlen($fstr, 'utf-8');
$stmp = '';
$kpos = 0;
for ($i=0; $i < $tlen; $i++) {
$stmp = mb_substr($fstr, $i, $klen, 'utf-8');
if ($stmp == $ks[0]) {
$kpos = $i;
return $kpos;
}
$stmp = '';
}
}
5.第735行函数GetArcList()中,可将$row["description"]修改如下或者添加$row[["body"]:
$row["description"]=$this->GetRedKeyWord(mb_substr(html2text($row["body"]),$this->GetKeyWordPos(html2text($row["body"]))>30?$this->GetKeyWordPos(html2text($row["body"]))-20:0,$infolen,'utf-8'));
3、在search.htm模板页中重复第一步,在数据输出时调用description或者添加的body字段。
至此需要修改的内容已经基本完毕,内容搜索只针对文章模型,其他类型暂不考虑,故修改时数据表基本都进行了指定,有兴趣的小伙伴可以再进行修改让其兼容其他模型的内容搜索。