Tp3实现搜索后高亮显示(关键字标红)
//定义一个搜索的方法 public function Search(){ //如果传过来的值是空的,很可能会报错,所以做一个判断,如果传过来的值是空的,那就查询所有的信息 //判断请求类型 if(IS_GET){ //接值 $word = I('get.word'); //拼接一下查询的条件 $where['name'] = array('like',"$word%"); $User = M('user'); // 实例化User对象 $count = $User->where($where)->count();// 查询满足要求的总记录数 $Page = new \Think\Page($count,5);// 实例化分页类 传入总记录数和每页显示的记录数(5) $show = $Page->show();// 分页显示输出 // 进行分页数据查询 注意limit方法的参数要使用Page类的属性 $list = $User->where($where)->limit($Page->firstRow.','.$Page->listRows)->select(); foreach ($list as $k=>$v){ if($v['name']){ $v['name'] = preg_replace("/($word)/i","<b style=\"color:red\">\\1</b>",$v['name']); } $NewList[] = $v; } $this->assign('count',$count); $this->assign('data',$NewList);// 赋值数据集 $this->assign('page',$show);// 赋值分页输出 $this->display('Lists'); // 输出模板 }else{ $this->error('非法操作'); } }
像上述那种做法在出现查询字段为空的时候会出现乱码的现象,那么这个时候我们就需要添加一下js正则判断保证提交的数据不为空了
$NewList[] = $v; 在上述代码标红的地方我们赋值给了一个新的数组,完全可以 $list[$k]['name'] = $v;这样去写
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
如果想要一种稍微更好点的办法的话,可以考虑下面str_replace的用法,但是需要自己在html页面写个样式
//拼接一下查询的条件 $where['name'] = array('like',"$word%"); $User = M('user'); // 实例化User对象 $count = $User->where($where)->count();// 查询满足要求的总记录数 $Page = new \Think\Page($count,5);// 实例化分页类 传入总记录数和每页显示的记录数(5) $show = $Page->show();// 分页显示输出 // 进行分页数据查询 注意limit方法的参数要使用Page类的属性 $list = $User->where($where)->limit($Page->firstRow.','.$Page->listRows)->select(); foreach ($list as $k=>$v){ if($v['name']){ // pattern 要替换的关键字 // replacement 要替换的内容 // subject 被替换的字符串 // $v['name'] = preg_replace("/($word)/i","<b style=\"color: red\">\\1</b>",$v['name']); $str=str_replace("$word","<font>$word</font>",$v['name']); $list[$k]['name'] = $str; } } $this->assign('count',$count); $this->assign('data',$list);// 赋值数据集 $this->assign('page',$show);// 赋值分页输出 $this->display('Lists'); // 输出模板
这样的话,html页面就需要在head里面加一个style样式
<head> <meta charset="UTF-8"> <title>列表</title> <style> font{ color: red; } </style> </head>
这样的话就避免了乱码!
通往牛逼的路上,在意的只有远方!