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 14 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
Feb 21 PHP
Discuz!下Memcache缓存实现方法
May 28 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 PHP
php文件上传的简单实例
Oct 19 PHP
php使用ob_start()实现图片存入变量的方法
Nov 14 PHP
Thinkphp无限级分类代码
Nov 11 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
Jan 08 PHP
PHP中字符与字节的区别及字符串与字节转换示例
Oct 15 PHP
Laravel框架生命周期与原理分析
Jun 12 PHP
Mac下快速搭建PHP开发环境步骤详解
May 05 PHP
Laravel实现搜索的时候分页并携带参数
Oct 15 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
SSI指令
2006/11/25 PHP
php的$_FILES的临时储存文件与回收机制实测过程
2013/07/12 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
jquery ajax例子返回值详解
2012/09/11 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
理运用命名空间让js不产生冲突避免全局变量的泛滥
2014/06/15 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
JS脚本加载后执行相应回调函数的操作方法
2018/02/28 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
Python实现的生成格雷码功能示例
2018/01/24 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
python中字符串的操作方法大全
2018/06/03 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
python仿抖音表白神器
2019/04/08 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
个人查摆剖析材料
2014/02/04 职场文书
感谢信范文大全
2015/01/23 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
2015年教务工作总结
2015/05/23 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python