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

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

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

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();

php ThinkPHP文章上一篇、下一篇解决方案相关推荐

  1. ShopEx文章页增加上一篇下一篇功能

    在所有的文章页中,会经常发现都会有这么一个功能,能引导用户去查看上一篇文章或下一篇文章,而在ShopEx中,我DEZEND了一下文章模型,并没有找到上一篇这样的函数功能,因此,这就需要我们手动在对应的 ...

  2. java文章上一篇下一篇_每个人都必须阅读的10篇Java文章

    java文章上一篇下一篇 一个月前,我们发布了每个人都必须阅读的10篇SQL文章列表. 我们相信jOOQ博客上的文章列表将为我们的读者带来非凡的价值. jOOQ博客是一个专注于Java和SQL的博客, ...

  3. ecshop调用文章显示上一篇下一篇_无需整理

    为什么80%的码农都做不了架构师?>>>    首先调用文章中的上一篇和下一篇语法为: 上一篇:{$next_article.title} 下一篇:{$prev_article.ti ...

  4. 用Java 实现文章内容上一篇下一篇功能

    ITDragon博客 用Java 实现文章内容上一篇下一篇功能,逻辑和分页不一样.效果和本页面底部一样.采用的是Spring data jpa SQL语句实现该功能 SQL 语句查询的是该数据的上一条 ...

  5. 如何修改dede文章页上一篇下一篇"没有了"

    dedecms上一篇下一篇调用标签: {dede:prenext get='pre'/} {dede:prenext get='next'/} 如何自定义织梦dedecms上一篇下一篇标签调用内容呢, ...

  6. Html做文章查看上一篇下一篇功能,SDCMS文章添加上一篇、下一篇

    SDCMS是一款小型ASP内容管理系统管理开源程序,虽然是小型的,但是主要功能都俱备.在细节方面,该款开源程序没有对内置标签进行统一的管理,不方便日后功能的修改,如果需要修改或者添加,需要去官方网站上 ...

  7. 织梦手机站文章页调用显示只显示 上一篇下一篇 不显示标题

    include目录下的这个文件:arc.archives.class.php中做以下修改 将827行代码-834行代码替换成$this->PreNext['pre'] = "上一篇:& ...

  8. php转盘抽奖源码yii2,yii2实现 上一篇,下一篇 功能的代码实例

    最近做了简答的文章详情页面,需要在页面底部加入上一篇,下一篇 按钮,分析了下,最基本需要有文章的标题和id(作为参数). 开始想的是当前的id加减1,但考虑到如果部分id丢失就不对了,于是分别查询比当 ...

  9. 织梦上一篇下一篇没有了改为英文

    织梦上一篇下一篇没有了改为英文 网站根目录找到 include/arc.archives.class.php 文件 打开找到 上一篇 改为 Previous 上一篇后面的"没有了" ...

  10. Java实现上一篇下一篇内容整理

    1.设置接收上一篇下一篇的实体对象 /**  * 上一篇 下一篇的实体接收  * @author sl  * @since 2018-01-05  */ public class PreAndNext ...

最新文章

  1. [JOISC2014]バス通学
  2. (0026)iOS 开发之模块化封装初步实践
  3. 蓝桥杯C/C++ 带分数
  4. vue组件系列2、拖放上传
  5. Spring Boot——MyBatis配置带下划线命名的字段自动转换驼峰命名解决方案
  6. etcd raft library设计原理和使用
  7. 如何正确的开始用 Go 编程
  8. SubscriptionState分析
  9. Controller接口控制器(3)
  10. cdoj 1328 卿学姐与诡异村庄 Label:并查集 || 二分图染色
  11. 【英语】Flying By Dream---English
  12. 程序员必备英语单词册
  13. PHP微信公众号支付弹出“NaN:undefined”解决方法
  14. Go获取命令行参数及信号量处理
  15. Python - Flask 框架返回的中文是Unicode 编码,如何解决
  16. java编程练习题:统计字符出现的次数
  17. 网络连接状态指示器(NCSI ,Network Connectivity Status Indicator)
  18. 我的软件开发方法论2:复利方法观
  19. python对数据进行分类_按Python对数据进行分类
  20. linux-rootfs根文件系统构建

热门文章

  1. Java实现 藏宝架的宝物(分组DP,7.27阿里面试题)
  2. matlab的打印输出方式
  3. c 调试易语言dll,易语言制作调试助手
  4. 日内短线亏钱最大原因是什么?
  5. 计算机网络 思科模拟器进行交换机端口隔离,跨交换机实现vlan实验
  6. IAR无法调试问题解决
  7. 红米html查看设置,红米路由器怎么进去设置界面?
  8. linux 扫描磁盘柜,Linux下做磁盘阵列和各种热备份
  9. Digital Square HDU - 4394 dfs + 剪枝
  10. [黑群晖]DSM7.1 ds3617xs 志强e3 1265lv3 b85保姆级安装教程