yii2实现 "上一篇,下一篇" 功能的代码实例


Posted in PHP onFebruary 04, 2017

最近做了简答的文章详情页面,需要在页面底部加入上一篇,下一篇 按钮,分析了下,最基本需要有文章的标题和id(作为参数).

开始想的是当前的id加减1,但考虑到如果部分id丢失就不对了,于是分别查询比当前id大和小的记录并且限定为一条,于是有了以下代码。

代码如下,不对的地方请指教.

控制器中

//查询上-篇文章
    $prev_article = 你的模型::find()
      ->andFilterWhere(['<', 'id', $id])
      ->andFilterWhere([其他条件)
      ->orderBy(['id' => SORT_DESC])
      ->limit(1)
      ->one();
    //查询下-篇文章
    $next_article = 你的模型::find()
      ->andFilterWhere(['>', 'id', $id])
      ->andFilterWhere(其他条件)
      ->orderBy(['id' => SORT_ASC])
      ->limit(1)
      ->one();


    $model['prev_article'] = [
      'url' => !is_null($prev_article) ? Url::current(['id'=>$prev_article->id]) : 'javascript:;',
      'title' => !is_null($prev_article) ? $prev_article->title : '没有了',
    ];

    $model['next_article'] = [
      'url' => !is_null($next_article) ? Url::current(['id'=>$next_article->id]) : 'javascript:;',
      'title' => !is_null($next_article) ? $next_article->title : '没有了',
    ];

    return $this->render('view', 
      'model' => $model, 
    );

视图中

<div class="left">
    <p>上一篇:
      <a href="<?=$model['prev_article']['url']?>">
        <?=$model['prev_article']['title']?>
      </a>
    </p>
  </div>
  <div class="right">
    <p>下一篇:
      <a href="<?=$model['next_article']['url']?>">
        <?=$model['next_article']['title']?>
      </a>
    </p>
  </div>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
基于文本的留言簿
Oct 09 PHP
PHP编程中八种常见的文件操作方式
Nov 19 PHP
调试一段PHP程序时遇到的三个问题
Jan 17 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
May 29 PHP
请离开include_once和require_once
Jul 18 PHP
设置php页面编码的两种方法示例介绍
Mar 03 PHP
php不写闭合标签的好处
Mar 04 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
Aug 18 PHP
PHP中使用file_get_contents post数据代码例子
Feb 13 PHP
PHP中使用curl入门教程
Jul 02 PHP
PHP的全局错误处理详解
Apr 25 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
PHP正则表达式匹配替换与分割功能实例浅析
Feb 04 #PHP
/etc/php-fpm.d/www.conf 配置注意事项
Feb 04 #PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
Feb 04 #PHP
Yii2实现多域名跨域同步登录退出
Feb 04 #PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 #PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
Feb 04 #PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 #PHP
You might like
PHP 中执行系统外部命令
2006/10/09 PHP
一个简洁的多级别论坛
2006/10/09 PHP
使用composer 安装 laravel框架的方法图文详解
2019/08/02 PHP
javascript getElementsByClassName实现代码
2010/10/11 Javascript
使用js画图之饼图
2015/01/12 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
如何快速上手Vuex
2017/02/14 Javascript
vue.js的安装方法
2017/05/12 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
Webpack中SplitChunksPlugin 配置参数详解
2020/03/24 Javascript
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python解析json文件相关知识学习
2016/03/01 Python
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
Python pymongo模块用法示例
2018/03/31 Python
Python中的TCP socket写法示例
2018/05/11 Python
python实现与redis交互操作详解
2020/04/21 Python
Python进行统计建模
2020/08/10 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
英国网上购买肉类网站:Great British Meat
2018/10/17 全球购物
线程同步的方法
2016/11/23 面试题
2013年高中生自我评价
2013/10/23 职场文书
工商管理实习生自我鉴定范文
2013/12/18 职场文书
大学生村官心得体会范文
2014/01/04 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
授权委托书
2014/07/31 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
催款律师函范文
2015/05/27 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers
MySQL详细讲解变量variables的用法
2022/06/21 MySQL