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 相关文章推荐
WML,Apache,和 PHP 的介绍
Oct 09 PHP
中国站长站 For Dede4.0 采集规则
May 27 PHP
并发下常见的加锁及锁的PHP具体实现代码
Oct 12 PHP
zend framework多模块多布局配置
Feb 26 PHP
php中将数组存到文件里的实现代码
Jan 19 PHP
关于Zend Studio 配色方案插件的介绍
Jun 24 PHP
PHP数组函数知识汇总
May 12 PHP
php fseek函数读取大文件两种方法
Oct 12 PHP
php获取excel文件数据
Apr 21 PHP
thinkPHP框架中layer.js的封装与使用方法示例
Jan 18 PHP
Laravel使用原生sql语句并调用的方法
Oct 09 PHP
Laravel 创建可以传递参数 Console服务的例子
Oct 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魔术引号所带来的安全问题分析
2014/07/15 PHP
php简单复制文件的方法
2016/05/09 PHP
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
ExtJs使用总结(非常详细)
2012/03/22 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
2016/09/08 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
2018/04/26 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
python自动安装pip
2014/04/24 Python
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
Python使用django框架实现多人在线匿名聊天的小程序
2017/11/29 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
python绘制直方图和密度图的实例
2019/07/08 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
python实现126邮箱发送邮件
2020/05/20 Python
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
法学毕业生自荐信
2013/11/13 职场文书
新闻专业本科生的自我评价分享
2013/11/20 职场文书
体育教育毕业生自荐信
2013/11/21 职场文书
自荐书封面下载
2013/11/29 职场文书
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
岗位说明书怎么写
2014/07/30 职场文书
民用住房租房协议书
2014/10/29 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
资金申请报告范文
2015/05/14 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
2019让人心动的商业计划书
2019/06/27 职场文书
golang连接MySQl使用sqlx库
2022/04/14 Golang