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 随机生成10位字符代码
Mar 26 PHP
php学习之 数组声明
Jun 09 PHP
分享一下贝贝成长进度的php代码
Sep 14 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 PHP
PHP连接SQLServer2005的方法
Jan 27 PHP
PHP判断IP并转跳到相应城市分站的方法
Mar 25 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
Jul 13 PHP
如何打开php的gd2库
Feb 09 PHP
php实现微信企业转账功能
Oct 02 PHP
PHP大文件分片上传的实现方法
Oct 28 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
Dec 10 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
域名查询代码公布
2006/10/09 PHP
php网页病毒清除类
2014/12/08 PHP
php利用递归实现删除文件目录的方法
2016/09/23 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
2016/07/18 Javascript
Angular.JS中的this指向详解
2017/05/17 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
详细介绍Python中的偏函数
2015/04/27 Python
浅析Python函数式编程
2018/10/06 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
tensorflow如何批量读取图片
2019/08/29 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
解决Tensorflow占用GPU显存问题
2020/02/03 Python
python集合删除多种方法详解
2020/02/10 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
市场营销专业个人自荐信格式
2013/09/21 职场文书
大四学生思想汇报
2014/01/13 职场文书
工程师岗位职责规定
2014/02/26 职场文书
安全演讲稿大全
2014/05/09 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
推普周活动总结
2014/08/28 职场文书
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书