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 相关文章推荐
模拟flock实现文件锁定
Feb 14 PHP
PHP 中dirname(_file_)讲解
Mar 18 PHP
PHP IPV6正则表达式验证代码
Feb 16 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
PHP学习笔记之数组篇
Jun 28 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
在Win7 中为php扩展配置Xcache
Oct 08 PHP
thinkphp缓存技术详解
Dec 09 PHP
PHP导出Excel实例讲解
Jan 24 PHP
解决laravel5.4下的group by报错的问题
Oct 16 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 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
用来解析.htgroup文件的PHP类
2012/09/05 PHP
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
PHP提示Cannot modify header information - headers already sent by解决方法
2014/09/22 PHP
Yii框架用户登录session丢失问题解决方法
2017/01/07 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
2016/08/08 Javascript
JS判断用户用的哪个浏览器实例详解
2018/10/09 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
Python3字符串学习教程
2015/08/20 Python
Python中方法链的使用方法
2016/02/23 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
Python实现按中文排序的方法示例
2018/04/25 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
环境科学专业研究生求职信
2013/10/02 职场文书
怎样写好自荐信和推荐信
2013/12/26 职场文书
行政助理的岗位职责
2014/02/18 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
2014年政工师工作总结
2014/12/18 职场文书
先进员工事迹材料
2014/12/20 职场文书
56句经典英文座右铭
2019/08/09 职场文书
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang