易优官方默认的搜索都是从标题检索,这样速度快,效果也不错。但是也有一些用户想要从文章内容中搜索关键词,那么如何处理呢?
我在问答栏目搜索了半天,没有一个满意的答案,无奈只好自己动手,记录自己的改造过程。
第一步,确定思路。易优有一个sql标签,可以从数据库调用内容展示在前台。我们可以利用这一点,达到自己的目的。
已知易优的文章内容存放在ey_article_content表里面,我们可以根据传入的关键词搜索就行了,思路如下:
{eyou:sql sql="select * from ey_article_content where content like '%关键词%'" empty='没有找到想要的结果'}
{$field.content}
{/eyou:sql}
其中,%关键词%里面的关键词为变量,可以用$eyou.field.keywords替换,但是实际过程中出现搜索不出结果或者提示“sql属性值不能为空”的错误提示,可以用易优的定义变量标签解决。{eyou:assign name="keywords" value="$eyou.field.keywords"},然后sql标签里面引用%$keywords%即可正确展示预期结果。
不过ey_article_content表里面只有aid,content,add_time,update_time这几个字段,没有我们想要的title字段,所以还要想办法从其他表查询,也就是ey_archives表里面。
但是还可以借用arcview单条文档标签,传入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}
到这里基本就完成了内容的展示,但是细心的小伙伴会发现$field.content调出来是带标签的纯文本格式,这就需要我们格式化内容,并加工成自己想要的形式。
需要我们自己写一个函数进行格式处理,不过也可以用官方自带的html_msubstr函数截取字符串处理。
打开extend文件夹function.php,最下方写入自己的函数:
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;
}
这个函数首先是把数据库存储的< > 替换成< >,构造html标签,接着替换形成的空格,然后过滤掉html标签,提取纯文本,再然后将关键词替换成红色字体,截取0-255个字符(一个汉字占3个字符),最后返回处理好的内容,展示在前台。
最终效果如下: