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 相关文章推荐
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
php 获取完整url地址
Dec 20 PHP
精通php的十大要点(上)
Feb 04 PHP
php strcmp使用说明
Apr 22 PHP
使用PHP实现二分查找算法代码分享
Jun 24 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
Mar 05 PHP
php版微信返回用户text输入的方法
Nov 14 PHP
利用 fsockopen() 函数开放端口扫描器的实例
Aug 19 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 PHP
php 函数中静态变量使用的问题实例分析
Mar 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
用PHP创建PDF中文文档
2006/10/09 PHP
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
python 提取文件的小程序
2009/07/29 Python
python邮件发送smtplib使用详解
2020/06/16 Python
python中join()方法介绍
2018/10/11 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
python调用自定义函数的实例操作
2019/06/26 Python
Python 如何对文件目录操作
2020/07/10 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
英国钻石公司:British Diamond Company
2020/02/16 全球购物
中科创达面试题
2016/12/28 面试题
房地产融资计划书
2014/01/10 职场文书
安全保证书怎么写
2015/02/28 职场文书
环卫工作个人总结
2015/03/04 职场文书
离婚律师函范本
2015/05/27 职场文书
五年级作文之学校的四季
2019/12/05 职场文书