* @since 1.0
*/
class Page
{
public $pageNum;
public $numPerPage;
public $countTotal;
public $page;
public function getLastData()
{
$spaceShowNum = 4;
$productNumPerPage = $this->numPerPage;
$countTotal = $this->countTotal;
$pageNum = $this->pageNum;
$maxPageNum = ceil($countTotal / $productNumPerPage);
if ($pageNum > $maxPageNum) {
$pageNum = $maxPageNum;
}
$firstSpaceShow = false;
$lastSpaceShow = false;
$frontPage = [];
$behindPage = [];
$endSpaceNum = $maxPageNum - $spaceShowNum + 1;
$hiddenPageMaxCount = 2 * $spaceShowNum + 1;
$hiddenFrontStr = '';
$hiddenBehindStr = '';
if ($maxPageNum <= $hiddenPageMaxCount) {
$c = $pageNum;
while ($c > 1) {
$c = $c - 1;
if ($c) {
$frontPage = array_merge([$c], $frontPage);
}
}
$c = $pageNum;
while ($c < $maxPageNum) {
$c = $c + 1;
$behindPage[] = $c;
}
//var_dump($behindPage);
} elseif (($pageNum > $spaceShowNum) && ($pageNum < $endSpaceNum)) {
$firstSpaceShow = true;
$lastSpaceShow = true;
$hiddenFrontStr = '...';
$hiddenBehindStr = '...';
$frontPage[] = $pageNum - 1;
$behindPage[] = $pageNum + 1;
$behindPage[] = $pageNum + 2;
} elseif ($pageNum == 1) {
$firstSpaceShow = false;
$lastSpaceShow = true;
$hiddenBehindStr = '...';
$behindPage[] = $pageNum + 1;
$behindPage[] = $pageNum + 2;
$behindPage[] = $pageNum + 3;
$behindPage[] = $pageNum + 4;
} elseif ($pageNum == 2) {
$firstSpaceShow = false;
$lastSpaceShow = true;
$hiddenBehindStr = '...';
$frontPage[] = $pageNum - 1;
$behindPage[] = $pageNum + 1;
$behindPage[] = $pageNum + 2;
$behindPage[] = $pageNum + 3;
} elseif ($pageNum == 3) {
$firstSpaceShow = false;
$lastSpaceShow = true;
$hiddenBehindStr = '...';
$frontPage[] = $pageNum - 2;
$frontPage[] = $pageNum - 1;
$behindPage[] = $pageNum + 1;
$behindPage[] = $pageNum + 2;
} elseif ($pageNum == 4) {
$firstSpaceShow = false;
$lastSpaceShow = true;
$hiddenBehindStr = '...';
$frontPage[] = $pageNum - 3;
$frontPage[] = $pageNum - 2;
$frontPage[] = $pageNum - 1;
$behindPage[] = $pageNum + 1;
$behindPage[] = $pageNum + 2;
} elseif ($pageNum == $endSpaceNum) {
$firstSpaceShow = true;
$lastSpaceShow = false;
$hiddenFrontStr = '...';
$frontPage[] = $pageNum - 1;
$behindPage[] = $pageNum + 1;
$behindPage[] = $pageNum + 2;
$behindPage[] = $pageNum + 3;
} elseif ($pageNum == ($endSpaceNum + 1)) {
$firstSpaceShow = true;
$lastSpaceShow = false;
$hiddenFrontStr = '...';
$frontPage[] = $pageNum - 2;
$frontPage[] = $pageNum - 1;
$behindPage[] = $pageNum + 1;
$behindPage[] = $pageNum + 2;
} elseif ($pageNum == ($endSpaceNum + 2)) {
$firstSpaceShow = true;
$lastSpaceShow = false;
$hiddenFrontStr = '...';
$frontPage[] = $pageNum - 3;
$frontPage[] = $pageNum - 2;
$frontPage[] = $pageNum - 1;
$behindPage[] = $pageNum + 1;
} elseif ($pageNum == ($endSpaceNum + 3)) {
$firstSpaceShow = true;
$lastSpaceShow = false;
$hiddenFrontStr = '...';
$frontPage[] = $pageNum - 4;
$frontPage[] = $pageNum - 3;
$frontPage[] = $pageNum - 2;
$frontPage[] = $pageNum - 1;
}
//Yii::$service->url->category->getFilterChooseAttrUrl($this->page,$val);
if ($firstSpaceShow) {
$url = $this->getPageUrl($pageNum, 1);
//Yii::$service->url->category->getFilterChooseAttrUrl($this->page,1);
$firstSpaceShow = [
'p' => 1,
'url' => $url,
];
}
if ($lastSpaceShow) {
$url = $this->getPageUrl($pageNum, $maxPageNum);
//Yii::$service->url->category->getFilterChooseAttrUrl($this->page,$maxPageNum);
$lastSpaceShow = [
'p' => $maxPageNum,
'url' => $url,
];
}
$frontPageU = [];
//var_dump($frontPage);
if (is_array($frontPage) && !empty($frontPage)) {
foreach ($frontPage as $p) {
$frontPageU[] = [
'p' => $p,
'url' => $this->getPageUrl($pageNum, $p),
//Yii::$service->url->category->getFilterChooseAttrUrl($this->page,$p),
];
}
}
$behindPageU = [];
//var_dump($behindPage);
if (is_array($behindPage) && !empty($behindPage)) {
foreach ($behindPage as $p) {
$behindPageU[] = [
'p' => $p,
'url' => $this->getPageUrl($pageNum, $p),
//Yii::$service->url->category->getFilterChooseAttrUrl($this->page,$p),
];
}
}
$prevPage = '';
$nextPage = '';
if ($pageNum > 1) {
$prevPage = $pageNum - 1;
$prevPage = [
'p' => $prevPage,
'url' => $this->getPageUrl($pageNum, $prevPage),
//Yii::$service->url->category->getFilterChooseAttrUrl($this->page,$prevPage),
];
}
if ($pageNum != $maxPageNum) {
$nextPage = $pageNum + 1;
$nextPage = [
'p' => $nextPage,
'url' => $this->getPageUrl($pageNum, $nextPage),
//Yii::$service->url->category->getFilterChooseAttrUrl($this->page,$nextPage),
];
}
$currentPage = [
'p' => $pageNum,
];
//var_dump($frontPageU);
return [
'firstSpaceShow'=> $firstSpaceShow,
'lastSpaceShow' => $lastSpaceShow,
'frontPage' => $frontPageU,
'behindPage' => $behindPageU,
'currentPage' => $currentPage,
//'maxPageNum' => $maxPageNum,
'prevPage' => $prevPage,
'nextPage' => $nextPage,
'hiddenFrontStr'=> $hiddenFrontStr,
'hiddenBehindStr'=>$hiddenBehindStr,
];
}
public function getPageUrl($currentPage, $showPage)
{
$currentUrl = Yii::$service->url->getCurrentUrl();
$pVal = Yii::$app->request->get('p');
if ($pVal) {
$currentPageStr = 'p='.$pVal;
$showPageStr = 'p='.$showPage;
$url = str_replace($currentPageStr, $showPageStr, $currentUrl);
} else {
if (strstr($currentUrl, '?')) {
$url = $currentUrl.'&p='.$showPage;
} else {
$url = $currentUrl.'?p='.$showPage;
}
}
return [
'url' => $url,
];
}
}