У меня есть таблица MySQL, содержащая множество записей, к которым я хочу предоставить пользователю доступ. Я не хочу выводить всю таблицу на страницу, поэтому мне нужно разбить ее на 25 записей за раз, поэтому мне нужен индекс страницы. Вы, наверное, видели их на других страницах, они выглядят примерно так у основания страницы:
<1 2 3 4 <strong>5 6 7 8 9>
Например, когда пользователь щелкает ссылку «4», страница обновляется и смещение перемещается (4-я страница х 25 записей). Вот что у меня уже есть:
function CreatePageIndex($ItemsPerPage, $TotalNumberOfItems, $CurrentOffset, $URL, $URLArguments = array())
{
foreach($URLArguments as $Key => $Value)
{
if($FirstIndexDone == false)
{
$URL .= sprintf("?%s=%s", $Key, $Value);
$FirstIndexDone = true;
}
else
{
$URL .= sprintf("&%s=%s", $Key, $Value);
}
}
Print("<div id=\"ResultsNavigation\">");
Print("Page: ");
Print("<span class=\"Links\">");
$NumberOfPages = ceil($TotalNumberOfItems / $ItemsPerPage);
for($x = 0; $x < $NumberOfPages; $x++)
{
if($x == $CurrentOffset / $ItemsPerPage)
{
Print("<span class=\"Selected\">".($x + 1)." </span>");
}
else
{
if(empty($URLArguments))
{
Print("<a href=\"".$URL."?Offset=".$x * $ItemsPerPage."\">".($x + 1)."</a> ");
}
else
{
Print("<a href=\"".$URL."&Offset=".$x * $ItemsPerPage."\">".($x + 1)."</a> ");
}
}
}
Print("</span>");
Print(" (".$TotalNumberOfItems." results)");
Print("</div>");
}
Очевидно, что этот фрагмент кода не создает динамический индекс, он просто выводит весь индекс внизу страницы для каждой доступной страницы. Что мне нужно, так это динамическое решение, которое показывает только предыдущие 5 страниц и следующие 5 страниц (если они существуют) вместе с >> или чем-то еще, чтобы продвинуться на 5 или около того страниц.
Кто-нибудь видел элегантный и многократно используемый способ реализации этого, так как я чувствую, что заново изобретаю колесо? Любая помощь приветствуется.