[thinkPHP5项目实战_28]前台文章"相关文章"的功能完善
来源:互联网 发布:儿童识字软件 编辑:程序博客网 时间:2024/04/30 20:30
在文章详情页面需要展示相关文章列表,该列表使用过当前文章的关键词来获取的;
当前文章的关键词可能不止一个,因此需要查询所有文章是否具有该关键词,如果有则将该文章相关信息储存到数组中;
这样遍历出来文章可能重复,因为需要对该数组中的文章进行去重;
去重的方法有很多,这里使用对数组降维的处理方法;
由于获取的文章信息也是数组,所以储存相关文章的列表就是二维数组;
将其将为以为数组,文章信息数组拼接成字符串作为数组元素,如果文章重复,则具有相同的字符串;
再使用php的array_unique方法去重重复字符串;然后将该数组每个字符串恢复成文章信息数组;
这样储存文章列表恢复了原来的二维数组,然后循环输出到模板上:
Article控制器操作方法:
<?phpnamespace app\index\controller;class Article extends Basic{ public function index() { $id=input('artid');//在文章列表页点击进入获取传过来的文章的id值 db('article')->where('artid', $id)->setInc('click');//click字段自增1,setInc第二个参数为空则默认自增1 //根据文章id联表查询该文章的栏目名称,获取该文章的信息 $arts=\think\Db::name('article')->alias('a')->join('cate c','c.ID = a.cateid','LEFT')->field('a.keywords,a.title,a.content,a.time,a.click,a.artid,a.cateid,c.catename,a.pic')->find($id); //使用limit方法查询该栏目的上一篇文章的id值 $prev= \think\Db::name('article')->where('artid','<',$id)->where('cateid','=',$arts['cateid'])->order('artid desc')->limit(1)->value('artid'); //使用limit方法查询该栏目的下一篇文章的id值 $next= \think\Db::name('article')->where('artid','>',$id)->where('cateid','=',$arts['cateid'])->order('artid asc')->limit(1)->value('artid'); $this->assign('arts',$arts); $this->assign('prev',$prev); $this->assign('next',$next); $ralateres=$this->ralate($arts['keywords']);//调用ralate方法传递参数关键词 $this->assign('ralateres',$ralateres); return $this->fetch('article'); } //相关文章获取 public function ralate($keywords){ $arr=explode(',', $keywords);//将获取的关键词转化为数组 $ralateres=array(); //根据关键词遍历文章数据库获取具有该关键词的文章(可能会获取到重复的文章) foreach ($arr as $k => $v) { $map['keywords'] = ['like','%'.$v.'%']; //从数据库中获取具有该关键词的所有文章 $artres= \think\Db::name('article')->order('artid desc')->where($map)->limit(10)->field('artid,title,time')->select(); $ralateres=array_merge($ralateres,$artres);//两数组合并为一个数组(将新获取的文章插入到之前的文章数组中) $ralateres=$this->arr_unique($ralateres);//数组去重(文章去重) } return $ralateres; } /**相关文章数组去重函数 * @param [type] * @return [type] */ public function arr_unique($arr2D){ //将二维数组转化为一维数组 foreach ($arr2D as $v) { $v=join(',',$v); $temp[]=$v;//每篇文章的信息成了一个字符串 } $temp=array_unique($temp);//去重,去除重复的文章信息 //再恢复成二维数组 foreach ($temp as $k => $v) { $temp[$k]=explode(',', $v); } return $temp; }}文章详情页的模板输出:
<div class="sidebar-module sidebar-module-inset"> <h4>相关文章:</h4> <ol class="list-unstyled"> <li class="msgarticle"> {volist name="ralateres" id="vo"} <p><a href="{:url('article/index',array('artid'=>$vo[0]))}">{$vo.1}</a> ({$vo.2|date="Y-m-d H:i:s",###})</p> {/volist} </li> </ol> </div>效果:
阅读全文
0 0
- [thinkPHP5项目实战_28]前台文章"相关文章"的功能完善
- [thinkPHP5项目实战_29]前台首页和文章搜索功能完善
- [thinkPHP5项目实战_25]前台文章列表展示
- [thinkPHP5项目实战_26]前台文章关键词搜索
- [thinkPHP5项目实战_20]友情链接功能完善
- [thinkPHP5项目实战_30]留言板功能完善
- [thinkPHP5项目实战_16]文章列表展示
- [thinkPHP5项目实战_17]文章编辑
- [thinkPHP5项目实战_12]文章管理界面创建
- [thinkPHP5项目实战_13]新增文章界面附件上传
- [thinkPHP5项目实战_15]创建文章读取栏目列表
- [thinkPHP5项目实战_06]引入前台页面
- [thinkPHP5项目实战_27]前台文章内容展示
- [thinkPHP5项目实战_24]前台页面导航栏目调用
- 项目优化涉及到的相关文章
- thinkphp5实战系列(二)前台模板的引入
- 光驱的相关文章
- Cruisecontrol相关的文章
- K-means
- web-html_电脑手机网页-处理办法
- 20171112
- 【深度学习系列】手写数字识别--卷积神经网络CNN原理详解(一)
- JAVA基础复习二十三-多线程
- [thinkPHP5项目实战_28]前台文章"相关文章"的功能完善
- String/StringBuffer/StringBuilder学习记录
- 05-树9 Huffman Codes
- centos安装maven
- 《完美设计模式》之责任链模式
- PN结的形成原理
- 首篇--spring使用@value注入静态变量
- zhkmjj
- Multiply Strings(大整数乘法)