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获得当前的脚本网址
Dec 10 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
Sep 06 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
Thinkphp中的curd应用实用要点
Jan 04 PHP
PHP6新特性分析
Mar 03 PHP
PHP的全局错误处理详解
Apr 25 PHP
PHP单例模式详解及实例代码
Dec 21 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
Dec 24 PHP
php防止sql注入的方法详解
Feb 20 PHP
PHP实现防盗链的方法分析
Jul 25 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 PHP
php校验公钥是否可用的实例方法
Sep 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
深入PHP与浏览器缓存的分析
2013/06/03 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
Python多进程分块读取超大文件的方法
2016/04/13 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
CheapTickets香港机票预订网站:CheapTickets.hk
2019/06/26 全球购物
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
演讲稿开场白
2014/01/13 职场文书
两只小狮子教学反思
2014/02/05 职场文书
制作部班长职位说明书
2014/02/26 职场文书
清明节网上祭英烈活动总结
2014/04/30 职场文书
励志演讲稿300字
2014/08/21 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书
525心理健康活动总结
2015/05/08 职场文书
简单介绍Python的第三方库yaml
2021/06/18 Python
python中tkinter复选框使用操作
2021/11/11 Python