【问题标题】:Break up PHP Pagination links分解 PHP 分页链接
【发布时间】:2013-01-08 00:44:09
【问题描述】:

我有以下方法在 PHP 中为我的分页链接创建和返回标记。

public function getPaginationLinks($options) {
    if($options['total_pages'] > 1) {
        $markup = '<div class="pagination">';

        if($options['page'] > 1) {
            $markup .= '<a href="?page=' . ($options['page'] - 1) . ((isset($options['order_by'])) ? "&sort=" . $options['order_by'] : "") . '">< prev</a>';
        }       

        for($i = 1; $i <= $options['total_pages']; $i++) {

            if($options['page'] != $i) {
                $markup .= '<a href="?page='. $i . ((isset($options['order_by'])) ? "&sort=" . $options['order_by'] : "") . '">' . $i . '</a>';
            }
            else {
                $markup .= '<span class="current">' . $i . '</span>';
            }
        }

        if($options['page'] < $options['total_pages']) {
            $markup .= '<a href="?page=' . ($options['page'] + 1) . ((isset($options['order_by'])) ? "&sort=" . $options['order_by'] : "") . '">next ></a>';
        }

        $markup .= '</div>';

        return $markup;
    }
    else {
        return false;
    }
}

我最近才发现(令我惊讶的是)我已经达到了 70 多个页面,这意味着现在有 70 多个链接显示在底部..

我想知道是否有人可以帮我解决这个问题。我不确定大多数分页是如何工作的

【问题讨论】:

    标签: php pagination


    【解决方案1】:

    您只需显示当前页面以及上一个和下一个x(比如 4 个)页面。

    如果您在第 1 页:

    1 2 3 4 5
    

    第 35 页:

    31 32 33 34 35 36 37 38 39
    

    第 70 页:

    66 67 68 69 70
    

    例如,您还可以使用«» 添加指向第一页和最后一页的快速链接。


    示例:

    $x = 4;
    
    for ($i = $currentPage - $x; $i < $currentPage; $i++)
    {
        if ($i >= 1) { /* show link */}
        else { /* show ellipsis and fix counter */ $i = 1; }
    }
    
    /* show current page number without link */
    
    for ($i = $currentPage + 1; $i < $currentPage + $x; $i++)
    {
        if ($i <= $totalPages) { /* show link */}
        else { /* show ellipsis and break */ break; }
    }
    

    您还可以实现Infinite History / Pagination,这非常酷。 =)


    更新:更多elegant version of this @ Codepad

    【讨论】:

      【解决方案2】:

      你可以这样做(第 15 页)

      [View Previous] 12 13 14 [15] 15 17 18 [View More]
      

      [查看更多]链接获取其余(或更多)页面链接的位置。这样可以在允许用户浏览所有页面的同时保持事物整洁。

      示例(点击查看上一个后)

      1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 15 17 18 [View More]
      

      或(仅显示更多) [查看更多] 7 8 9 10 11 12 13 14 [15] 15 17 18 [查看更多]

      当我说“获取”时,我的意思是使用 javascript 创建指向其他页面的链接,而无需重新加载页面

      【讨论】:

      • 你以前见过这个吗?例子?
      【解决方案3】:

      考虑“对数分页”,如此处所述(包括 PHP 代码):

      How to do page navigation for many, many pages? Logarithmic page navigation

      【讨论】:

        【解决方案4】:

        您还可以查看Zend_Paginator,它为您处理了很多此类事情。

        【讨论】:

          猜你喜欢
          • 2014-06-05
          • 1970-01-01
          • 2013-01-22
          • 2020-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-05
          相关资源
          最近更新 更多