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 相关文章推荐
JAVA/JSP学习系列之六
Oct 09 PHP
如何在PHP中使用Oracle数据库(6)
Oct 09 PHP
php替换超长文本中的特殊字符的函数代码
May 22 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
php socket通信(tcp/udp)实例分析
Feb 14 PHP
php版微信小店API二次开发及使用示例
Nov 12 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
PHP设计模式之工厂模式详解
Oct 24 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
php+ajax实现商品对比功能示例
Apr 13 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
Aug 06 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
《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
PHP 中的类
2006/10/09 PHP
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
深入php处理整数函数的详解
2013/06/09 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
Javascript注入技巧
2007/06/22 Javascript
非常不错的功能强大代码简单的管理菜单美化版
2008/07/09 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
使用Python生成XML的方法实例
2017/03/21 Python
python的mysqldb安装步骤详解
2017/08/14 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
Python语法垃圾回收机制原理解析
2020/03/25 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
python openCV自制绘画板
2020/10/27 Python
党员组织关系介绍信
2014/02/13 职场文书
主题党日活动总结
2014/07/08 职场文书
春节超市活动方案
2014/08/14 职场文书
项目负责人岗位职责
2015/02/15 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
golang elasticsearch Client的使用详解
2021/05/05 Golang
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python