laravel自定义分页效果


Posted in PHP onJuly 23, 2017

对于laravel分页,自带一个paginate的方法,很好用,但是也是有局限性的。

所以自己针对于此写了一个自己的分页,具体代码如下

<?php
namespace ...;

use ...;
/**
 * 自定义分页类,适合少数据的查询,多数据的时候不推荐
 * Class CustomPaginate
 * @package App\Tools\Paginate
 */
class CustomPaginate
{
  /**
   * 自定义数组分页
   * @param $data = 返回结果
   * @param $page
   * @param $limit
   * @return mixed
   */
  public static function paginate($data, $page = 1, $limit = 10)
  {
    if (!is_numeric($page) || !is_numeric($limit)) {
      return false;
    }
    $count = count($data);
    $data = array_slice($data, ($page - 1) * $limit, $limit);
    return new LengthAwarePaginator($data, $count, $limit, $page);
  }

  /**
   * 参数解释 对外暴露的方法
   * @param $data = array|collection 切记只支持这两种
   * @param $page = 当前页
   * @param $limit = 每一页展示几条
   * @return array|false
   * 返回结果为数组
   * 调用实例: CustomPaginate::paginateToArray($data, $request->page, $request->limit);
   */
  public static function paginateToArray($data, $page = 1, $limit = 10)
  {
    $isValidate = self::validate($data, $page, $limit);           //验证
    if ($isValidate === false) {
      return false;
    }

    $res = self::paginate($data, $page, $limit)->toArray();         //分页数据转换为数组

    //上一页 || 下一页 => path
if ($res['prev_page_url'] != null) {
  $prev_page = $page - 1;
  $res['prev_page_url'] = Paginator::resolveCurrentPath() . "?page=" . $prev_page . "&limit=" . $limit;
}
if ($res['next_page_url'] != null) {
  $next_page = $page + 1;
  $res['next_page_url'] = Paginator::resolveCurrentPath() . "?page=" . $next_page . "&limit=" . $limit;
}
    return $res;
  }

  /**
   * 验证参数是否合法
   */
  public static function validate(&$data, &$page = 1, &$limit = 10)
  {
    $page = empty($page) ? 1 : $page;
    $limit = empty($limit) ? 10 : $limit;
    if (!is_array($data) && !$data instanceof Collection) {
      return false;//"自定义分页方法只支持数组数据和集合数据";
    }
    if (!is_numeric($page) || !is_numeric($limit)) {
      return false;//"page limit 参数只支持数字";
    }
    if ($data instanceof Collection) {
      return $data = $data->toArray();
    }
    return $data;
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP如何得到当前页和上一页的地址?
Nov 27 PHP
NOT NULL 和NULL
Jan 15 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
Oct 25 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
Jun 08 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
Yii2使用自带的UploadedFile实现的文件上传
Jun 20 PHP
基于php判断客户端类型
Oct 14 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
利用PHPExcel实现Excel文件的写入和读取
Apr 26 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
PHP实现通过CURL上传文件功能示例
May 30 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 PHP
PHP批量删除jQuery操作
Jul 23 #PHP
PHP mysqli事务操作常用方法分析
Jul 22 #PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 #PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 #PHP
PHP编程快速实现数组去重的方法详解
Jul 22 #PHP
php使用ftp实现文件上传与下载功能
Jul 21 #PHP
YII2框架中excel表格导出的方法详解
Jul 21 #PHP
You might like
function.inc.php超越php
2006/12/09 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
PHP实现浏览器格式化显示XML的方法示例
2019/01/22 PHP
JavaScript高级程序设计
2006/12/29 Javascript
用ADODB.Stream转换
2007/01/22 Javascript
javascript面向对象之二 命名空间
2011/02/08 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
2017/09/22 Javascript
解析vue中的$mount
2017/12/21 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
详解jquery和vue对比
2019/04/16 jQuery
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
小程序使用wxs解决wxml保留2位小数问题
2019/12/13 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
python 监控logcat关键字功能
2020/09/04 Python
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
揭牌仪式主持词
2014/03/19 职场文书
超市中秋节促销方案
2014/03/21 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
优秀教师单行材料
2014/12/16 职场文书
安全保证书怎么写
2015/02/28 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python