Разбивка на страницы PHP показывает первые две страницы и последние две страницы

#php #pagination

#php #разбивка на страницы

Вопрос:

В настоящее время я использую приведенный ниже скрипт разбивки на страницы php. Разбивка на страницы отображает шесть результатов на страницу с предыдущими / следующими ссылками. Мне было интересно, может ли кто-нибудь знать, что я мог бы добавить, чтобы в разбивке на страницы также отображались ссылки на первые две страницы и последние две страницы? Как и разбивка на страницы в этом примере страницы: http://www.winelog.net/wines/Oregon

 $data=file("data.txt");
$pages=0;
foreach($data as $temp){
    $x=explode("|",$temp);
    if($x[0] > 0){
        $pages=$pages 1;
    }
}

if($_GET['p']){
    $page=$_GET['p'];
}

if($_GET['i']){
    $index=$_GET['i'];
}

if($index == "p"){
    $page=$page-1;
}
if($index == "n"){
    $page=$page 1;
}
if($page < 1){
    $page=1;
}
if($page  >  $pages){
    $page=$pages;
}
$line=$data[$page-1];
$fields=explode("|",$line);
 

Отображаемая навигация:

 $show=6;
echo "<li><a href='?i=pamp;p=$page'>amp;#171; PREV</li></a>";

if($page-($show/2)  >  1){
    $temp=$page-$show;
    echo "<li><a href='?p=$temp'>...</li></a>";
}

if($page-($show/2) >= 1 amp;amp; $page ($show/2) <= $pages){
    $start=$page-($show/2);
    $stop=$page ($show/2);
}

if($page-($show/2) < 1){
    $start=1;
    $stop=$show;
}

if($page ($show/2) > $pages){
    $start=$pages-$show;
    $stop=$pages;
}

for($i=$start; $i<=$stop; $i  ){
    if($page==$i){
        echo "<li class='active'>$i</li></a>";
    }
    else{
        echo "<li><a href='?p=$i'>$i</li></a>";
    }
}

if($page ($show/2) < $pages){
    $temp=$page $show;
    echo "<li><a href='?p=$temp'>...</li></a>";
}
echo "<li><a href='?i=namp;p=$page'>NEXT amp;#187;</li></a>";
 

Комментарии:

1. Возможно, я бы пошел по пути jquery. Это просто и чище. Плагины. jquery.com/project/pagination

2. @Nikhil: Почему ??! Вы создаете зависимость от Javascript, плагин будет работать медленнее, и ему, вероятно, придется отправлять все данные на страницу — потенциально очень медленно. Прекратите передавать клиенту вещи, которые не нужно туда передавать!

Ответ №1:

Вот что вам нужно сделать.

Сначала подсчитайте количество имеющихся «страниц».
Если страниц меньше, скажем, 10 — выведите все страницы.

В противном случае: вывод с текущей страницы — 5 на текущую страницу 5.
Перед выводом поместите «Первую» кнопку — страница = 1
После вывода поместите «Последнюю» кнопку — страница = общее количество страниц.

Если вам нужна предпоследняя кнопка, просто перейдите страница = общее количество страниц — 1 и т.д.

Возможно, вы захотите заглянуть в Zend_Paginator — вам не нужно использовать весь фреймворк Zend для использования отдельных его частей, он разработан так, что его можно разделить.

Комментарии:

1. Пожалуйста, обновите ссылку на Zend_Paginator, поскольку она возвращает хорошо известную ОШИБКУ 404 page…

Ответ №2:

Полный код их скрипта разбивки на страницы доступен бесплатно @Stranger Studios Есть php и Perl скрипт, доступный для скачивания.

Код версии PHP:

 <?php
