php ThinkPHP文章上一篇、下一篇解决方案

在平时的项目中,我们常常会遇到下述的一种情况:

在文章详情页的底部位置,有上一篇、下一篇文章。


初次遇到此类问题,习惯性的按照前辈的处理思路

http://www.jb51.net/article/58286.htm

//上一篇  
$front=$Article->where("id<".$id)->order('id desc')->limit('1')->find();  
$this->assign('front',$front);  
//下一篇  
$after=$Article->where("id>".$id)->order('id desc')->limit('1')->find();  
$this->assign('after',$after);

即:根据条件查找出此文章id的前后文章。看似正确的思路,其实存在着一些小问题。


本人在调用文章列表的时候,一般有个排序依据,首先根据管理员设定的文章排序(listorder字段)进行排序,当管理员后台设定的排序相同时,再根据文章发布的时间进行排序,即:

$list = $Model->where($map)->field('id,sm_images,title,author,show_time,description')->order('listorder,show_time DESC')->limit($Page->firstRow.','.$Page->listRows)->select();

此种情况若单单根据文章的id进行调用id相邻的两篇文章,就不合理了。

列如:

id    title      listorder

1    西游记      3

2    水浒传      2

3    红楼梦      1

4    三国演义    4

5    鬼吹灯     5


我们调用文章列表时,根据listorder的正序排列,得到的文章依次为:红楼梦、水浒传、西游记、三国演义、鬼吹灯

如果我们当前正在阅读西游记,那么他前后的文章应该为 前一篇:水浒传  后一篇:三国演义

但是按照前后id为:前一篇:无  后一篇:水浒传,就不符合要求了


所以,我们应该根据他的排序条件来确定他的上一篇和下一篇

//获取上一篇、下一篇文章
$map['cat_id'] = $data['cat_id'];
$map['id'] = array('neq',$id);
$map['listorder'] = array('elt',$data['listorder']);
$map['show_time'] = array('egt',$data['show_time']);
$data['prev'] = M('Article')->where($map)->order('listorder,show_time DESC')->field('id,title,show_time,listorder')->find();

$map['listorder'] = array('egt',$data['listorder']);
$map['show_time'] = array('elt',$data['show_time']);
$data['next'] = M('Article')->where($map)->order('listorder,show_time DESC')->field('id,title,show_time,listorder')->find();


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值