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 相关文章推荐
ASP知识讲座四
Oct 09 PHP
如何在PHP程序中防止盗链
Apr 09 PHP
php 团购折扣计算公式
Nov 24 PHP
PHP面向对象法则
Feb 23 PHP
php&amp;mysql 日期操作小记
Feb 27 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
php实现的Timer页面运行时间监测类
Sep 24 PHP
PHP+MySQL之Insert Into数据插入用法分析
Sep 27 PHP
变量在 PHP7 内部的实现(一)
Dec 21 PHP
PHP编程实现计算抽奖概率算法完整实例
Aug 09 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
PHP判断当前使用的是什么浏览器(推荐)
Oct 27 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
PHP写杨辉三角实例代码
2011/07/17 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
2017/06/09 PHP
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
js随机生成一个验证码
2017/06/01 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
Node.js服务器开启Gzip压缩教程
2017/08/11 Javascript
vue.js路由跳转详解
2017/08/28 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
python和ruby,我选谁?
2017/09/13 Python
python的exec、eval使用分析
2017/12/11 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
python打开windows应用程序的实例
2019/06/28 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
Scrapy实现模拟登录的示例代码
2021/02/21 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
How TDD works
2012/09/30 面试题
个人职业生涯规划书1500字
2013/12/31 职场文书
创建服务型党组织实施方案
2014/02/25 职场文书
《颐和园》教学反思
2014/02/26 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
文明单位汇报材料
2014/12/24 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python