长沙网站开发_DWPCMS二次开发--文章内容关键字搜索

发布日期:2016-09-20 08:02

DWPCMS中搜索功能有两种方式:检索标题--只搜索文章标题;智能模糊--搜索文章标题(title),作者(writer)和关键字(keywords)。如果关键字只存在于文章内容中(body字段),那就无法检索到。

首先简单说明一下修改思路,从以上两种搜索方式得知,DWPCMS能够搜索的内容均都存在于主表中(archives),而文章内容(暂时不考虑图片集和其他模型)则存在于附加表中(addonarticle)。所以我们需要将body添加到DMPCMS查找的字段中,另外需要查询时连接附加表。

 ①head.htm模板页面中,searchtype需设置为titlekeyword,或者手动选择:

<select name="searchtype" class="search-option" id="search-option">

<option value="title" selected='1'>检索标题</option>

<option value="titlekeyword">智能模糊</option>

<lect>

②修改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_addonarticle` 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_addonarticle` 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'));

③在search.htm模板页中重复第一步,在数据输出时调用description或者添加的body字段。 

至此需要修改的内容已经基本完毕,内容搜索只针对文章模型,其他类型暂不考虑,故修改时数据表基本都进行了指定,有兴趣的小伙伴可以再进行修改让其兼容其他模型的内容搜索。

以上信息由长沙网站建设--长沙蒲公英网络收集与整理,禁止用于任何商业行为