Разбиение на страницы результатов поиска

Unlock
На сайте с 01.08.2004
Offline
760
635

Есть скрипт который в результатах поиска выводит ссылки на первые три страницы и последнюю страницу, и при переходе на другие страницы, идет ссылка на +/-2 страницы от текущей (если это возможно) и на последнюю, . Мутно написал наверное, но из кода будет понятнее:

function DoPageSpan($perpage,$total,$link)

{
global $page;
if (($total < $perpage) || (!$page))
$page = 0;
if ($total > $perpage) {
$div = ceil($total/$perpage);
$pages .= "Pages: ";
if ($page > 0) {
$temp = $page-1;
$pages .= "<a href=\"$link&page=$temp\"><b>&laquo;</b></a> ";
}
$temp = 0;

if ($page > 2)
$temp = $page-2;
if ($temp > 0)
$pages .= "<a href=\"$link&page=0\">[First]</a> ... ";

while ($temp < $div) {
$temp2 = $temp+1;
if ($temp == ($page+3)) {
$temp = $div-1;
$pages .= "... <a href=\"$link&page=$temp\">[Last]</a>";
}
elseif ($temp == $page)
$pages .= "$temp2 ";
else
$pages .= "<a href=\"$link&page=$temp\">$temp2</a> ";

$temp++;
}
if ($page < $div-1) {
$temp = $page+1;
$pages .= " <a href=\"$link&page=$temp\"><b>&raquo;</b></a>";
}
}
if ($pages <> '')
$pages .= "<br>";
return $pages;
}

Мне же надо сделать, чтобы вначале выводились ссылки на первые 11 страниц, и далее +/-10 страниц. Это я попытался сделать так:

   if ($total > $perpage) {

$div = ceil($total/$perpage);
$pages .= "Pages: ";
if ($page > 0) {
$temp = $page-1;
$pages .= "<a href=\"$link&page=$temp\"><b>&laquo;</b></a> ";
}
$temp = 0;

if ($page > 10) // в оригинале здесь $page > 2
$temp = $page-10; // в оригинале здесь $page-2
if ($temp > 0)
$pages .= "<a href=\"$link&page=0\">[First]</a> ... ";

while ($temp < $div) {
$temp2 = $temp+1;
if ($temp == ($page+11)) { // в оригинале здесь $page+3
$temp = $div-1;
$pages .= "... <a href=\"$link&page=$temp\">[Last]</a>";
}
elseif ($temp == $page)
$pages .= "$temp2 ";
else
$pages .= "<a href=\"$link&page=$temp\">$temp2</a> ";

$temp++;
}
if ($page < $div-1) {
$temp = $page+1;
$pages .= " <a href=\"$link&page=$temp\"><b>&raquo;</b></a>";
}
}
if ($pages <> '')
$pages .= "<br>";
return $pages;
}

Но судя по некоторым глюкам, в логике я где-то ошибся. Если это возможно понять из данного куска, поправьте пожалуйста где не правильно изменил.

Есть желание, - тысяча способов; нет желания, - тысяча поводов! /Петр-I/.
IS
На сайте с 16.08.2006
Offline
155
#1

Может дело в параметрах, передаваемых скрипту? Так как сама логика работает. Например тестовый пример

<?php
//файл ind.php
$_GET = $HTTP_GET_VARS;
$page= $_GET['page'];

echo "$page <br>";

function DoPageSpan($perpage,$total,$link)
{
global $page;
if ($total > $perpage) {
$div = ceil($total/$perpage);
$pages .= "Pages: ";
if ($page > 0) {
$temp = $page-1;
$pages .= "<a href=\"$link&page=$temp\"><b>&laquo;</b></a> ";
}
$temp = 0;

if ($page > 10) // в оригинале здесь $page > 2
$temp = $page-10; // в оригинале здесь $page-2
if ($temp > 0)
$pages .= "<a href=\"$link&page=0\">[First]</a> ... ";

while ($temp < $div) {
$temp2 = $temp+1;
if ($temp == ($page+11)) { // в оригинале здесь $page+3
$temp = $div-1;
$pages .= "... <a href=\"$link&page=$temp\">[Last]</a>";
}
elseif ($temp == $page)
$pages .= "$temp2 ";
else
$pages .= "<a href=\"$link&page=$temp\">$temp2</a> ";

$temp++;
}
if ($page < $div-1) {
$temp = $page+1;
$pages .= " <a href=\"$link&page=$temp\"><b>&raquo;</b></a>";
}
}
if ($pages <> '')
$pages .= "<br>";
return $pages;
}


echo doPageSpan(5,1000,'ind.php?');

?>
JasonBourne
На сайте с 25.09.2007
Offline
3
#2

Некоторые глюки - это какие? Судя по коду все должно работать хорошо и правильно, даже перепроверил обе функции у себя с разными параметрами)

[ remoter.ru - удаленная работа (http://remoter.ru) ] [ файлообменник, без рекламы (http://share.remoter.ru) ]
Unlock
На сайте с 01.08.2004
Offline
760
#3

Да уж, что-то я запутался... Может и не здесь проблема, точнее наверное не здесь, раз вы говорите что все правильно. Сложно описать в чем глюки, буду копать дальше :) В любом случае спасибо, одним вариантом стало меньше :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий