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 获取MSN好友列表的代码(2009-05-14测试通过)
Sep 09 PHP
php防注入,表单提交值转义的实现详解
Jun 10 PHP
修改destoon会员公司的伪静态中的com目录的方法
Aug 21 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
php实现每天自动变换随机问候语的方法
May 12 PHP
php简单socket服务器客户端代码实例
May 18 PHP
php实现无限级分类(递归方法)
Aug 06 PHP
PHP 无限级分类
May 04 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 PHP
PHP7 整型处理机制修改
Mar 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
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
jQuery动态添加
2016/04/07 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
react基本安装与测试示例
2020/04/27 Javascript
vue实现图书管理系统
2020/12/29 Vue.js
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
农田水利实习自我鉴定
2013/09/19 职场文书
小学音乐教学反思
2014/02/05 职场文书
妇女工作先进事迹
2014/08/17 职场文书
大学毕业生自我评价
2015/03/02 职场文书
Golang生成Excel文档的方法步骤
2021/06/09 Golang
python程序的组织结构详解
2021/12/06 Python
使用Python解决图表与画布的间距问题
2022/04/11 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python