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 相关文章推荐
基于文本的搜索
Oct 09 PHP
php防攻击代码升级版
Dec 29 PHP
PHP5中新增stdClass 内部保留类
Jun 13 PHP
深入解析PHP内存管理之谁动了我的内存
Jun 20 PHP
php5.2以下版本无json_decode函数的解决方法
May 25 PHP
php实现获取及设置用户访问页面语言类
Sep 24 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
PHP实现GIF图片验证码
Nov 04 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
Mar 13 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 18 PHP
php 可变函数使用小结
Jun 12 #PHP
yii2中关于加密解密的那些事儿
Jun 12 #PHP
php中curl和soap方式请求服务超时问题的解决
Jun 11 #PHP
Laravel框架模板继承操作示例
Jun 11 #PHP
Laravel框架模板加载,分配变量及简单路由功能示例
Jun 11 #PHP
Laravel框架在本地虚拟机快速安装的方法详解
Jun 11 #PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 #PHP
You might like
我的论坛源代码(七)
2006/10/09 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
php上传文件问题汇总
2015/01/30 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
PHP常用的三种设计模式
2017/02/17 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
jQuery随机切换图片的小例子
2013/04/18 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
Javascript实现的SHA-256加密算法完整实例
2016/02/02 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
JavaScript生成一个不重复的ID的方法示例
2019/09/16 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
python制作最美应用的爬虫
2015/10/28 Python
Python实现模拟时钟代码推荐
2015/11/08 Python
Python学习之用pygal画世界地图实例
2017/12/07 Python
flask框架视图函数用法示例
2018/07/19 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
四个太阳教学反思
2014/02/01 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
大学毕业生自我评价
2015/03/02 职场文书
nginx安装以及配置的详细过程记录
2021/09/15 Servers
Javascript 解构赋值详情
2021/11/17 Javascript
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python