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实现多级树型菜单
Oct 09 PHP
在smarty模板中使用PHP函数的方法
Apr 23 PHP
php小型企业库存管理系统的设计与实现代码
May 16 PHP
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
php ZipArchive压缩函数详解实例
Nov 06 PHP
php下载excel无法打开的解决方法
Dec 24 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
php中$_POST与php://input的区别实例分析
Jan 07 PHP
学习php设计模式 php实现合成模式(composite)
Dec 08 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
php批量删除操作(数据访问)
May 23 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
php 过滤危险html代码
2009/06/29 PHP
PHP关联链接常用代码
2012/11/05 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
2014/08/15 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
数据库的约束含义
2012/09/09 面试题
自我鉴定范文300字
2013/10/01 职场文书
师范应届生求职信
2013/11/15 职场文书
党支部公开承诺践诺书
2014/03/28 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
批评与自我批评总结
2014/10/17 职场文书
财务部岗位职责
2015/02/03 职场文书
队列队形口号
2015/12/25 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang
JavaScript原型链详解
2021/11/07 Javascript
Oracle中日期的使用方法实例
2022/07/07 Oracle