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加密解密的代码
Oct 09 PHP
PHP 在线翻译函数代码
May 07 PHP
自定义php类(查找/修改)xml文档
Mar 26 PHP
解析zend studio中直接导入svn中的项目的方法步骤
Jun 21 PHP
解析php中var_dump,var_export,print_r三个函数的区别
Jun 21 PHP
php增删改查示例自己写的demo
Sep 04 PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 PHP
Laravel 5框架学习之子视图和表单复用
Apr 09 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
May 08 PHP
PHP实现可自定义样式的分页类
Mar 29 PHP
PHP微信开发之文本自动回复
Jun 23 PHP
TP5框架安全机制实例分析
Apr 05 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
php学习之 循环结构实现代码
2011/06/09 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
2016/07/24 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
Python中if __name__ == &quot;__main__&quot;详细解释
2014/10/21 Python
python如何把嵌套列表转变成普通列表
2018/03/20 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
Python实现电视里的5毛特效实例代码详解
2020/05/15 Python
软件测试企业面试试卷
2016/07/13 面试题
产品促销活动策划书
2014/01/15 职场文书
模特职业生涯规划范文
2014/02/26 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
大队干部竞选演讲稿
2014/04/28 职场文书
开工典礼策划方案
2014/05/23 职场文书
材料化学专业求职信
2014/07/15 职场文书
观看《周恩来的四个昼夜》思想汇报
2014/09/12 职场文书
2016学校先进党组织事迹材料
2016/02/29 职场文书
使用golang编写一个并发工作队列
2021/05/08 Golang