//function to return the pagination string
function getPaginationString($page = 1, $totalitems, $limit = 15, $adjacents = 1, $targetpage = "/", $pagestring = "?page=")
{       
    //defaults
    if(!$adjacents) $adjacents = 1;
    if(!$limit) $limit = 15;
    if(!$page) $page = 1;
    if(!$targetpage) $targetpage = "/";

    //other vars
    $prev = $page - 1;                                  //previous page is page - 1
    $next = $page   1;                                  //next page is page   1
    $lastpage = ceil($totalitems / $limit);             //lastpage is = total items / items per page, rounded up.
    $lpm1 = $lastpage - 1;                              //last page minus 1

    /* 
        Now we apply our rules and draw the pagination object. 
        We're actually saving the code to a variable in case we want to draw it more than once.
    */
    $pagination = "";
    if($lastpage > 1)
    {   
        $pagination .= "<div class="pagination"";
        if($margin || $padding)
        {
            $pagination .= " style="";
            if($margin)
                $pagination .= "margin: $margin;";
            if($padding)
                $pagination .= "padding: $padding;";
            $pagination .= """;
        }
        $pagination .= ">";

        //previous button
        if ($page > 1) 
            $pagination .= "<a href="$targetpage$pagestring$prev">� prev</a>";
        else
            $pagination .= "<span class="disabled">� prev</span>";    

        //pages 
        if ($lastpage < 7   ($adjacents * 2))   //not enough pages to bother breaking it up
        {   
            for ($counter = 1; $counter <= $lastpage; $counter  )
            {
                if ($counter == $page)
                    $pagination .= "<span class="current">$counter</span>";
                else
                    $pagination .= "<a href="" . $targetpage . $pagestring . $counter . "">$counter</a>";                 
            }
        }
        elseif($lastpage >= 7   ($adjacents * 2))   //enough pages to hide some
        {
            //close to beginning; only hide later pages
            if($page < 1   ($adjacents * 3))        
            {
                for ($counter = 1; $counter < 4   ($adjacents * 2); $counter  )
                {
                    if ($counter == $page)
                        $pagination .= "<span class="current">$counter</span>";
                    else
                        $pagination .= "<a href="" . $targetpage . $pagestring . $counter . "">$counter</a>";                 
                }
                $pagination .= "<span class="elipses">...</span>";
                $pagination .= "<a href="" . $targetpage . $pagestring . $lpm1 . "">$lpm1</a>";
                $pagination .= "<a href="" . $targetpage . $pagestring . $lastpage . "">$lastpage</a>";       
            }
            //in middle; hide some front and some back
            elseif($lastpage - ($adjacents * 2) > $page amp;amp; $page > ($adjacents * 2))
            {
                $pagination .= "<a href="" . $targetpage . $pagestring . "1">1</a>";
                $pagination .= "<a href="" . $targetpage . $pagestring . "2">2</a>";
                $pagination .= "<span class="elipses">...</span>";
                for ($counter = $page - $adjacents; $counter <= $page   $adjacents; $counter  )
                {
                    if ($counter == $page)
                        $pagination .= "<span class="current">$counter</span>";
                    else
                        $pagination .= "<a href="" . $targetpage . $pagestring . $counter . "">$counter</a>";                 
                }
                $pagination .= "...";
                $pagination .= "<a href="" . $targetpage . $pagestring . $lpm1 . "">$lpm1</a>";
                $pagination .= "<a href="" . $targetpage . $pagestring . $lastpage . "">$lastpage</a>";       
            }
            //close to end; only hide early pages
            else
            {
                $pagination .= "<a href="" . $targetpage . $pagestring . "1">1</a>";
                $pagination .= "<a href="" . $targetpage . $pagestring . "2">2</a>";
                $pagination .= "<span class="elipses">...</span>";
                for ($counter = $lastpage - (1   ($adjacents * 3)); $counter <= $lastpage; $counter  )
                {
                    if ($counter == $page)
                        $pagination .= "<span class="current">$counter</span>";
                    else
                        $pagination .= "<a href="" . $targetpage . $pagestring . $counter . "">$counter</a>";                 
                }
            }
        }

        //next button
        if ($page < $counter - 1) 
            $pagination .= "<a href="" . $targetpage . $pagestring . $next . "">next �</a>";
        else
            $pagination .= "<span class="disabled">next �</span>";
        $pagination .= "</div>n";
    }

    return $pagination;

}
?>
 

Измените код в соответствии с вашими потребностями и добавьте некоторые CSS .

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

Ответ №3:

Ссылка на сайт winelog не работает. Следовательно, я не смог увидеть интересующий вас образец. Я написал скрипт разбивки на страницы на PHP, который показывает две смежные страницы с активной страницей, т.е.

 < 1  2  3 4  5 >  // 3 being the active page

< 1  2  3  4 >  // 2 being the active page
 

Вот код:

 /* set total records */
$total_records = 26;  // this is the total count of values in an array or query results from the database

/* set records per page */
$records_per_page = 5;

/* calculate total pages */
$total_pages = ceil($total_records / $records_per_page);

/* get and set value for current page */
if (isset($_GET['page'])) {
    $current_page = $_GET['page'];
} else {
    $current_page = 1;
}

/* calculate and set previous and next page values */
$previous = $current_page - 1;
$next = $current_page   1;

/* set start page value */
$start_page = 1;

/* set number of pages to display to the left */
/* maximum value should be 4 */
$pages_to_left = 2;

/* set number of pages to display to the right */
/* maximum value should be 4 */
$pages_to_right = 2;

/* show previous pages to the left */
if ($current_page <= $total_pages amp;amp; $current_page > $start_page   $pages_to_left) {
    $start_page = $current_page - $pages_to_left;
}

/* show next pages to the right */
if ($current_page <= $total_pages amp;amp; $current_page > $start_page - $pages_to_right) {
    $end_page = $current_page   $pages_to_right;
    if ($current_page == $total_pages || $current_page   1 == $total_pages || $current_page   2 == $total_pages || $current_page   3 == $total_pages) {
        $end_page = $total_pages;
    }
} else {
    $end_page = $total_pages;
}

/* show previous button */
if ($current_page > 1) {
    echo '<a href="?page='.$previous.'">amp;laquo;</a>';
    echo "amp;nbsp;amp;nbsp;";
}

/* display pages */
for ($page = $start_page; $page <= $end_page; $page  ) {
    echo '<a href="?page='.$page.'">'.$page.'</a>';
    echo "amp;nbsp;amp;nbsp;";
}

/* show last page button */
if ($end_page   $pages_to_right <= $total_pages || $end_page != $total_pages) {
    echo '<a href="?page='.$total_pages.'">amp;hellip;' . $total_pages . '</a>';
}

/* show next button */
if ($current_page < $total_pages) {
    echo "amp;nbsp;amp;nbsp;";
    echo '<a href="?page='.$next.'">amp;raquo;</a>';
}
 

Вот ссылка pastebin на скрипт: https://pastebin.com/espTvimy

Пожалуйста, проверьте это и дайте мне знать, если это работает для вас.