簡體   English   中英

分解PHP分頁鏈接

[英]Break up PHP Pagination links

我有以下方法為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頁,想法?

您只需顯示當前頁面以及上一頁和后面的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; }
}

你也可以實現無限歷史/分頁 ,這是非常酷的。 =)


更新: 這個@Codepad優雅的版本

考慮“logarithmic pagination”,如此處所述(包括PHP代碼):

如何為許多頁面進行頁面導航? 對數頁面導航

你可以做(​​第15頁)

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

其中[查看更多]鏈接獲取其余(或更多)頁面鏈接。 這樣可以保持用戶整潔,同時允許用戶瀏覽所有頁面。

示例(單擊View Previous之后)

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創建指向其他頁面的鏈接,無需重新加載頁面

您還可以查看Zend_Paginator ,它可以為您處理許多類型的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM