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为什么选mysql作为数据库? Mysql 创建用户方法
Jul 02 PHP
php下载文件的代码示例
Jun 29 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
php操作mysqli(示例代码)
Oct 28 PHP
zf框架的registry(注册表)使用示例
Mar 13 PHP
去除php注释和去除空格函数分享
Mar 13 PHP
CodeIgniter安全相关设置汇总
Jul 03 PHP
php生成图片验证码的方法
Apr 15 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
Apr 30 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
Jul 04 PHP
详解php 使用Callable Closure强制指定回调类型
Oct 26 PHP
laravel框架中视图的基本使用方法分析
Nov 23 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制作静态网站的模板框架(三)
2006/10/09 PHP
调整PHP的性能
2013/10/30 PHP
php中\r \r\n \t的区别示例介绍
2014/02/08 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
js function定义函数使用心得
2010/04/15 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
微信小程序实现类似微信点击语音播放效果
2020/03/30 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
python黑魔法之编码转换
2016/01/25 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
打印机墨盒:123Inkjets
2017/02/16 全球购物
韩语专业本科生求职信
2013/10/01 职场文书
学校后勤人员职责
2013/12/27 职场文书
编辑找工作求职信分享
2014/01/03 职场文书
学校卫生检查制度
2014/02/03 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
吃通javascript正则表达式
2021/04/21 Javascript