Использование:
$c = n; - всего обьектов.
$e =10; //объектов на страницу
$navigator = new Navigator($c, $e);
//Здеся вывод фигни разной из базы
//Выводим саму навигацию и дополнительные передаваемые параметры. Если их ненадо, то пишем NULL
$navigator->print_nav(\'&id=\'.$id);
Вот и всё.
page.php?p=last - последняя страница
<?php
class Navigator{
public $pages; //Количество страниц
public $p; //Текущая страница
public $c;//Всего объектов
public $start;//параметр для LIMIT
public function __construct($c, $e){
$this->pages = ceil($c / $e);
$this->c= $c;
$p = 1;
if(isset($_REQUEST['p'])){
if($_REQUEST['p'] == 'last')
$p=$this->pages;
elseif($_REQUEST['p'] <= $this->pages){
$p = (int)$_REQUEST['p'];
if($p < 1)
$p = 1;
}
}
$this->start = ($p - 1) * $e;
$this->p = $p;
}
public function print_nav($q){
//если больше 1 страници, то выводим навигацию
if($this->pages > 1){
echo'<div class="post">';
//фперёд-назад
if($this->p > 1)
echo'<a href="'.$_SERVER['PHP_SELF'].'?p='.($this->p - 1).$q.'" accesskey="7">«-Назад</a>';
if($this->p < $this->pages && $this->p > 1)
echo' | ';
if($this->p < $this->pages)
echo'<a href="'.$_SERVER['PHP_SELF'].'?p='.($this->p + 1).$q.'" accesskey="9">Дальше-»</a>';
}
echo'<br/>
Страницы: ';
//дальше выводим цыферки
$prev=$this->p - 2;
$next=$this->p + 3;
if($prev < $this->c && $prev > 1)
echo'<a href="'.$_SERVER['PHP_SELF'].'?p=1'.$q.'">1</a> ... ';
for($i = $prev; $i < $next; $i++)
{
if($i <= $this->pages && $i >= 1){
if($this->p == $i)
echo'<strong>['.$i.']</strong>';
else
echo' <a href="'.$_SERVER['PHP_SELF'].'?p='.$i.$q.'">'.$i.'</a> ';
}
}
if($next <= $this->pages)
echo ' ... <a href="'.$_SERVER['PHP_SELF'].'?p='.$this->pages.$q.'">'.$this->pages.'</a>';
//а это форма
echo'<form action="'.$_SERVER['PHP_SELF'].'?'.$q.'" method="post">
<p>
<input name="p" size="4" maxlength="4" value=""/><input type="submit" value="»"/>
</p></form></div>';
}
}
}
?>