pager.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. /**
  3. * 使用get方法请求页面,因为用Yii::$app->request->getQueryParams()获取页面的参数
  4. *
  5. * 一定要传进来的变量
  6. * @var int $pageCount 总共多少页
  7. */
  8. if (empty($baseUrl)) {
  9. $baseUrl = '/' . Yii::$app->request->getPathInfo();
  10. }
  11. $queryParams = Yii::$app->request->getQueryParams();
  12. $pageSize = isset($queryParams['pageSize']) && is_numeric($queryParams['pageSize']) ? intval($queryParams['pageSize']) : 20;
  13. $pageNumber = isset($queryParams['pageNumber']) && is_numeric($queryParams['pageNumber']) ? intval($queryParams['pageNumber']) : 1;
  14. // 首页
  15. $queryParams['pageNumber'] = 1;
  16. $firstPageUrl = $baseUrl . '?' . http_build_query($queryParams);
  17. // 上一页
  18. $queryParams['pageNumber'] = $pageNumber > 1 ? $pageNumber - 1 : 1;
  19. $prevPageUrl = $baseUrl . '?' . http_build_query($queryParams);
  20. // 下一页
  21. $queryParams['pageNumber'] = $pageNumber < $pageCount ? $pageNumber + 1 : $pageCount;
  22. $nextPageUrl = $baseUrl . '?' . http_build_query($queryParams);
  23. // 末页
  24. $queryParams['pageNumber'] = $pageCount;
  25. $lastPageurl = $baseUrl . '?' . http_build_query($queryParams);
  26. // 所有的页码
  27. $pageItem = [];
  28. for ($i = 1; $i <= $pageCount; $i++) {
  29. $queryParams['pageNumber'] = $i;
  30. $pageItem[$i] = $baseUrl . '?' . http_build_query($queryParams);
  31. }
  32. // 当前页码前后的省略号,比如总共11页,现在是第5页,前后显示2页,那么应该是... 3 4 5 6 7 ...这样的形式,避免在页数过多时把所有页码都显示出来
  33. $beforeCurrentPageEllipsis = false;
  34. $afterCurrentPageEllipsis = false;
  35. // 当前页码前后显示的页数
  36. $beforeAndAfterPageNum = 2;
  37. ?>
  38. <?php if ($pageCount > 1) : ?>
  39. <div class="pagination fn-right">
  40. <ul>
  41. <?php if ($pageNumber > 1) : ?>
  42. <li><a href="<?= $firstPageUrl ?>">首页</a></li>
  43. <?php else : ?>
  44. <li><a href="javascript:;">首页</a></li>
  45. <?php endif; ?>
  46. <?php if ($pageNumber > 1) : ?>
  47. <li><a href="<?= $prevPageUrl ?>">&laquo; 上一页</a></li>
  48. <?php else : ?>
  49. <li><a href="javascript:;">&laquo; 上一页</a></li>
  50. <?php endif; ?>
  51. <?php foreach ($pageItem as $k => $v) : ?>
  52. <?php if ($pageNumber - $k > $beforeAndAfterPageNum) : ?>
  53. <?php if (!$beforeCurrentPageEllipsis) : ?>
  54. <li class="active"><a href="javascript:;">...</a></li>
  55. <?php $beforeCurrentPageEllipsis = true; endif; ?>
  56. <?php elseif ($k - $pageNumber > $beforeAndAfterPageNum) : ?>
  57. <?php if (!$afterCurrentPageEllipsis) : ?>
  58. <li class="active"><a href="javascript:;">....</a></li>
  59. <?php $afterCurrentPageEllipsis = true; endif; ?>
  60. <?php $afterCurrentPageEllipsis = true; ?>
  61. <?php else : ?>
  62. <?php if ($k != $pageNumber) : ?>
  63. <li><a href="<?= $v ?>"><?= $k ?></a></li>
  64. <?php else : ?>
  65. <li class="active"><a href="javascript:;"><?= $k ?></a></li>
  66. <?php endif; ?>
  67. <?php endif; ?>
  68. <?php endforeach; ?>
  69. <?php if ($pageNumber < $pageCount) : ?>
  70. <li><a href="<?= $nextPageUrl ?>">下一页 &raquo;</a></li>
  71. <?php else : ?>
  72. <li><a href="javascript:;"> 下一页 &raquo; </a></li>
  73. <?php endif; ?>
  74. <?php if ($pageNumber < $pageCount) : ?>
  75. <li><a href="<?= $lastPageurl ?>">末页</a></li>
  76. <?php else : ?>
  77. <li><a href="javascript:;"> 末页</a></li>
  78. <?php endif; ?>
  79. </ul>
  80. </div>
  81. <?php endif; ?>