Page.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <?php
  2. /**
  3. * FecShop file.
  4. *
  5. * @link http://www.fecshop.com/
  6. * @copyright Copyright (c) 2016 FecShop Software LLC
  7. * @license http://www.fecshop.com/license/
  8. */
  9. namespace fecshop\app\apphtml5\widgets;
  10. use Yii;
  11. /**
  12. * @author Terry Zhao <2358269014@qq.com>
  13. * @since 1.0
  14. */
  15. class Page
  16. {
  17. public $pageNum;
  18. public $numPerPage;
  19. public $countTotal;
  20. public $page;
  21. public function getLastData()
  22. {
  23. $spaceShowNum = 4;
  24. $productNumPerPage = $this->numPerPage;
  25. $countTotal = $this->countTotal;
  26. $pageNum = $this->pageNum;
  27. $maxPageNum = ceil($countTotal / $productNumPerPage);
  28. if ($pageNum > $maxPageNum) {
  29. $pageNum = $maxPageNum;
  30. }
  31. $firstSpaceShow = false;
  32. $lastSpaceShow = false;
  33. $frontPage = [];
  34. $behindPage = [];
  35. $endSpaceNum = $maxPageNum - $spaceShowNum + 1;
  36. $hiddenPageMaxCount = 2 * $spaceShowNum + 1;
  37. $hiddenFrontStr = '';
  38. $hiddenBehindStr = '';
  39. if ($maxPageNum <= $hiddenPageMaxCount) {
  40. $c = $pageNum;
  41. while ($c > 1) {
  42. $c = $c - 1;
  43. if ($c) {
  44. $frontPage = array_merge([$c], $frontPage);
  45. }
  46. }
  47. $c = $pageNum;
  48. while ($c < $maxPageNum) {
  49. $c = $c + 1;
  50. $behindPage[] = $c;
  51. }
  52. //var_dump($behindPage);
  53. } elseif (($pageNum > $spaceShowNum) && ($pageNum < $endSpaceNum)) {
  54. $firstSpaceShow = true;
  55. $lastSpaceShow = true;
  56. $hiddenFrontStr = '<span>...</span>';
  57. $hiddenBehindStr = '<span>...</span>';
  58. $frontPage[] = $pageNum - 1;
  59. $behindPage[] = $pageNum + 1;
  60. $behindPage[] = $pageNum + 2;
  61. } elseif ($pageNum == 1) {
  62. $firstSpaceShow = false;
  63. $lastSpaceShow = true;
  64. $hiddenBehindStr = '<span>...</span>';
  65. $behindPage[] = $pageNum + 1;
  66. $behindPage[] = $pageNum + 2;
  67. $behindPage[] = $pageNum + 3;
  68. $behindPage[] = $pageNum + 4;
  69. } elseif ($pageNum == 2) {
  70. $firstSpaceShow = false;
  71. $lastSpaceShow = true;
  72. $hiddenBehindStr = '<span>...</span>';
  73. $frontPage[] = $pageNum - 1;
  74. $behindPage[] = $pageNum + 1;
  75. $behindPage[] = $pageNum + 2;
  76. $behindPage[] = $pageNum + 3;
  77. } elseif ($pageNum == 3) {
  78. $firstSpaceShow = false;
  79. $lastSpaceShow = true;
  80. $hiddenBehindStr = '<span>...</span>';
  81. $frontPage[] = $pageNum - 2;
  82. $frontPage[] = $pageNum - 1;
  83. $behindPage[] = $pageNum + 1;
  84. $behindPage[] = $pageNum + 2;
  85. } elseif ($pageNum == 4) {
  86. $firstSpaceShow = false;
  87. $lastSpaceShow = true;
  88. $hiddenBehindStr = '<span>...</span>';
  89. $frontPage[] = $pageNum - 3;
  90. $frontPage[] = $pageNum - 2;
  91. $frontPage[] = $pageNum - 1;
  92. $behindPage[] = $pageNum + 1;
  93. $behindPage[] = $pageNum + 2;
  94. } elseif ($pageNum == $endSpaceNum) {
  95. $firstSpaceShow = true;
  96. $lastSpaceShow = false;
  97. $hiddenFrontStr = '<span>...</span>';
  98. $frontPage[] = $pageNum - 1;
  99. $behindPage[] = $pageNum + 1;
  100. $behindPage[] = $pageNum + 2;
  101. $behindPage[] = $pageNum + 3;
  102. } elseif ($pageNum == ($endSpaceNum + 1)) {
  103. $firstSpaceShow = true;
  104. $lastSpaceShow = false;
  105. $hiddenFrontStr = '<span>...</span>';
  106. $frontPage[] = $pageNum - 2;
  107. $frontPage[] = $pageNum - 1;
  108. $behindPage[] = $pageNum + 1;
  109. $behindPage[] = $pageNum + 2;
  110. } elseif ($pageNum == ($endSpaceNum + 2)) {
  111. $firstSpaceShow = true;
  112. $lastSpaceShow = false;
  113. $hiddenFrontStr = '<span>...</span>';
  114. $frontPage[] = $pageNum - 3;
  115. $frontPage[] = $pageNum - 2;
  116. $frontPage[] = $pageNum - 1;
  117. $behindPage[] = $pageNum + 1;
  118. } elseif ($pageNum == ($endSpaceNum + 3)) {
  119. $firstSpaceShow = true;
  120. $lastSpaceShow = false;
  121. $hiddenFrontStr = '<span>...</span>';
  122. $frontPage[] = $pageNum - 4;
  123. $frontPage[] = $pageNum - 3;
  124. $frontPage[] = $pageNum - 2;
  125. $frontPage[] = $pageNum - 1;
  126. }
  127. //Yii::$service->url->category->getFilterChooseAttrUrl($this->page,$val);
  128. if ($firstSpaceShow) {
  129. $url = $this->getPageUrl($pageNum, 1);
  130. //Yii::$service->url->category->getFilterChooseAttrUrl($this->page,1);
  131. $firstSpaceShow = [
  132. 'p' => 1,
  133. 'url' => $url,
  134. ];
  135. }
  136. if ($lastSpaceShow) {
  137. $url = $this->getPageUrl($pageNum, $maxPageNum);
  138. //Yii::$service->url->category->getFilterChooseAttrUrl($this->page,$maxPageNum);
  139. $lastSpaceShow = [
  140. 'p' => $maxPageNum,
  141. 'url' => $url,
  142. ];
  143. }
  144. $frontPageU = [];
  145. //var_dump($frontPage);
  146. if (is_array($frontPage) && !empty($frontPage)) {
  147. foreach ($frontPage as $p) {
  148. $frontPageU[] = [
  149. 'p' => $p,
  150. 'url' => $this->getPageUrl($pageNum, $p),
  151. //Yii::$service->url->category->getFilterChooseAttrUrl($this->page,$p),
  152. ];
  153. }
  154. }
  155. $behindPageU = [];
  156. //var_dump($behindPage);
  157. if (is_array($behindPage) && !empty($behindPage)) {
  158. foreach ($behindPage as $p) {
  159. $behindPageU[] = [
  160. 'p' => $p,
  161. 'url' => $this->getPageUrl($pageNum, $p),
  162. //Yii::$service->url->category->getFilterChooseAttrUrl($this->page,$p),
  163. ];
  164. }
  165. }
  166. $prevPage = '';
  167. $nextPage = '';
  168. if ($pageNum > 1) {
  169. $prevPage = $pageNum - 1;
  170. $prevPage = [
  171. 'p' => $prevPage,
  172. 'url' => $this->getPageUrl($pageNum, $prevPage),
  173. //Yii::$service->url->category->getFilterChooseAttrUrl($this->page,$prevPage),
  174. ];
  175. }
  176. if ($pageNum != $maxPageNum) {
  177. $nextPage = $pageNum + 1;
  178. $nextPage = [
  179. 'p' => $nextPage,
  180. 'url' => $this->getPageUrl($pageNum, $nextPage),
  181. //Yii::$service->url->category->getFilterChooseAttrUrl($this->page,$nextPage),
  182. ];
  183. }
  184. $currentPage = [
  185. 'p' => $pageNum,
  186. ];
  187. //var_dump($frontPageU);
  188. return [
  189. 'firstSpaceShow'=> $firstSpaceShow,
  190. 'lastSpaceShow' => $lastSpaceShow,
  191. 'frontPage' => $frontPageU,
  192. 'behindPage' => $behindPageU,
  193. 'currentPage' => $currentPage,
  194. //'maxPageNum' => $maxPageNum,
  195. 'prevPage' => $prevPage,
  196. 'nextPage' => $nextPage,
  197. 'hiddenFrontStr'=> $hiddenFrontStr,
  198. 'hiddenBehindStr'=>$hiddenBehindStr,
  199. ];
  200. }
  201. public function getPageUrl($currentPage, $showPage)
  202. {
  203. $currentUrl = Yii::$service->url->getCurrentUrl();
  204. $pVal = Yii::$app->request->get('p');
  205. if ($pVal) {
  206. $currentPageStr = 'p='.$pVal;
  207. $showPageStr = 'p='.$showPage;
  208. $url = str_replace($currentPageStr, $showPageStr, $currentUrl);
  209. } else {
  210. if (strstr($currentUrl, '?')) {
  211. $url = $currentUrl.'&p='.$showPage;
  212. } else {
  213. $url = $currentUrl.'?p='.$showPage;
  214. }
  215. }
  216. return [
  217. 'url' => $url,
  218. ];
  219. }
  220. }