Как настроить нижнюю пагинацию в виде 1 2 ... 5 6 7 8 9 ... 48 49 при переходе на 9 страницу 1 2 ... 7 8 9 10 11 ... 48 49?
Решение: Код (CODE): function getPagesLinks($link='') { global $VM_LANG; $displayed_pages = 6; $total_pages = ceil( $this->total / $this->limit ); $this_page = ceil( ($this->limitstart+1) / $this->limit ); // $start_loop = (floor(($this_page-1)/$displayed_pages))*$displayed_pages+1; if ($this_page <= $displayed_pages / 2 + 1 ) { $start_loop = 2; } else { $start_loop = $this_page - $displayed_pages / 2; } if ($start_loop + $displayed_pages - 1 < $total_pages) { $stop_loop = $start_loop + $displayed_pages - 1; } else { $stop_loop = $total_pages; } $html = '<ul class="pagination"><li>'.$VM_LANG->_('PN_PRETEXT').'</li>'; if ($this_page > 1) { $page = ($this_page - 2) * $this->limit; if( $link != '') { // $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart=0')."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_START')."\">«« ".$VM_LANG->_('PN_START')."</a></li>"; $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.$page)."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_PREVIOUS')."\">« </a></li>"; } else { // $html .= "\n<li><a href=\"#beg\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_START')."\" onclick=\"javascript: document.adminForm.limitstart.value=0; document.adminForm.submit();return false;\">«« ".$VM_LANG->_('PN_START')."</a></li>"; $html .= "\n<li><a href=\"#prev\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_PREVIOUS')."\" onclick=\"javascript: document.adminForm.limitstart.value=$page; document.adminForm.submit();return false;\">« </a></li>"; } } else { // $html .= "\n<li><span class=\"pagenav\">«« ".$VM_LANG->_('PN_START')."</span></li>"; $html .= "\n<li><span class=\"pagenav\"style=\"font-size: 12px;\">«</span></li>"; } if ( $this_page == 1) { $html .= "\n<li><span class=\"pagenav_current\"> 1 </span></li>"; } else { $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart=0')."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_START')."\">1</a></li>"; } if ($this_page > $displayed_pages / 2 + 2 ){ $html .= "\n<li>...</li>"; } for ($i=$start_loop; $i <= $stop_loop; $i++) { if ($i != $total_pages) { $page = ($i - 1) * $this->limit; if ($i == $this_page) { $html .= "\n<li><span class=\"pagenav_current\"> $i </span></li>"; } else { if( $link != '') { $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.$page)."\" class=\"pagenav\"><strong>$i</strong></a></li>"; } else { $html .= "\n<li><a href=\"#$i\" class=\"pagenav\" onclick=\"javascript: document.adminForm.limitstart.value=$page; document.adminForm.submit();return false;\"><strong>$i</strong></a></li>"; } } } } if ($this_page < $total_pages - $displayed_pages / 2 ){ $html .= "\n<li>...</li>"; } if ( $this_page == $total_pages) { $html .= "\n<li><span class=\"pagenav_current\"> $total_pages </span></li>"; } else { $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.(($total_pages-1) * $this->limit))."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_END')."\"> $total_pages</a></li>"; } if ($this_page < $total_pages) { $page = $this_page * $this->limit; $end_page = ($total_pages-1) * $this->limit; if( $link != '') { $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.$page)."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_NEXT')."\"> »</a></li>"; // $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.$end_page)."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_END')."\"> ".$VM_LANG->_('PN_END')." »»</a></li>"; } else { $html .= "\n<li><a href=\"#next\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_NEXT')."\" onclick=\"javascript: document.adminForm.limitstart.value=$page; document.adminForm.submit();return false;\"> »</a></li>"; // $html .= "\n<li><a href=\"#end\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_END')."\" onclick=\"javascript: document.adminForm.limitstart.value=$end_page; document.adminForm.submit();return false;\"> ".$VM_LANG->_('PN_END')." »»</a></li>"; } } else { $html .= "\n<li><span class=\"pagenav\" style=\"font-size: 12px;\"> »</span></li>"; // $html .= "\n<li><span class=\"pagenav\">".$VM_LANG->_('PN_END')." »»</span></li>"; } $html .= "\n</ul>"; return $html; }
Маленький баг, при использовании фильтра по параметрам типа: в случае когда много результатов и много страниц, если зайти в середину или конец списка страниц, а потом урезать параметры фильтра, то новые результаты выводятся, но страница на которой вы находились сохраняется, а там 0 товаров. Решение добавить в фильтре <input type="hidden" name="limitstart" value="0" />