2023年6月21日发(作者:)

thinkphp6数组分页⼀、因为有复杂的数据统计,需要组数组,这时候使⽤tp6的分页会有问题,于是改为数组分页的⽅式,将以前tp3的分页拿过来改了⼀下,话不多说上代码,引⼊tp3分页源代码,为了和tp6的区别不会太明显,修改了源代码,放⼊tp6vendortopthinkframeworksrcthink 下:修改详情:1、样式(ul li)2、C⽅法改为 config3、U⽅法改为 url4、ACTION_NAME改为:$request = thinkfacadeRequest::instance();

$request ->action

namespace Think;class Page{ public $firstRow; // 起始⾏数 public $listRows; // 列表每页显⽰⾏数 public $parameter; // 分页跳转时要带的参数 public $totalRows; // 总⾏数 public $totalPages; // 分页总页⾯数 public $rollPage = 8;// 分页栏每页显⽰的页数 public $lastSuffix = true; // 最后⼀页是否显⽰总页数 private $p = 'page'; //分页参数名 private $url = ''; //当前链接URL private $nowPage = 1; // 分页显⽰定制 private $config = array( 'header' => '共 %TOTAL_ROW% 条记录,每页显⽰ %LIST_ROWS% 条,%NOW_PAGE% / %TOTAL_PAGE%页', 'prev' => '«', 'next' => '»', 'first' => '1...', 'last' => '...%TOTAL_PAGE%', 'theme' => '%UP_PAGE% %FIRST% %LINK_PAGE% %END% %DOWN_PAGE%', ); /** * 架构函数 * @param array $totalRows 总的记录数 * @param array $listRows 每页显⽰记录数 * @param array $parameter 分页跳转的参数 */ public function __construct($totalRows, $listRows=20, $parameter = array()) { //++++++++++ 这⾥修改 C ++++++++++++++++++ config('VAR_PAGE') && $this->p = config('VAR_PAGE'); //设置分页参数名称 /* 基础设置 */ $this->totalRows = $totalRows; //设置总记录数 $this->listRows = $listRows; //设置每页显⽰⾏数 $this->parameter = empty($parameter) ? $_GET : $parameter; $this->nowPage = empty($_GET[$this->p]) ? 1 : intval($_GET[$this->p]); $this->nowPage = $this->nowPage > 0 ? $this->nowPage : 1; $this->firstRow = $this->listRows * ($this->nowPage - 1); } /** * 定制分页链接设置 * 定制分页链接设置 * @param string $name 设置名称 * @param string $value 设置值 */ public function setConfig($name,$value) { if(isset($this->config[$name])) { $this->config[$name] = $value; } } /** * ⽣成链接URL * @param integer $page 页码 * @return string */ private function url($page){ return str_replace(urlencode('[PAGE]'), $page, $this->url); } /** * 组装分页链接 * @return string */ public function show() { if(0 == $this->totalRows) return '';

/* ⽣成URL */ $this->parameter[$this->p] = '[PAGE]'; //++++++++++ 这⾥修改 U 和 ACTION_NAME ++++++++++++++++++ $request = thinkfacadeRequest::instance();

$this->url = url($request->action(), $this->parameter); /* 计算分页信息 */ $this->totalPages = ceil($this->totalRows / $this->listRows); //总页数 if(!empty($this->totalPages) && $this->nowPage > $this->totalPages) { $this->nowPage = $this->totalPages; } /* 计算分页临时变量 */ $now_cool_page = $this->rollPage/2; $now_cool_page_ceil = ceil($now_cool_page); $this->lastSuffix && $this->config['last'] = $this->totalPages; //上⼀页 $up_row = $this->nowPage - 1; $up_page = $up_row > 0 ? '

