# Простой PHP Paginator

Для того чтобы начать, нам надо создать подключение к базе данных. Определим несколько переменных. ‘$tableName’ будет содержать имя таблицы, в которой хранится информация, которую мы будем распределять по разным страницам. Она будет содержать список стран - ‘countries_list’, ‘$targetpage’, ‘$limit’ - это количество строк, которые должны отображаться на странице. Будет выводить по 8 записей.

Что делает код:
1. определяет 3 основные переменные: имя таблицы откуда будут извлекаться данные, название документа и количество отображаемых строк;
2. подключается база и считается количество строк, для того, чтобы знать объем информации;
3. если номер страницы передан нам как GET-параметр, то проверяется номер: если он невалидный, пользователь отправляется на 1-ю страницу;
4. делается выборка;
5. далее определяются номера для следующей и предыдущей страницы, а так же для 1-й и последней;
6. теперь есть целый ряд выражений, которые вычисляют все необходимые данные (общее число страниц и т.д.);
7. в конце выводится значение переменной ‘$paginate’ для отображения номеров страниц;
8. затем в цикле выводятся записи.

<?include'connect.php';

$tableName="countries_list";

$targetpage="index.php";

$limit=8;

$query="SELECT COUNT(*)as num FROM $tableName";$total_pages=mysql_fetch_array(mysql_query($query));$total_pages=$total_pages[num];$stages=3;$page=mysql_escape_string($_GET['page']);if($page){$start=($page-1)*$limit;}else{$start=0;}

$query1="SELECT*FROM $tableName LIMIT $start,$limit";$result=mysql_query($query1);if($page==0){$page=1;}

$prev=$page-1;$next=$page+1;$lastpage=ceil($total_pages/$limit);$LastPagem1=$lastpage-1;$paginate='';if($lastpage>1)

{$paginate.="<div class='paginate'>";if($page>1){$paginate.="<a href='$targetpage?page=$prev'>previous</a>";}else{$paginate.="<span class='disabled'>previous</span>";}

if($lastpage<7+($stages*2)){for($counter=1;$counter<=$lastpage;$counter++){if($counter==$page){$paginate.="<span class='current'>$counter</span>";}else{$paginate.="<a href='$targetpage?page=$counter'>$counter</a>";}}}elseif($lastpage>5+($stages*2)){if($page<1+($stages*2))

{for($counter=1;$counter<4+($stages*2);$counter++)

{if($counter==$page){$paginate.="<span class='current'>$counter</span>";}else{$paginate.="<a href='$targetpage?page=$counter'>$counter</a>";}}

$paginate.="...";$paginate.="<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";$paginate.="<a href='$targetpage?page=$lastpage'>$lastpage</a>";}

elseif($lastpage-($stages*2)>$page &amp;&amp; $page>($stages*2))

{$paginate.="<a href='$targetpage?page=1'>1</a>";$paginate.="<a href='$targetpage?page=2'>2</a>";$paginate.="...";

for($counter=$page - $stages;$counter <=$page+$stages; $counter++)

{if($counter==$page){$paginate.="<span class='current'>$counter</span>";}else{$paginate.="<a href='$targetpage?page=$counter'>$counter</a>";}

}

$paginate.="...";

$paginate.="<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";

$paginate.="<a href='$targetpage?page=$lastpage'>$lastpage</a>";

}else{

$paginate.="<a href='$targetpage?page=1'>1</a>";

$paginate.="<a href='$targetpage?page=2'>2</a>";

$paginate.="...";

for ($counter=$lastpage-(2+($stages*2));$counter <=$lastpage;$counter++)

{if($counter==$page){$paginate.="<span class='current'>$counter</span>";}else{$paginate.="<a href='$targetpage?page=$counter'>$counter</a>";}}}}

if($page<$counter-1){$paginate.="<a href='$targetpage?page=$next'>next</a>";

}else{$paginate.="<span class='disabled'>next</span>";}

$paginate.='</div>';}

echo$total_pages.' Results'.$paginate?>

<ul><?while($row=mysql_fetch_array($result)){echo'<li>'.$row['country'];}?></ul>

## Добавим стили:

.paginate{font-family:arial;padding:3px;margin:3px}

.paginate a{margin:2px;padding:5px;border:1px solid #999;text-decoration:none;color:#666}

.paginate a:hover,.paginate a:active{border:1px solid #999;color:#000}

.paginate span.current{margin:2px;padding:5px;border:1px solid #999;font-weight:bold;background:#999;color:#fff}

.paginate span.disabled{margin:2px;padding:5px;border:1px solid #eee;color:#ddd}

li{padding:4px;margin-bottom:3px;background:#fcc;list-style:none}

ul{margin:6px;padding:0} 222