2015-02-25 2 views
2

У меня есть скрипт разбиения на страницы с PHP. Когда записи страниц составляют несколько сотен, результат разбивки на страницы слишком велик. Как я могу ограничить номера страниц/ссылки?Ограничить количество страниц на странице pgination

Пример: < 1 | 2 ... 37 | 38 | 39 | 40 | 41 | 42 ... 82 | 83>

Это мой PHP скрипт

<?php 
$ppp = 10; 
$rows = mysql_num_rows($query); 

$nmpages = ceil($rows/$ppp); 

// if current page is not 1, draw PREVIOUS link 
if ($pg > 1 && $nmpages != 0) { 
    echo "<a href=\"?pg=".($pg-1)."\">&lt;</a> "; 
} 

For($i = 1 ; $i <= $nmpages ; $i++) { 
    If($i == $pg) { 
     echo "<a href=\"#\" class=\"selected\"><b>".$i."</b></a> "; 
    } else { 
     echo "<a href=\"?pg=".$i."\">".$i."</a> "; 
    } 
} 
// if current page less than max pages, draw NEXT link 
if ($pg < $nmpages && $nmpages != 0) { 
    echo "<a href=\"?pg=".($pg+1)."\">&gt;</a>"; 
} 
?> 

У вас есть идеи, как я могу сделать это с конкретной PHP скрипт, который у меня есть?

+0

возможно дубликат [Интеллектуальный алгоритм разбиения на страницы] (http://stackoverflow.com/questions/163809/smart-pagination-algorithm) –

+0

см это [вопрос] [1] [1]: http://stackoverflow.com/questions/15241847/pagination-to-show-max-value-and-limit-the-rest/15242313#15242313 Возможно, это будет ваш ответ –

+1

Вам нужно знать две вещи: на какой странице вы находитесь и сколько страниц в общей сложности. Разделите и победите; разбить проблему на более мелкие проблемы, и ее будет намного легче решить. –

ответ

2

Ответ на вопрос this question был в основном для посещения страницы около Digg style pagination, которая включает образцы кода.

Так вот ответ, но этот вопрос в основном является дубликатом.

+0

Категория разбиения на страницы Digg - очень хороший пример для этого, и она проста в использовании в пользовательских сценариях разбиения на страницы, так как это очень читаемый код. – jagb

1

Попробуйте сделать страницу кронштейн для примера 10 меньше и 10 больше, чем фактическая страница, изменение, например, для постановки на это:

For($i = $pg-10 ; $i <= $pg+10 ; $i++) 
5

Попробуйте это:

<?php 
     $link = ""; 
$page = $_GET['pg']; // your current page 
// $pages=20; // Total number of pages 

    $limit=5 ; // May be what you are looking for 

    if ($pages >=1 && $page <= $pages) 
    { 
     $counter = 1; 
     $link = ""; 
     if ($page > ($limit/2)) 
      { $link .= "<a href=\"?page=1\">1 </a> ... ";} 
     for ($x=$page; $x<=$pages;$x++) 
     { 

      if($counter < $limit) 
       $link .= "<a href=\"?page=" .$x."\">".$x." </a>"; 

      $counter++; 
     } 
     if ($page < $pages - ($limit/2)) 
     { $link .= "... " . "<a href=\"?page=" .$pages."\">".$pages." </a>"; } 
    } 

    echo $link; 
?> 

ВЫХОД :

//At page=1 
1 2 3 4 ... 20 

//At page=12 
1 ... 12 13 14 15 ... 20 

//At page=18 
1 ... 18 19 20 
2

Улучшение или, скорее, переписывание на основе кода @ Makesh.

function get_pagination_links($current_page, $total_pages, $url) 
{ 
    $links = ""; 
    if ($total_pages >= 1 && $current_page <= $total_pages) { 
     $links .= "<a href=\"{$url}?page=1\">1</a>"; 
     $i = max(2, $current_page - 5); 
     if ($i > 2) 
      $links .= " ... "; 
     for (; $i < min($current_page + 6, $total_pages); $i++) { 
      $links .= "<a href=\"{$url}?page={$i}\">{$i}</a>"; 
     } 
     if ($i != $total_pages) 
      $links .= " ... "; 
     $links .= "<a href=\"{$url}?page={$total_pages}\">{$total_pages}</a>"; 
    } 
    return $links; 
} 

ВЫВОД:

page = 1 
1 2 3 4 5 6 ... 20 

page = 10 
1 ... 5 6 7 8 9 10 11 12 13 14 15 ... 20 

page = 19 
1 ... 14 15 16 17 18 19 20 
Смежные вопросы