  • ' : '
  • ' . $this->config[ //下⼀页 $down_row = $this->nowPage + 1; $down_page = ($down_row <= $this->totalPages) ? '
  • ' : '
  • totalPages > $this->rollPage && ($this->nowPage - $now_cool_page) >= 1){ //$the_first = '
  • ' . $this->config['first'] . '
  • '; //++++++++++ 这⾥修改 样式 ++++++++++++++++++ $the_first = '
  • 1
  • 2
  • ...
  • '; } //最后⼀页 $the_end = ''; if($this->totalPages > $this->rollPage && ($this->nowPage + $now_cool_page) < $this->totalPages){ $znum = $this->totalPages - 1; //倒数第⼆页 //$the_end = '
  • ' . $this->config['last'] . '
  • '; //++++++++++ 这⾥修改 样式 ++++++++++++++++++ } $the_end = '
  • ...
  • ' . $znum . '
  • rollPage; $i++){ if(($this->nowPage - $now_cool_page) <= 0 ){ $page = $i; }elseif(($this->nowPage + $now_cool_page - 1) >= $this->totalPages){ $page = $this->totalPages - $this->rollPage + $i; }else{ $page = $this->nowPage - $now_cool_page_ceil + $i; } if($page > 0 && $page != $this->nowPage){ if($page <= $this->totalPages){ $link_page .= '
  • ' . $page . '
  • '; }else{ break; } }else{ if($page > 0 && $this->totalPages != 1){ $link_page .= '
  • ' . $page . '
  • '; } } }

    //替换分页内容 //++++++++++ 这⾥修改 样式 ++++++++++++++++++

    return "

      {$page_str}
    "; } $page_str = str_replace(['%HEADER%','%NOW_PAGE%', '%UP_PAGE%', '%DOWN_PAGE%', '%FIRST%', '%LINK_PAGE%', '%END%', '%TOTAL_ROW%',

    ⼆、具体使⽤//头部记得引⼊use thinkPage;//数组分页//传⼊分页值$p = empty($_GET['page']) ? 1 : $_GET['page'];//每页显⽰条数$num = empty(Request::param('num')) ? $this->num : Request::param('num');//当前获取的数据 我这⾥的数据数组是 $info 是⼀个⼆位数组$count = count($info);//总数据条数 每页数据条数 需要带的参数(⽐如查询的值)$page = new Page($count,$num,['num'=>$num,'startTime'=>'','endTime'=>'','province'=>$province]);//10为每页显⽰的条数,$page为传过来的页码$info = array_slice($info,($p-1)*$num,$num); //重组数组 / ($page-1)*$num 计算每页的数据从第⼏条开始return view('totalData',[ 'p' => $p, //显⽰第⼏页 'num' => $num, 'page' => ($count < $num) ? '' : $page->show(), // 获取分页显⽰注意判断当前数据是否够分页 'pageshow' => pageShow($count,$num,$p), //总记录数,每页显⽰条数 'info' => $info]);//前端模板输出/* {$page|raw} */

    2023年6月21日发(作者:)

    thinkphp6数组分页⼀、因为有复杂的数据统计,需要组数组,这时候使⽤tp6的分页会有问题,于是改为数组分页的⽅式,将以前tp3的分页拿过来改了⼀下,话不多说上代码,引⼊tp3分页源代码,为了和tp6的区别不会太明显,修改了源代码,放⼊tp6vendortopthinkframeworksrcthink 下:修改详情:1、样式(ul li)2、C⽅法改为 config3、U⽅法改为 url4、ACTION_NAME改为:$request = thinkfacadeRequest::instance();

    $request ->action

    namespace Think;class Page{ public $firstRow; // 起始⾏数 public $listRows; // 列表每页显⽰⾏数 public $parameter; // 分页跳转时要带的参数 public $totalRows; // 总⾏数 public $totalPages; // 分页总页⾯数 public $rollPage = 8;// 分页栏每页显⽰的页数 public $lastSuffix = true; // 最后⼀页是否显⽰总页数 private $p = 'page'; //分页参数名 private $url = ''; //当前链接URL private $nowPage = 1; // 分页显⽰定制 private $config = array( 'header' => '共 %TOTAL_ROW% 条记录,每页显⽰ %LIST_ROWS% 条,%NOW_PAGE% / %TOTAL_PAGE%页', 'prev' => '«', 'next' => '»', 'first' => '1...', 'last' => '...%TOTAL_PAGE%', 'theme' => '%UP_PAGE% %FIRST% %LINK_PAGE% %END% %DOWN_PAGE%', ); /** * 架构函数 * @param array $totalRows 总的记录数 * @param array $listRows 每页显⽰记录数 * @param array $parameter 分页跳转的参数 */ public function __construct($totalRows, $listRows=20, $parameter = array()) { //++++++++++ 这⾥修改 C ++++++++++++++++++ config('VAR_PAGE') && $this->p = config('VAR_PAGE'); //设置分页参数名称 /* 基础设置 */ $this->totalRows = $totalRows; //设置总记录数 $this->listRows = $listRows; //设置每页显⽰⾏数 $this->parameter = empty($parameter) ? $_GET : $parameter; $this->nowPage = empty($_GET[$this->p]) ? 1 : intval($_GET[$this->p]); $this->nowPage = $this->nowPage > 0 ? $this->nowPage : 1; $this->firstRow = $this->listRows * ($this->nowPage - 1); } /** * 定制分页链接设置 * 定制分页链接设置 * @param string $name 设置名称 * @param string $value 设置值 */ public function setConfig($name,$value) { if(isset($this->config[$name])) { $this->config[$name] = $value; } } /** * ⽣成链接URL * @param integer $page 页码 * @return string */ private function url($page){ return str_replace(urlencode('[PAGE]'), $page, $this->url); } /** * 组装分页链接 * @return string */ public function show() { if(0 == $this->totalRows) return '';

    /* ⽣成URL */ $this->parameter[$this->p] = '[PAGE]'; //++++++++++ 这⾥修改 U 和 ACTION_NAME ++++++++++++++++++ $request = thinkfacadeRequest::instance();

    $this->url = url($request->action(), $this->parameter); /* 计算分页信息 */ $this->totalPages = ceil($this->totalRows / $this->listRows); //总页数 if(!empty($this->totalPages) && $this->nowPage > $this->totalPages) { $this->nowPage = $this->totalPages; } /* 计算分页临时变量 */ $now_cool_page = $this->rollPage/2; $now_cool_page_ceil = ceil($now_cool_page); $this->lastSuffix && $this->config['last'] = $this->totalPages; //上⼀页 $up_row = $this->nowPage - 1; $up_page = $up_row > 0 ? '

  • ' : '
  • ' . $this->config[ //下⼀页 $down_row = $this->nowPage + 1; $down_page = ($down_row <= $this->totalPages) ? '
  • ' : '
  • totalPages > $this->rollPage && ($this->nowPage - $now_cool_page) >= 1){ //$the_first = '
  • ' . $this->config['first'] . '
  • '; //++++++++++ 这⾥修改 样式 ++++++++++++++++++ $the_first = '
  • 1
  • 2
  • ...
  • '; } //最后⼀页 $the_end = ''; if($this->totalPages > $this->rollPage && ($this->nowPage + $now_cool_page) < $this->totalPages){ $znum = $this->totalPages - 1; //倒数第⼆页 //$the_end = '
  • ' . $this->config['last'] . '
  • '; //++++++++++ 这⾥修改 样式 ++++++++++++++++++ } $the_end = '
  • ...
  • ' . $znum . '
  • rollPage; $i++){ if(($this->nowPage - $now_cool_page) <= 0 ){ $page = $i; }elseif(($this->nowPage + $now_cool_page - 1) >= $this->totalPages){ $page = $this->totalPages - $this->rollPage + $i; }else{ $page = $this->nowPage - $now_cool_page_ceil + $i; } if($page > 0 && $page != $this->nowPage){ if($page <= $this->totalPages){ $link_page .= '
  • ' . $page . '
  • '; }else{ break; } }else{ if($page > 0 && $this->totalPages != 1){ $link_page .= '
  • ' . $page . '
  • '; } } }

    //替换分页内容 //++++++++++ 这⾥修改 样式 ++++++++++++++++++

    return "

      {$page_str}
    "; } $page_str = str_replace(['%HEADER%','%NOW_PAGE%', '%UP_PAGE%', '%DOWN_PAGE%', '%FIRST%', '%LINK_PAGE%', '%END%', '%TOTAL_ROW%',

    ⼆、具体使⽤//头部记得引⼊use thinkPage;//数组分页//传⼊分页值$p = empty($_GET['page']) ? 1 : $_GET['page'];//每页显⽰条数$num = empty(Request::param('num')) ? $this->num : Request::param('num');//当前获取的数据 我这⾥的数据数组是 $info 是⼀个⼆位数组$count = count($info);//总数据条数 每页数据条数 需要带的参数(⽐如查询的值)$page = new Page($count,$num,['num'=>$num,'startTime'=>'','endTime'=>'','province'=>$province]);//10为每页显⽰的条数,$page为传过来的页码$info = array_slice($info,($p-1)*$num,$num); //重组数组 / ($page-1)*$num 计算每页的数据从第⼏条开始return view('totalData',[ 'p' => $p, //显⽰第⼏页 'num' => $num, 'page' => ($count < $num) ? '' : $page->show(), // 获取分页显⽰注意判断当前数据是否够分页 'pageshow' => pageShow($count,$num,$p), //总记录数,每页显⽰条数 'info' => $info]);//前端模板输出/* {$page|raw} */