php如何实现上一篇下一篇

网站开发过程中经常遇见上一篇下一篇问题的处理,今天刚好在做一个项目的时候也遇到了,这个是对自己以前方法的改进,可能会存在没有考虑到的问题,请大家可以在这个基础上改进

首先,当我们去访问一篇文章的时候需要在路由中传递这个文章的id以及这篇文章所属的栏目,id,cateid

要保证显示的上一篇和下一篇文章和当前文章是同一个栏目下的文章,会有一个方法显示某一篇文章的具体信息

例如这样:

// 话题内容页
public function index(){
    $topics = D('TopartView');
    $cateid = I('cateid');
    $arid = I('arid');
    // 调用分页方法(上一页下一页)
    $this->pages($arid,$cateid);

    $content = $topics->where(array('id'=>$arid))->find();
    if($content) {
        // 浏览次数
        $topics->where(array('id'=>$arid))->setInc('click',1);
        $this->assign('content',$content);
        $this->display();
    }else {
        $this->error('非法操作',U('account/login'));
    }
}

可以看到这个方法里面也接收了id,cateid两个参数   ,有一个方法pages,这个方法就是调用上一篇下一篇文章的

具体实现方法如下:

/*
 * $id  当前文章id
 * $cateid 当前文章所属栏目id
 * */
public function pages($id,$cateid) {
    $topic = D('Topic');

    // 下一页查询条件
    $where = array(
        'id' => array('gt',$id),
        'cateid' => array('eq',$cateid),
    );
    $next_topic = $topic->order('id asc')->where($where)->limit(1)->select();
    if($next_topic) {
        $next_topic = $next_topic[0];
    }else {
        $next_topic = null;
    }

    // 下一篇查询条件
    $where = array(
        'id' => array('lt',$id),
        'cateid' => array('eq',$cateid),
    );
    $prev_topic = $topic->order('id desc')->where($where)->limit(1)->select();
    if($prev_topic) {
        $prev_topic = $prev_topic[0];
    }else {
        $prev_topic = null;
    }

    $this->assign('prev_topic',$prev_topic);
    $this->assign('next_topic',$next_topic);
}


这个方法的核心在于where条件的使用,显示下一页的时候必须保证id是要大于当前文章的id,同样上一篇的id需要小于当前文章的id,并且这里还有一个需要注意的问题是每一篇文章并不是连续的,有的文章可能被删除了,所以在查询的时候记得排序一下,查询下一篇的时候就是按照升序,查询下一篇的时候就是按照降序,然后就是数据的分配了,整个过程就是这样



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值