Laravel框架分页实现方法分析


Posted in PHP onJune 12, 2018

本文实例讲述了Laravel框架分页实现方法。分享给大家供大家参考,具体如下:

Laravel使用的过程中,有些功能把前端页面的表达“写死了”,比如分页的翻页按钮!

当然你会说Laravel的Bootstrap样式也很好看啊,但是实际项目中,翻页按钮常常需要满足的客户的需要,特别在开发一款支持手机适配的Web APP,更是需要使用自定义的样式。

所以,学习一样东西不能一知半解,而是究其原理。

先来看看Laravel是怎么分页的,生成分页按钮的代码究竟写在了哪里?

Laravel目录\vendor\laravel\framework\src\Illuminate\Pagination

先理一下类的继承关系

PresenterContract(父类)
BootstrapThreePresenter(子类)<-SimpleBootstrapThreePresenter
BootstrapFourPresenter(子类)<-SimpleBootstrapFourPresenter

从作者对类的命名上看,必有区别,我们从代码上研究

BootstrapThreePresenter.php和BootstrapFourPresenter.php主要区别在下列函数

BootstrapThreePresenter.php代码:

/**
* Get HTML wrapper for an available page link.
*
* @param string $url
* @param int $page
* @param string|null $rel
* @return string
*/
protected function getAvailablePageWrapper($url, $page, $rel = null)
{
    $rel = is_null($rel) ? '' : ' rel="'.$rel.'"';
    return '<li><a href="'.htmlentities($url).'" rel="external nofollow" rel="external nofollow" '.$rel.'>'.$page.'</a></li>';
}
/**
* Get HTML wrapper for disabled text.
*
* @param string $text
* @return string
*/
protected function getDisabledTextWrapper($text)
{
    return '<li class="disabled"><span>'.$text.'</span></li>';
}
/**
* Get HTML wrapper for active text.
*
* @param string $text
* @return string
*/
protected function getActivePageWrapper($text)
{
    return '<li class="active"><span>'.$text.'</span></li>';
}

BootstrapFourPresenter.php代码:

/**
* Get HTML wrapper for an available page link.
*
* @param string $url
* @param int $page
* @param string|null $rel
* @return string
*/
protected function getAvailablePageWrapper($url, $page, $rel = null)
{
    $rel = is_null($rel) ? '' : ' rel="'.$rel.'"';
    return '<li class="page-item"><a class="page-link" href="'.htmlentities($url).'" rel="external nofollow" rel="external nofollow" '.$rel.'>'.$page.'</a></li>';
}
/**
* Get HTML wrapper for disabled text.
*
* @param string $text
* @return string
*/
protected function getDisabledTextWrapper($text)
{
    return '<li class="page-item disabled"><a class="page-link">'.$text.'</a></li>';
}
/**
* Get HTML wrapper for active text.
*
* @param string $text
* @return string
*/
protected function getActivePageWrapper($text)
{
    return '<li class="page-item active"><a class="page-link">'.$text.'</a></li>';
}

我们发现最大的区别在ThreePresenter几乎是“裸”HTML标签,而FourPresenter生成的是带class的HTML标签。

无论是ThreePresenter还是FourPresenter,他们都有一个相同实现的render()函数

/**
* Convert the URL window into Bootstrap HTML.
*
* @return \Illuminate\Support\HtmlString
*/
public function render()
{
    if ($this->hasPages()) {
      return new HtmlString(sprintf(
        '<ul class="pagination">%s %s %s</ul>',
        $this->getPreviousButton(),
        $this->getLinks(),
        $this->getNextButton()
      ));
    }
    return '';
}

细心的读者已经发觉,还有两个继承类,分别是SimpleThreePresenter和SimpleFourPresenter,既然是Simple(简单),区别就在他们的render()函数

/**
* Convert the URL window into Bootstrap HTML.
*
* @return \Illuminate\Support\HtmlString
*/
public function render()
{
    if ($this->hasPages()) {
      return new HtmlString(sprintf(
        '<ul class="pager">%s %s</ul>',
        $this->getPreviousButton(),
        $this->getNextButton()
      ));
    }
    return '';
}

也就是说,SimpleThreePresenter和SimpleFourPresenter生成的分页按钮是没有“页码”的,只有“上一页”和“下一页”按钮。

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
MySQL中create table语句的基本语法是
Jan 15 PHP
PHP采集利器 Snoopy 试用心得
Jul 03 PHP
yii实现图片上传及缩略图生成的方法
Dec 04 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
Nov 23 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
May 26 PHP
Thinkphp连表查询及数据导出方法示例
Oct 15 PHP
分享5个非常有用的Laravel Blade指令
May 30 PHP
Laravel源码解析之路由的使用和示例详解
Sep 27 PHP
PHP的PDO事务与自动提交
Jan 24 PHP
php中的钩子理解及应用实例分析
Aug 30 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 PHP
php 可变函数使用小结
Jun 12 #PHP
PHP程序员学习使用Swoole的理由
Jun 24 #PHP
PHP实现的装箱算法示例
Jun 23 #PHP
PHP基于curl模拟post提交json数据示例
Jun 22 #PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 #PHP
PHP实现将base64编码字符串转换成图片示例
Jun 22 #PHP
PHP实现正则匹配所有括号中的内容
Jun 22 #PHP
You might like
PHP 实例化类的一点摘记
2008/03/23 PHP
PHP session会话的安全性分析
2011/09/08 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
JS验证身份证有效性示例
2013/10/11 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
Css3制作变形与动画效果
2015/07/24 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
Python中字典和集合学习小结
2017/07/07 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
公司委托书格式范文
2014/04/04 职场文书
优秀教师先进个人事迹材料
2014/08/31 职场文书
个人自查自纠材料
2014/10/14 职场文书
统计工作个人总结
2015/03/03 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
详解Redis复制原理
2021/06/04 Redis
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