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 相关文章推荐
PHP+javascript液晶时钟
Oct 09 PHP
adodb与adodb_lite之比较
Dec 31 PHP
php 安全过滤函数代码
May 07 PHP
php反射应用示例
Feb 25 PHP
Linux中为php配置伪静态
Dec 17 PHP
编写PHP脚本来实现WordPress中评论分页的功能
Dec 10 PHP
Yii数据模型中rules类验证器用法分析
Jul 15 PHP
PHP实现批量检测网站是否能够正常打开的方法
Aug 23 PHP
PHP弱类型语言中类型判断操作实例详解
Aug 10 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 22 PHP
TP5框架请求响应参数实例分析
Oct 17 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入门源程序
2006/10/09 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
2016/05/10 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
简述vue中的config配置
2018/01/23 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
swiper实现导航滚动效果
2020/12/13 Javascript
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
办理暂住证介绍信
2014/01/11 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
讲党性心得体会
2014/09/03 职场文书
今日说法观后感
2015/06/08 职场文书
2015双创工作总结
2015/07/24 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书