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木马攻击防御之道
Mar 24 PHP
MySQL数据源表结构图示
Jun 05 PHP
坏狼的PHP学习教程之第1天
Jun 15 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
Jul 03 PHP
php+ajax实现文章自动保存的方法
Dec 30 PHP
PHP制作用户注册系统
Oct 23 PHP
php实现的http请求封装示例
Nov 08 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
php7函数,声明,返回值等新特性介绍
May 25 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 PHP
laravel config文件配置全局变量的例子
Oct 13 PHP
mac pecl 安装php7.1扩展教程
Oct 17 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
检测png图片是否完整的php代码
2010/09/06 PHP
php实现的mongodb操作类
2015/05/28 PHP
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
2016/12/08 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
2018/01/20 Javascript
Javascript实现运算符重载详解
2018/04/07 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
python实现查询IP地址所在地
2015/03/29 Python
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
奖励申请报告范文
2015/05/15 职场文书
亮剑观后感500字
2015/06/05 职场文书
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python