попался один проект где используется класс постраничной навигации. класс неплохой, но сыроват. вот сам класс Код | <? /* $array =
array( 'total' => 350, // общее количество елементов 'cur_page' => $_GET['page'], // номер елемента текущей страницы 'number_page' => 10, // кол-во показываемых страниц 'open_tag'=>'<span> ', // открывающий тег неактивного елемента 'close_tag'=>' </span>', // закрывающий тег неактивного елемента 'active_open_tag'=>'<b>', // открывающий тег активного елемента 'active_close_tag'=>'</b>', // закрывающий тег активного елемента 'mask'=>'?page=', // маска url 'open_lastPage'=>'<span class="last">', // открывающий тег ссылки на предыдущие страницы 'close_lastPage'=>'</span>', // закрывающий тег ссылки на предыдущие страницы 'open_nextPage'=>'<span class="next">', // открывающий тег ссылки на следущие страницы 'close_nextPage'=>'</span>' // закрывающий тег ссылки на следущие страницы
); */ class Candy_Pagination {
private $total; private $cur_page; private $number_page; private $array = array();
public function __construct($array) { return $this->array = $array; }
public function getTotal() { if(!empty($this->array['total']))return $this->total = $this->array['total']; else trigger_error('Error:'); } public function getNumberPage() { if(!empty($this->array['number_page'])) return $this->number_page = $this->array['number_page']; else return $this->number_page = 10; } public function getCurPage() { if(!empty($this->array['cur_page'])) return $this->cur_page = (int) $this->array['cur_page']; else return $this->cur_page = 1; }
public function getCountPage() { return intval($this->getTotal()/$this->getNumberPage()); } public function getBetween() { $delta = $this->getCurPage()%$this->getNumberPage(); $delta === 0 ? $delta = $this->getNumberPage() : ''; return $beteen = intval($this->getCurPage()-$delta+1); } public function getEndElem() { return $this->getBetween()+$this->getNumberPage()-1; }
public function limit() { return " LIMIT {$this->start()},{$this->getNumberPage()}"; } public function start() { return $this->getCurPage()*$this->getNumberPage()-$this->getNumberPage(); }
public function display() {
if($this->getCurPage() > $this->getNumberPage()) { $html .= $this->array['open_lastPage'].'<a href="'.$this->array['mask'].($this->getBetween()-1).'">Предыдущие</a>'.$this->array['close_lastPage']; }
for($i=$this->getBetween(); $i<=$this->getCountPage();$i++) {
if($i == $this->getCurPage()) { $html .=$this->array['active_open_tag'].'<a href="'.$this->array['mask'].'">'.$i.'</a>'.$this->array['active_close_tag'];
} else {
$html .= $this->array['open_tag'].'<a href="'.$this->array['mask'].$i.'">'.$i.'</a>'.$this->array['close_tag']; }
if($i == $this->getEndElem()) {
$html .= $this->array['open_nextPage'].'<a href="'.$this->array['mask'].($i+1).'">Следущие</a>'.$this->array['close_nextPage']; //break; } } echo $html; } }
?>
|
пример использования Код | $array =
array( 'total' => $count, // общее количество елементов 'cur_page' => $page, // номер елемента текущей страницы 'number_page' => 10, // кол-во показываемых страниц 'open_tag'=>'<span> ', // открывающий тег неактивного елемента 'close_tag'=>' </span>', // закрывающий тег неактивного елемента 'active_open_tag'=>'<b>', // открывающий тег активного елемента 'active_close_tag'=>'</b>', // закрывающий тег активного елемента 'mask'=>'/news/', // маска url 'open_lastPage'=>'<span class="last">', // открывающий тег ссылки на предыдущие страницы 'close_lastPage'=>'</span>', // закрывающий тег ссылки на предыдущие страницы 'open_nextPage'=>'<span class="next">', // открывающий тег ссылки на следущие страницы 'close_nextPage'=>'</span>' // закрывающий тег ссылки на следущие страницы
);
$pagination = new Candy_Pagination($array); if($count>10) { echo '<div class="pagination">'; $pagination->display(); echo '</div>';
}
|
проблема заключается в том что данный класс может вывести в пагинаторе на одну страницу меньше, если например там страниц меньше 10. Как можно исправить ситуацию?
|