Как ограничить количество страниц, показанных в скрипте нумерации страниц - PullRequest
0 голосов
/ 06 ноября 2011

У меня есть скрипт разбиения на страницы, который я разместил ниже, проблема в том, что у меня много данных, поэтому я заканчиваю огромным списком страниц, я хочу, чтобы он показывал только 10 страниц за раз, а затем, возможно, последние 2 такие страницы:

предыдущий 1 2 3 4 5 6 7 8 9 ... 24 25 следующий

есть ли в любом случае, я могу изменить код, чтобы сделать это. Ниже приведен скрипт нумерации страниц, я могу включить другую часть скрипта, если это необходимо.

<?php
//source unknown for logic of showPageNumbers()
//modified by drale.com - 1-19-2010
//added query_string reproduction and divs
//added showNext() and showPrev()

class Pagination 
{
    function getStartRow($page,$limit)
    {
        $startrow = $page * $limit - ($limit);
        return $startrow;
    }

    function showPageNumbers($totalrows,$page,$limit)
    {
        $query_string = $this->queryString();
        $pagination_links = null;

        /*
         * PAGINATION SCRIPT
         * seperates the list into pages
         */     
        $numofpages = $totalrows / $limit; 
        /* We divide our total amount of rows (for example 102) by the limit (25). This 
           will yield 4.08, which we can round down to 4. In the next few lines, we'll
           create 4 pages, and then check to see if we have extra rows remaining for 
           a 5th page. */

        for ($i = 1; $i <= $numofpages; $i++) {
            /* This for loop will add 1 to $i at the end of each pass until $i 
               is greater than $numofpages (4.08). */       
            if ($i == $page) {
                $pagination_links .= '<div class="page-link"><span>' . $i 
                                   . '</span></div> ';
            } else { 
                $pagination_links .= '<div class="page-link"><a href="?page=' . $i 
                    . '&' . $query_string . '">' . $i . '</a></div> '; 
            }

            /* This if statement will not make the current page number available 
               in link form. It will, however, make all other pages available 
               in link form. */
        }   // This ends the for loop

        if (($totalrows % $limit) != 0) {
        /* The above statement is the key to knowing if there are remainders, and it's 
        all because of the %. In PHP, C++, and other languages, the % is known as a 
        Modulus. It returns the remainder after dividing two numbers. If there is no 
        remainder, it returns zero. In our example, it will return 0.8 */

            if ($i == $page) {
                $pagination_links .= '<div class="page-link"><span>' . $i 
                                   . '</span></div> ';
            } else {
                $pagination_links .= '<div class="page-link"><a href="?page=' . $i 
                    . '&'.$query_string.'">'.$i.'</a></div> ';
            }
            /* This is the exact statement that turns pages into link 
               form that is used above */ 
        } // Ends the if statement 

        return $pagination_links;
    }

    //added by drale.com - 1-19-2010
    function showNext($totalrows,$page,$limit,$text="next &raquo;")
    {
        $next_link = null;
        $numofpages = $totalrows / $limit;

        if ($page < $numofpages) {
            $page++;
            $next_link = '<div class="page-link"><a href="?page=' . $page 
                       . '&'.$query_string.'">' . $text . '</a></div>';
        }

        return $next_link;
    }

    function showPrev($totalrows,$page,$limit,$text="&laquo; prev")
    {
        $next_link = null;
        $numofpages = $totalrows / $limit;

        if ($page > 1) {
            $page--;
            $prev_link = '<div class="page-link"><a href="?page=' . $page 
                . '&' . $query_string . '">'.$text.'</a></div>';
        }

        return $prev_link;
    }

    function queryString()
    {
        //matches up to 10 digits in page number
        $query_string = eregi_replace("page=[0-9]{0,10}&","",$_SERVER['QUERY_STRING']);
        return $query_string;
    }
} 
?>

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

Не проверено, но всегда должны отображаться страницы 1–3 и последние 3 страницы списка.В противном случае он будет отображать только предыдущие 3 страницы и следующие три страницы из текущей, на которой вы находитесь.(всякий раз, когда количество страниц превышает 10)

$alwaysShowPages = array(1, 2, 3);

// dynamically add last 3 pages
for ($i = 3; $i >= 0; $i--) {
    $alwaysShowPages[] = $numofpages - $i;
}

for ($i = 1; $i <= $numofpages; $i++) {
    $showPageLink = true;

    if ($numofpages > 10 && !in_array($i, $alwaysShowPages)) {
        if (($i < $page && ($page - $i) > 3)
            || ($i > $page && ($i - $page) > 3)
        ) {
            $showPageLink = false;
        }
    }

    if ($showPageLink) {
        if ($i == $page) {
            $pagination_links .= '<div class="page-link"><span>'.$i.'</span></div> ';
        } else { 
            $pagination_links .= '<div class="page-link"><a href="?page='.$i.'&'.$query_string.'">'.$i.'</a></div> '; 
        }
    }
}
0 голосов
/ 06 ноября 2011

У меня есть версия, которая делает это:

1 | 2 | 3 | 4 | 5 | 6 ... 554 | 555 | 556

1 | 2 | 3 | 4 | 5 | 6 ... 554 | 555 | 556

1 | 2 | 3 ... 278 | 279 | 280 ... 554 | 555 | 556

1 | 2 | 3 ... 415 | 416 | 417 ... 554 | 555 | 556

1 | 2 | 3 | 553 | 554 | 555 | 556

На самом деле ... - это ссылки, которые идут посередине между текущей страницей и 1-й из следующей (или последней) группы ссылок.

Я сделал так, чтобы первые 6 страниц всегда появлялись, если текущая страница меньше 5.

Но я сделал все параметры динамическими, чтобы вы могли изменять такие переменные, как: $ end_links = 3; // устанавливаем количество ссылок на каждом конце, чтобы всегда показывать $ Center_links; // количество ссылок, включая текущую страницу, для отображения «плавающего» центра

Мне потребовались часы, чтобы сделать это, что довольно печально. Ну хорошо.

Просто много используйте массивы и выясните, как добавить к ним правильные значения. Это просто математика и логика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...