TP5 相关文章推荐

发布于 2019-01-23  1.91k 次阅读


项目里常遇见的大多数情况下是商品和文章的相关推荐。

在这里,我先提供个我自己的思路,如果有其他的欢迎大家补充:

  1. 在文章编辑页面 给一个输入框,让用户输入相关新闻的id。
  2. 在文章编辑页面,循环出所有的新闻,让用户勾选
  3. 给文章一个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


欣赏才华