php - 停留在显示 PHP 分页器上

标签 php pagination

我正在尝试创建一个分页器。我创建了一个分页器类,其属性如下所示。但现在我正在尝试显示分页器,但我完全陷入了不同的循环(也许我应该去 sleep :P)之类的东西。

重要的属性是:

windows_size // the amount of pages visible
num_pages // the total number of pages
current_page // the currently selected page

我有以下对象:

o: (Paginator)
 ->item_count  : 295
   page_size   : 50
   window_size : 5
   num_pages   : 10
   current_page: 1
   first_index : 50

我想显示:

[1] 2 3 4 5 ...

或者我有:

o: (Paginator)
 ->item_count  : 295
   page_size   : 50
   window_size : 5
   num_pages   : 10
   current_page: 5
   first_index : 50

... 3 4 [5] 6 7...

或者我有:

o: (Paginator)
 ->item_count  : 295
   page_size   : 50
   window_size : 5
   num_pages   : 10
   current_page: 9
   first_index : 50

... 6 7 8 [9] 10

如何显示它?

最终结果(非常感谢:Wh1T3h4Ck5!)

http://pastebin.com/2KzL1Tn6

最佳答案

通常,这是非常简单的代码。

你可以使用这样的东西。

function myPaginator($total_items, $items_per_page, $visible_pages_pad, $active_page) {
  $res = '';
  if ($items_per_page > 0 && $active_page > 0 && $visible_pages_pad) {
  $max_page = floor($total_items/$items_per_page);
  if ($total_items % $items_per_page > 0) $max_page++;
    if ($active_page <= $max_page) {
      $visible_pages = $visible_pages_pad * 2 + 1;
      if ($max_page <= $visible_pages) {
        $minp = 1; 
        $maxp = $max_page;
        }
      else {
        $minp = $active_page - $visible_pages_pad;
        if ($minp < 1) $minp = 1;
        $maxp = $minp + $visible_pages - 1;
        if ($maxp > $max_page) {
          $maxp = $max_page;
          $minp = $maxp - $visible_pages + 1;
          }
        } 
      for ($i = $minp; $i <= $maxp; $i++) {
        $page = $i == $active_page ? "[$i]" : $i; // create links here
        $res .= "$page ";
        }
      $res = trim($res);
      if ($minp > 1) $res = '... ' . $res; // left dots
      if ($maxp < $max_page) $res .= ' ...'; // right dots
      }
    }
  return $res == '' ? false : $res;
  }


参数:

  • $total_items - 列表中的项目总数
  • $items_per_page - 您想要在页面上显示的菜单项的方式
  • $visible_pages_pad - 左/右填充(该值 * 2 + 1 = 分页器项目数)
  • $active_page - 分页器中选定的页面


结果:

Function myPaginator() returns false if something is wrong, otherwise returns string.


限制:

  • 所有参数均应为整数
  • $items_per_page > 0
  • $visible_pages_pad > 0
  • 1 <= $active_page <= {总页数}


用法:

$total_items = 250;      // total items
$items_per_page = 20;    // 250/20 = 13 pages
$visible_pages_pad = 2;  // 5 pages visible in paginator (2*2+1)

$active_page = 1;  
echo myPaginator($total_items,$items_per_page,$visible_pages_pad,$active_page);
// output: [1] 2 3 4 5 ...

$active_page = 2;    
echo myPaginator($total_items,$items_per_page,$visible_pages_pad,$active_page);
// output: 1 [2] 3 4 5 ...

$active_page = 3;    
echo myPaginator($total_items,$items_per_page,$visible_pages_pad,$active_page);
// output: 1 2 [3] 4 5 ...

$active_page = 6;      
echo myPaginator($total_items,$items_per_page,$visible_pages_pad,$active_page);
// output: ... 4 5 [6] 7 8 ...

$active_page = 11;  
echo myPaginator($total_items,$items_per_page,$visible_pages_pad,$active_page);
// output: ... 9 10 [11] 12 13

$active_page = 12;        
echo myPaginator($total_items,$items_per_page,$visible_pages_pad,$active_page);
// output: ... 9 10 11 [12] 13

$active_page = 13;      
echo myPaginator($total_items,$items_per_page,$visible_pages_pad,$active_page);
// output: ... 9 10 11 12 [13]

注意:$visible_pages_pad 是分页器中事件页码左侧/右侧的页数。

希望这有帮助...

关于php - 停留在显示 PHP 分页器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5683655/

相关文章:

php - 字典搜索词 - 在 PHP 和 MySQL 中的最佳性能

javascript - 导航元素之间的 Bootstrap 分页

php - AJAX 调用后 session 变量未更新

angular - 如何在 Angular(6) 和 firebase Firestore 设置中分页回到之前的页面

symfony - 如何在 Symfony2 中使用 Twig 制作 3 列表格

PHP父函数无法看到子类成员

php - 在 Homestead 中运行 Vagrant 的问题

php - 将 PHP 和 MySQL 创建的 CSV 保存到服务器

php - Mysql查询在最近的行上连接表

python - Django 如何对字典列表进行分页