易優(yōu)官方默認(rèn)的搜索都是從標(biāo)題檢索,這樣速度快,效果也不錯。但是也有一些用戶想要從文章內(nèi)容中搜索關(guān)鍵詞,那么如何處理呢?
我在問答欄目搜索了半天,沒有一個滿意的答案,無奈只好自己動手,記錄自己的改造過程。
第一步,確定思路。易優(yōu)有一個sql標(biāo)簽,可以從數(shù)據(jù)庫調(diào)用內(nèi)容展示在前臺。我們可以利用這一點(diǎn),達(dá)到自己的目的。
已知易優(yōu)的文章內(nèi)容存放在ey_article_content表里面,我們可以根據(jù)傳入的關(guān)鍵詞搜索就行了,思路如下:
{eyou:sql sql="select * from ey_article_content where content like '%關(guān)鍵詞%'" empty='沒有找到想要的結(jié)果'}
{$field.content}
{/eyou:sql}
其中,%關(guān)鍵詞%里面的關(guān)鍵詞為變量,可以用$eyou.field.keywords替換,但是實(shí)際過程中出現(xiàn)搜索不出結(jié)果或者提示“sql屬性值不能為空”的錯誤提示,可以用易優(yōu)的定義變量標(biāo)簽解決。{eyou:assign name="keywords" value="$eyou.field.keywords"},然后sql標(biāo)簽里面引用%$keywords%即可正確展示預(yù)期結(jié)果。
不過ey_article_content表里面只有aid,content,add_time,update_time這幾個字段,沒有我們想要的title字段,所以還要想辦法從其他表查詢,也就是ey_archives表里面。
但是還可以借用arcview單條文檔標(biāo)簽,傳入aid變量,就可以快速生成文檔列表,代碼如下
{eyou:arcview aid="$field.aid" id="field2"}
<a href="{$field2.arcurl}" title="{$field2.title}">【{$field2.title}】</a>
<div>{$field.content,$keywords|diy_replace}</div>
<span>{$field.add_time|MyDate='Y-m-d',###}</span>
</li>
{/eyou:arcview}
到這里基本就完成了內(nèi)容的展示,但是細(xì)心的小伙伴會發(fā)現(xiàn)$field.content調(diào)出來是帶標(biāo)簽的純文本格式,這就需要我們格式化內(nèi)容,并加工成自己想要的形式。
需要我們自己寫一個函數(shù)進(jìn)行格式處理,不過也可以用官方自帶的html_msubstr函數(shù)截取字符串處理。
打開extend文件夾function.php,最下方寫入自己的函數(shù):
function diy_replace($content,$keywords){
$a=['<','>'];
$b=['<','>'];
$content=str_replace($a,$b,$content);
$content=str_replace(" ","",$content);
$content=strip_tags($content);
$content=str_replace("$keywords","<font color=red>$keywords</font>",$content);
$content=mb_substr($content,0,255);
return $content;
}
這個函數(shù)首先是把數(shù)據(jù)庫存儲的< > 替換成< >,構(gòu)造html標(biāo)簽,接著替換形成的空格,然后過濾掉html標(biāo)簽,提取純文本,再然后將關(guān)鍵詞替換成紅色字體,截取0-255個字符(一個漢字占3個字符),最后返回處理好的內(nèi)容,展示在前臺。
最終效果如下: