Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Компактная пагинация при большом количестве страниц
Форумы портала PHP.SU » » Вопросы новичков » Компактная пагинация при большом количестве страниц

Страниц (1): [1]
 

1. Lusine - 14 Апреля, 2017 - 03:17:40 - перейти к сообщению
Здравствуйте, подскажите пожалуйста, как сделать компактную пагинацию при большом количестве страниц. Чтобы она имела вид:

< первая << предыдущая .. 7 8 9 ... 15 17 18 ... 24 25 26 ... следующая >> последняя

то есть такими группами/порциями

сейчас моя пагинация имеет вид

< первая << предыдущая ... 7 8 9 10 11 ... следующая >> последняя

сам код:

PHP:
скопировать код в буфер обмена
  1.  
  2. $posts = mysql_query("SELECT * FROM table");
  3. $total_num_rows = mysql_num_rows($posts);
  4. if($total_num_rows > 1) {
  5.        
  6.         /* Входные параметры */
  7.        
  8.         $num_rows = '9';
  9.        
  10.         $count_pages_pg = ceil($total_num_rows/$num_rows); // количество страниц
  11.         $active_pg = $_GET['pg']; // текущая активная страница.
  12.         $count_show_pages_pg = 10; // количество отображаемых страниц.
  13.         $url_pg = "1";
  14.         $url_page_pg = $pg_n; // адрес страницы с параметром
  15.         if ($count_pages_pg > 1) { // Всё это только если количество страниц больше 1
  16.                
  17.                 $left_pg = $active_pg - 1;
  18.                 $right_pg = $count_pages_pg - $active_pg;
  19.                 if ($left_pg < floor($count_show_pages_pg / 2)) $start_pg = 1;
  20.                 else $start_pg = $active_pg - floor($count_show_pages_pg / 2);
  21.                 $end_pg = $start_pg + $count_show_pages_pg - 1;
  22.                 if ($end_pg > $count_pages_pg) {
  23.                         $start_pg -= ($end_pg - $count_pages_pg);
  24.                         $end_pg = $count_pages_pg;
  25.                         if ($start_pg < 1) $start_pg = 1;
  26.                 }
  27.                 if ($active_pg != 1) {
  28.                         $page_one = '<a href="'.$url_page_pg.'1" data-pg="1" title="'.(($_SESSION['lang']=='en') ? 'First'.' '.'page' : 'Первая'.' '.'страница').'">'.(($_SESSION['lang']=='en') ? 'First' : 'Первая').'</a>';
  29.                         $page_prev = ' <a href="'.(($active_pg == 2) ? $url_page_pg : $url_page_pg.($active_pg - 1)).'" data-pg="'.(($active_pg == 2) ? '' : ($active_pg - 1)).'" title="'.(($_SESSION['lang']=='en') ? 'Previous'.' '.'page' : 'Предыдущая'.' '.'страница').'">'.(($_SESSION['lang']=='en') ? 'Previous' : 'Предыдущая').'</a> ';
  30.                        
  31.                         $page_prev_tchk = ($active_pg > ($count_show_pages_pg/2+1)) ? ' <a href="'.(($active_pg == 2) ? $url_page_pg : $url_page_pg.($start_pg - 1)).'" data-pg="'.(($active_pg == 2) ? '' : ($start_pg - 1)).'" title="'.(($_SESSION['lang']=='en') ? 'Previous'.' '.'page' : 'Предыдущая'.' '.'страница').'">...</a> ' : '';
  32.                 }
  33.                 for ($i_pg = $start_pg; $i_pg <= $end_pg; $i_pg++) {
  34.                         if ($i_pg == $active_pg) {
  35.                                 $pages .= '<span>'.$i_pg.'</span>';
  36.                         } else {
  37.                                 $pages .= ' <a href="'.$url_page_pg.$i_pg.'"data-pg="'.$i_pg.'">'.$i_pg.'</a> ';
  38.                         }
  39.                 }
  40.                 if($end_pg+1 <= $count_pages_pg) {
  41.                         $pages_next_tchk = ($active_pg < ($count_pages_pg-($count_show_pages_pg/2))) ? ' <a href="'.$url_page_pg.($end_pg+1).'" data-pg="'.($end_pg+1).'" title="'.(($_SESSION['lang']=='en') ? 'Next'.' '.'page' : 'Следующая'.' '.'страница').'">...</a>' : '';
  42.                 }
  43.                 if ($active_pg != $count_pages_pg) {
  44.                        
  45.                         $pages_next =' <a href="'.$url_page_pg.($active_pg + 1).'" data-pg="'.($active_pg + 1).'" title="'.(($_SESSION['lang']=='en') ? 'Next'.' '.'page' : 'Следующая'.' '.'страница').'">'.(($_SESSION['lang']=='en') ? 'Next' : 'Следующая').'</a> ';
  46.                         $page_last = ' <a href="'.$url_page_pg.$count_pages_pg.'" data-pg="'.$count_pages_pg.'" title="'.(($_SESSION['lang']=='en') ? 'Last'.' '.'page': 'Последняя'.' '.'страница').'">'.(($_SESSION['lang']=='en') ? 'Last' : 'Последняя').'</a> ';
  47.                 }
  48.         }      
  49.         if($posts > $_GET['onpage']) {
  50.                 $pagers = ($posts > 1) ? "<p class='pager'>".(($_SESSION['lang']=='en') ? 'Pages' : 'Страницы').": ".$page_one.$page_prev.$page_prev_tchk.$pages.$pages_next_tchk.$pages_next.$page_last."</p>" : '';
  51.         }
  52. }
  53.  
  54.  
2. andrewkard - 14 Апреля, 2017 - 14:15:12 - перейти к сообщению
Предположительно что то подобное:
PHP:
скопировать код в буфер обмена
  1.  
  2. $first = 1;
  3.  
  4. $last = 100;
  5.  
  6. $point = round(($last  - $first) / 5);
  7.  
  8. $html = '<a href="?p=' . ($first) . '">First</a> ';
  9. $html .= '<a href="?p=' . ($point * 2 - 2) . '">Previous</a> ';
  10. $html .= ' ... ';
  11.  
  12. for($i=2; $i<=4; $i++){
  13.  
  14.     $html .= '<a href="?p=' . ($point * $i - 1) . '">'.($point * $i - 1).'</a> ';
  15.     $html .= '<a href="?p=' . ($point * $i) . '">'.($point * $i).'</a> ';
  16.     $html .= '<a href="?p=' . ($point * $i + 1) . '">'.($point * $i + 1).'</a> ';
  17.     $html .= ' ... ';
  18. }
  19.  
  20. $html .= '<a href="?p=' . ($point * 4 + 2) . '">Next</a> ';
  21. $html .= '<a href="?p=' . ($last) . '">Last</a> ';
  22.  
  23. echo $html;
  24.  

 

Powered by ExBB FM 1.0 RC1