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生成随机密码的三种方法小结
Sep 04 PHP
PHP关联数组的10个操作技巧
Jan 21 PHP
php使用sql数据库 获取字段问题介绍
Aug 12 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
将FCKeditor导入PHP+SMARTY的实现方法
Jan 15 PHP
php读取csc文件并输出
May 21 PHP
thinkPHP使用post方式查询时分页失效的解决方法
Dec 09 PHP
php及codeigniter使用session-cookie的方法(详解)
Apr 06 PHP
php实现数组重复数字统计实例
Sep 30 PHP
关于php开启错误提示的总结
Sep 24 PHP
tp5.1 框架路由操作-URL生成实例分析
May 26 PHP
PHP array_reverse() 函数原理及实例解析
Jul 14 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
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
2013/04/24 PHP
PHP程序级守护进程的实现与优化的使用概述
2013/05/02 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
解析jquery获取父窗口的元素
2013/06/26 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
全面了解JS中的匿名函数
2016/06/29 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
浅谈javascript alert和confirm的美化
2016/12/15 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
详解JavaScript中typeof与instanceof用法
2018/10/24 Javascript
python+mysql实现简单的web程序
2014/09/11 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
Pytorch 使用不同版本的cuda的方法步骤
2020/04/02 Python
windows支持哪个版本的python
2020/07/03 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
浅谈HTML5 Web Worker的使用
2018/01/05 HTML / CSS
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
安全资料员岗位职责
2013/12/14 职场文书
幼儿园毕业家长感言
2014/02/10 职场文书
2014年机关植树节活动方案
2014/02/27 职场文书
课外活动总结
2015/02/04 职场文书
Nginx配置80端口访问8080及项目名地址方法解析
2021/03/31 Servers