分解PHP分页链接

时间:2010-05-16 16:16:41

标签: php pagination

我有以下方法为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多个链接显示在底部..

我想知道是否有人可以帮我解决这个问题。我不确定大多数分页是如何起作用的,如果即时通讯显示数字......第30页,想法?

4 个答案:

答案 0 :(得分:4)

您只需显示当前页面以及上一页和下一页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

答案 1 :(得分:1)

你可以(第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 [查看更多]

当我说“fetch”时,我指的是使用javascript创建其他页面的链接,无需重新加载页面

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

您也可以查看Zend_Paginator,它会为您处理许多类型的事情。