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访问查询mysql数据的三种方法
Oct 09 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
解决ajax+php中文乱码的方法详解
Jun 09 PHP
ThinkPHP提交表单时默认自动转义的解决方法
Nov 25 PHP
PHP实现Javascript中的escape及unescape函数代码分享
Feb 10 PHP
php中get_cfg_var()和ini_get()的用法及区别
Mar 04 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
php将图片文件转换成二进制输出的方法
Jun 10 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
phalcon框架使用指南
Feb 23 PHP
PHP中trait使用方法详细介绍
May 21 PHP
在laravel5.2中实现点击用户头像更改头像的方法
Oct 14 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
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
php 邮件发送问题解决
2014/03/22 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
javascript定义变量时带var与不带var的区别分析
2015/01/12 Javascript
使用jQuery实现返回顶部
2015/01/26 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
Python中的字典遍历备忘
2015/01/17 Python
python发送HTTP请求的方法小结
2015/07/08 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
2020/06/05 Python
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
年度考核自我鉴定
2014/02/02 职场文书
小学开学典礼主持词
2014/03/19 职场文书
中秋节主持词
2014/04/02 职场文书
我的祖国演讲稿
2014/05/04 职场文书
讲文明树新风演讲稿
2014/05/12 职场文书
单位工作证明范文
2014/09/14 职场文书
警察群众路线整改措施
2014/09/26 职场文书
小学假期安全广播稿
2014/09/28 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
玄武湖导游词
2015/02/05 职场文书
党支部半年考察意见
2015/06/01 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android