Выявлено в админке в Обсуждении товаров, но возможно проявляеться везде, так как функция разбивки используется везде где превышен лимит вывода данных для одной страницы.
Суть в следующем:
пока страниц меньше или равно 5, то вроде все нормально
если страниц более 5 то формируется пропуск в нумерации следующего вида
1 2 3 4 5 6 ... 10 след >>
и когда число сообщений деленное на лимит равно целому количеству страниц, то формируется лишняя страница которая не содержит информации и соответственно ведет в пустоту. Например,
Обсуждений товаров = 180
лимит вывода сообщений на страницу = 20
Делим 180 на 20, получаем 180/20=9 страниц
А вот скрипт формирует 10 страницу ведущую в никуда, т.е. вместо
1 2 3 4 5 6 ... 9 след >>
мы получаем
1 2 3 4 5 6 ... 10 след >>
Еще один момент если выбрать вторую страницу, то получим
<< пред 1 2 3 4 5 6 7 ... 10 след >>
если 3 - то будет так << пред 1 2 3 4 5 6 7 8 10 след >>
с 4 страницы будет так << пред 1 2 3 4 5 6 7 8 9 след >>
с 8 - << пред 1 ... 3 4 5 6 7 8 9 след >>
Если полное число страниц не получается, например 179/20, то ссылки формируются правильно
Хотелось бы это исправить.
0
Глюк функции разбивки на страницы
Автор Robby, Nov 20 2011 02:59 PM
В теме одно сообщение
#1
Отправлено 20 November 2011 - 02:59 PM
#2
Отправлено 20 November 2011 - 05:49 PM
Покапался немного,вроде нашел проблему.
За вывод навигации отвечают две функции из core\functions\functions.php (первая функция навигация в админке, вторая в товарах)
Проблема в следующих местах:
для первой функции
для второй
$a - количество элементов в массиве, в моем случае 180, $q - количество элементов на странице 20
что даст следующее выражение при таких числах ($a - $a % $q) = 180-180%20=180-0=180, а должно быть 160 отсюда и ошибка.
ссылка при оригинальном коде имеет вид (за пределами массива)
при измененном
Вот так ссылки будут формироваться правильно, замените выше приведенный проблемный код на следующий:
и
За вывод навигации отвечают две функции из core\functions\functions.php (первая функция навигация в админке, вторая в товарах)
function ShowNavigator($a, $offset, $q, $path, &$out)
{
//shows navigator [prev] 1 2 3 4 … [next]
//$a - count of elements in the array, which is being navigated
//$offset - current offset in array (showing elements [$offset ... $offset+$q])
//$q - quantity of items per page
//$path - link to the page (f.e: "index.php?categoryID=1&")
if ($a > $q) //if all elements couldn't be placed on the page
{
//[prev]
if ($offset > 0) $out .= "<a href=\"".$path."offset=".($offset - $q)."\"><< ".STRING_PREVIOUS.
"</a> ";
//digital links
$k = $offset / $q;
//not more than 4 links to the left
$min = $k - 5;
if ($min < 0)
{
$min = 0;
}
else
{
if ($min >= 1)
{ //link on the 1st page
$out .= "<a href=\"".$path."offset=0\">1</a> ";
if ($min != 1)
{
$out .= "... ";
}
;
}
}
for ($i = $min; $i < $k; $i++)
{
$m = $i * $q + $q;
if ($m > $a) $m = $a;
$out .= "<a href=\"".$path."offset=".($i * $q)."\">".($i + 1)."</a> ";
}
//# of current page
if (strcmp($offset, "show_all"))
{
$min = $offset + $q;
if ($min > $a) $min = $a;
$out .= "<b>".($k + 1)."</b> ";
}
else
{
$min = $q;
if ($min > $a) $min = $a;
$out .= "<a href=\"".$path."offset=0\">1</a> ";
}
//not more than 5 links to the right
$min = $k + 6;
if ($min > $a / $q)
{
$min = $a / $q;
}
;
for ($i = $k + 1; $i < $min; $i++)
{
$m = $i * $q + $q;
if ($m > $a) $m = $a;
$out .= "<a href=\"".$path."offset=".($i * $q)."\">".($i + 1)."</a> ";
}
if (ceil($min * $q) < $a)
{ //the last link
if ($min * $q < $a - $q) $out .= "... ";
$out .= "<a href=\"".$path."offset=".($a - $a % $q)."\">".(floor($a / $q) + 1)."</a> ";
}
//[next]
if (strcmp($offset, "show_all"))
if ($offset < $a - $q) $out .= "<a href=\"".$path."offset=".($offset + $q)."\">".STRING_NEXT.
" >></a> ";
//[show all]
if (strcmp($offset, "show_all")) $out .= "| <a href=\"".$path."show_all=yes\">".
STRING_SHOWALL."</a>";
else $out .= "| <b>".STRING_SHOWALL."</b>";
}
}
function ShowNavigatormd($a, $offset, $q, $path, &$out)
{
//shows navigator [prev] 1 2 3 4 … [next]
//$a - count of elements in the array, which is being navigated
//$offset - current offset in array (showing elements [$offset ... $offset+$q])
//$q - quantity of items per page
//$path - link to the page (f.e: "index.php?categoryID=1&")
if ($a > $q) //if all elements couldn't be placed on the page
{
//[prev]
if ($offset > 0) $out .= "<a href=\"".$path."offset_".($offset - $q).".html\"><< ".STRING_PREVIOUS.
"</a> ";
//digital links
$k = $offset / $q;
//not more than 4 links to the left
$min = $k - 5;
if ($min < 0)
{
$min = 0;
}
else
{
if ($min >= 1)
{ //link on the 1st page
$out .= "<a href=\"".$path."offset_0.html\">1</a> ";
if ($min != 1)
{
$out .= "... ";
}
;
}
}
for ($i = $min; $i < $k; $i++)
{
$m = $i * $q + $q;
if ($m > $a) $m = $a;
$out .= "<a href=\"".$path."offset_".($i * $q).".html\">".($i + 1)."</a> ";
}
//# of current page
if (strcmp($offset, "show_all"))
{
$min = $offset + $q;
if ($min > $a) $min = $a;
$out .= "<b>".($k + 1)."</b> ";
}
else
{
$min = $q;
if ($min > $a) $min = $a;
$out .= "<a href=\"".$path."offset_0.html\">1</a> ";
}
//not more than 5 links to the right
$min = $k + 6;
if ($min > $a / $q)
{
$min = $a / $q;
}
;
for ($i = $k + 1; $i < $min; $i++)
{
$m = $i * $q + $q;
if ($m > $a) $m = $a;
$out .= "<a href=\"".$path."offset_".($i * $q).".html\">".($i + 1)."</a> ";
}
if (ceil($min * $q) < $a)
{ //the last link
if ($min * $q < $a - $q) $out .= "... ";
$out .= "<a href=\"".$path."offset_".($a - $a % $q).".html\">".(floor($a / $q) + 1)."</a> ";
}
//[next]
if (strcmp($offset, "show_all"))
if ($offset < $a - $q) $out .= "<a href=\"".$path."offset_".($offset + $q).".html\">".
STRING_NEXT." >></a> ";
//[show all]
if (strcmp($offset, "show_all")) $out .= "| <noindex><a href=\"".$path."show_all.html\" rel=\"nofollow\">".
STRING_SHOWALL."</a></noindex>";
else $out .= "| <b>".STRING_SHOWALL."</b>";
}
}
Проблема в следующих местах:
для первой функции
if (ceil($min * $q) < $a)
{ //the last link
if ($min * $q < $a - $q) $out .= "... ";
$out .= "<a href=\"".$path."offset=".($a - $a % $q)."\">".(floor($a / $q) + 1)."</a> ";
}
для второй
if (ceil($min * $q) < $a)
{ //the last link
if ($min * $q < $a - $q) $out .= "... ";
$out .= "<a href=\"".$path."offset_".($a - $a % $q).".html\">".(floor($a / $q) + 1)."</a> ";
}
$a - количество элементов в массиве, в моем случае 180, $q - количество элементов на странице 20
что даст следующее выражение при таких числах ($a - $a % $q) = 180-180%20=180-0=180, а должно быть 160 отсюда и ошибка.
ссылка при оригинальном коде имеет вид (за пределами массива)
/admin.php?dpt=catalog&sub=discuss&productID=0&offset=180
при измененном
/admin.php?dpt=catalog&sub=discuss&productID=0&offset=160
Вот так ссылки будут формироваться правильно, замените выше приведенный проблемный код на следующий:
if (ceil($min * $q) < $a)
{ //the last link
if ($min * $q < $a - $q) $out .= "... ";
if ($a % $q == 0){
$out .= "<a href=\"".$path."offset=".($a - $q)."\">".floor($a / $q)."</a> ";
} else {
$out .= "<a href=\"".$path."offset=".($a - $a % $q)."\">".(floor($a / $q) + 1)."</a> ";
}
}
и
if (ceil($min * $q) < $a)
{ //the last link
if ($min * $q < $a - $q) $out .= "... ";
if ($a % $q == 0) {
$out .= "<a href=\"".$path."offset_".($a - $q).".html\">".floor($a / $q)."</a> ";
} else {
$out .= "<a href=\"".$path."offset_".($a - $a % $q).".html\">".(floor($a / $q) + 1)."</a> ";
}
}