menu 极光萝卜
emlog 修改搜索功能:增加按标签名模糊搜索
folder_special 笔记    access_time 2017-2-11   remove_red_eye 2253   comment 0

QQ截图20170211105912.png


最近建了个个人壁纸分享的图站:http://img.ijglb.com/

然后遇到了一个搜索上的问题,emlog的搜索是很简单的根据标题来搜索的,对于我的图站来说,标题的意义比较小,主要还是靠标签。

只好自己凭借C#的经验和一点点PHP基础知识来实现能够搜索标签的功能了。

贴一下实现的代码(emlog版本5.3.1):

1、修改/include/model/tag_model.php增加:

function searchTagByName($tagName) {
		$tag = array();
		$blogIdStr = "";
		$query = $this->db->query("SELECT tagname,gid FROM ".DB_PREFIX."tag WHERE tagname like '%$tagName%'");
		if(count($query)==0){
			return false;
		}
		while ($row = $this->db->fetch_array($query)) {
			$blogIdStr .= substr(trim($row['gid']),1);
		}
		//$blogIdStr = substr($blogIdStr),0,-1);
		return $blogIdStr;
	}
2、修改/include/controller/search_controller.php


找到:

$sqlSegment = "and title like '%{$keyword}%' order by date desc";
修改为:


                $Tag_Model = new Tag_Model();
		$blogIdStr = $Tag_Model->searchTagByName($keyword);
		if ($blogIdStr == false) {
			$sqlSegment = "and title like '%{$keyword}%' order by date desc";
		}
		else{
			$idArr = substr($blogIdStr,0,-1);
			$sqlSegment = "and title like '%{$keyword}%' or gid in ($idArr) order by date desc";
		}


以上为我的实现方法,就是不清楚效率如何。

实现过程中遇到一个问题,就是注释掉的部分:

$blogIdStr = substr($blogIdStr),0,-1);
使用这个的话,所有用到Tag_Model的都会报500错误,由于不清楚PHP,所以不懂是什么原因。


最后的曲线救国就是把截取放在search_controller.php里面来做:

$idArr = substr($blogIdStr,0,-1);
这个蛋疼的问题还是留到以后学PHP的时候了解吧...


local_offer PHP