<?php
function paginator($count_news, $nameTbl, $where = NULL)
{
$page = $_GET['page']; //текущая страница
$count = Database::query("SELECT COUNT(`id`) FROM `".$nameTbl."`" . $where);
$all_page = ceil($count/$count_news);
if($page == 1)
{
$start = 0;
}
else
{
$start = ($page * $count_news) - $count_news;
}
$menu = "";
if($page >= 7 && ($all_page - 4) > $page)
{
$menu .= "<i>1</i> .... ";
$pre_nav = $page - 4;
$post_nav = $page + 4;
for($i=$pre_nav; $i<$page; $i++)
{
$menu .= "<i>".$i."</i> ";
}
$menu .= " <b>".$page."</b> ";
for($i=1;$i<=4;$i++)
{
$menu .= "<i>".($i + $page)."</i> ";
}
$menu .= " ..... <i>".$all_page."</i>";
}
else if($page < 7)
{
if($page == 1)
{
$menu .= "<b>".$page."</b> ";
for($i = 1;$i<$page;$i++)
{
$menu .= "<i>".$i."</i> ";
}
}
else
{
for($i=1; $i<$page; $i++)
{
$menu .= "<i>".$i."</i> ";
}
$menu .= " <b>".$page."</b> ";
for($i=($page + 1); $i<=7; $i++)
{
$menu .= "<i>".$i."</i> ";
}
}
$menu .= " ..... <i>".$all_page."</i>";
}
else
{
$menu .= "<i>1</i> ..... ";
$last_page = $all_page - 4;
for($i=$last_page; $i<=$all_page; $i++)
{
if($i == $page)
{
$menu .= "<b>".$i."</b> ";
}
else
{
$menu .= "<i>".$i."</i> ";
}
}
}
return array('start' => $start, 'result'=>$menu, 'number_news'=>$count_news);
//Вызов
echo "<pre>".print_r(3, 'news', 'WHERE `public`='1'')."</pre>";
А ну да, тут я использовал MySQLi, но это играет не большую роль ;) Возвращает она вот что:
Array
(
[start] => 15 //С нечго начинаем выборку
[result] => 1 2 3 4 5 6 7 ..... 24 //Сама навигация
[number_news] => 3 //Количество статей
)