Здравствуйте, подскажите пожалуйста, как сделать компактную пагинацию при большом количестве страниц. Чтобы она имела вид:
< первая << предыдущая .. 7 8 9 ... 15 17 18 ... 24 25 26 ... следующая >> последняя
то есть такими группами/порциями
сейчас моя пагинация имеет вид
< первая << предыдущая ... 7 8 9 10 11 ... следующая >> последняя
сам код:
PHP:
скопировать код в буфер обмена
if($total_num_rows > 1) { /* Входные параметры */ $num_rows = '9'; $count_pages_pg = ceil($total_num_rows/$num_rows); // количество страниц $active_pg = $_GET['pg']; // текущая активная страница. $count_show_pages_pg = 10; // количество отображаемых страниц. $url_pg = "1"; $url_page_pg = $pg_n; // адрес страницы с параметром if ($count_pages_pg > 1) { // Всё это только если количество страниц больше 1 $left_pg = $active_pg - 1; $right_pg = $count_pages_pg - $active_pg; if ($left_pg < floor($count_show_pages_pg / 2 )) $start_pg = 1; else $start_pg = $active_pg - floor($count_show_pages_pg / 2 ); $end_pg = $start_pg + $count_show_pages_pg - 1; if ($end_pg > $count_pages_pg) { $start_pg -= ($end_pg - $count_pages_pg); $end_pg = $count_pages_pg; if ($start_pg < 1) $start_pg = 1; } if ($active_pg != 1) { $page_one = '<a href="'.$url_page_pg.'1" data-pg="1" title="'.(($_SESSION['lang']=='en') ? 'First'.' '.'page' : 'Первая'.' '.'страница').'">'.(($_SESSION['lang']=='en') ? 'First' : 'Первая').'</a>'; $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> '; $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> ' : ''; } for ($i_pg = $start_pg; $i_pg <= $end_pg; $i_pg++) { if ($i_pg == $active_pg) { $pages .= '<span>'.$i_pg.'</span>'; } else { $pages .= ' <a href="'.$url_page_pg.$i_pg.'"data-pg="'.$i_pg.'">'.$i_pg.'</a> '; } } if($end_pg+1 <= $count_pages_pg) { $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>' : ''; } if ($active_pg != $count_pages_pg) { $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> '; $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> '; } } if($posts > $_GET['onpage']) { $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>" : ''; } }
|