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 相关文章推荐
apache2.2.4+mysql5.0.77+php5.2.8安装精简
Apr 29 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
详解PHP匿名函数与注意事项
Mar 29 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
Aug 01 PHP
PHP __call()方法实现委托示例
May 20 PHP
在Laravel 中实现是否关注的示例
Oct 22 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
php-7.3.6 编译安装过程
Feb 11 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 03 PHP
HTTP头隐藏PHP版本号实现过程解析
Dec 09 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获取文件大小的方法
2014/02/26 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
2015/12/10 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
JavaScript中this详解
2015/09/01 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
Angular 2.x学习教程之结构指令详解
2017/05/25 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
详解VUE 数组更新
2017/12/16 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
python使用配置文件过程详解
2019/12/28 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
大学考试作弊检讨书
2014/01/30 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
公司授权委托书
2014/04/04 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
文明倡议书
2015/01/19 职场文书
社区安全温馨提示语
2015/07/14 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python