项目里常遇见的大多数情况下是商品和文章的相关推荐。
在这里,我先提供个我自己的思路,如果有其他的欢迎大家补充:
- 在文章编辑页面 给一个输入框,让用户输入相关新闻的id。
- 在文章编辑页面,循环出所有的新闻,让用户勾选
- 给文章一个keyword字段,去匹配关键词,获得相关数据
这三种方法适用于任何框架或者系统的‘相关推荐’功能。前两种方法比较简单,我就不做介绍了,现在来说一下第三种方法在TP5框架中如何实现。上代码(这段需要写在控制器里):
<?php public function index() { //在文章列表页点击进入获取传过来的文章的id值 $id = input('get.id'); //根据文章id联表查询该文章的栏目名称,获取该文章的信息 $arts = 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); $this->assign('arts',$arts); //调用ralate方法传递参数关键词 $ralateres = $this->ralate($arts['keyword']); $this->assign('ralateres',$ralateres); return $this->fetch(); } //相关文章获取 public function ralate($keywords) { //将获取的关键词转化为数组 $arr = explode(',', $keywords); $ralateres = array(); //根据关键词遍历文章数据库获取具有该关键词的文章(可能会获取到重复的文章) foreach ($arr as $k => $v) { $map['keywords'] = ['like','%'.$v.'%']; //从数据库中获取具有该关键词的所有文章 $artres= Db::name('article')->order('id desc')->where($map)->limit(10)- >field('id,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; }
可根据需要对以上代码做修改。如有更好的实现方式,请留言
参考博客:https://blog.csdn.net/weixin_36185028/article/details/78509785
Comments | NOTHING