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.ini中文版
Oct 09 PHP
php 5.3.5安装memcache注意事项小结
Apr 12 PHP
php 缩略图实现函数代码
Jun 23 PHP
PHP 日,周,月点击排行统计
Jan 11 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
Mar 01 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 PHP
php获得网站访问统计信息类Compete API用法实例
Apr 02 PHP
php猴子选大王问题解决方法
May 12 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
yii2 页面底部加载css和js的技巧
Apr 21 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 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
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
原生Javascript封装的一个AJAX函数分享
2014/10/11 Javascript
jQuery知识点整理
2015/01/30 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
基于jQuery制作小图标上下滑动特效
2017/01/18 Javascript
原生js实现旋转木马轮播图效果
2017/02/27 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
js实现选项卡效果
2020/03/07 Javascript
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
python字符串连接的N种方式总结
2014/09/17 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
Python二维码生成识别实例详解
2019/07/16 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
给全校老师的建议书
2014/03/13 职场文书
小班下学期评语
2014/05/04 职场文书
医院保洁服务方案
2014/06/11 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
2014乡镇班子个人对照检查材料思想汇报
2014/09/26 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
停电通知范文
2015/04/16 职场文书
施工安全责任协议书
2016/03/23 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python