Добрый вечер форумчане
надеюсь на вашу помощь.
локальный хост | Lego Edition SP 5.0.2
Пытался организовать пагинацию такого вида:
[◄Назад] [1] [2] [3] [4] [5] [6] [7] [8] [Вперед ►] [показать все]Делает все как задумано, с точки зрения оформления и ссылки правильные генерируются, т.е.:
noname.ru/brand/toy/&offset=4 //назад
noname.ru/brand/toy/&offset=1 //1стр
...
noname.ru/brand/toy/&offset=5 //5стр (та на которой нахожусь)
...
noname.ru/brand/toy/&offset=8 //8стр
noname.ru/brand/toy/&offset=6 //вперед
Но при переходе на любую страницу с
&offset=1 по
&offset=8 он перебрасывает на главную страницу, а точнее
noname.ru/brand/toy/При этом работают старые урлы если вручную набрать:
noname.ru/brand/toy/&offset=0 //открывается 1 страница
noname.ru/brand/toy/&offset=10 //открывается 2 страница
...
noname.ru/brand/toy/&offset=70 открывается 8 страницаПомогите пожалуйста поправить код, чтобы пагинация работала как задумано.
читабельный вариант кода:[spoiler]
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 ($q==0) $q=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)/$q+1)."\">[◄Назад]</a> ";
//digital links
$k = $offset / $q;
//not more than 4 links to the left
$min = $k - 3;
if ($min < 0) { $min = 0; }
else {
if ($min >= 1)
{
//link on the 1st page $out .= "<a href=\"".$path."offset=1\">[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+1)."\">[".($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=1\">[1]</a> ";
//первая ссылка если нажать на показать все }
//not more than 5 links to the right $min = $k + 3;
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+1)."\">[".($i+1)."]</a> ";
// ссылки справа }
if ($min*$q < $a) { //the last link
if ($min*$q < $a-$q) $out .= " ... ";
if (!($a%$q == 0))
$out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a-$a%$q)."\">[".(floor($a/$q)+1)."]</a> ";
//так и не понял что делает этот кусок else//$a is divided by $q $out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a/$q)."\">[".(floor($a/$q))."]</a> ";
//оформление последней ссылки }
//[next] if ($offset<$a-$q) $out .= "<a href=\"".$path."offset=".(($offset+$q)/$q+1)."\">[Вперед ►]</a>";
//[show all] if (strcmp($offset, "show_all"))
$out .= " <a href=\"".$path."show_all=yes\">[".STRING_SHOWALL."]</a>";
else $out .= "<b>[".STRING_SHOWALL."]</b>";
}
}
[/spoiler]
не читабельный вариант:[spoiler]
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 ($q==0) $q=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)/$q+1)."\">[◄Назад]</a> ";
//digital links
$k = $offset / $q;
//not more than 4 links to the left
$min = $k - 3;
if ($min < 0) { $min = 0; }
else {
if ($min >= 1)
{ //link on the 1st page
$out .= "<a href=\"".$path."offset=1\">[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+1)."\">[".($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=1\">[1]</a> "; //первая ссылка если нажать на показать все
}
//not more than 5 links to the right
$min = $k + 3;
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+1)."\">[".($i+1)."]</a> "; // ссылки справа
}
if ($min*$q < $a) { //the last link
if ($min*$q < $a-$q) $out .= " ... ";
if (!($a%$q == 0))
$out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a-$a%$q)."\">[".(floor($a/$q)+1)."]</a> "; //так и не понял что делает этот кусок
else //$a is divided by $q
$out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a/$q)."\">[".(floor($a/$q))."]</a> ";//оформление последней ссылки
}
//[next]
if ($offset<$a-$q) $out .= "<a href=\"".$path."offset=".(($offset+$q)/$q+1)."\">[Вперед ►]</a>";
//[show all]
if (strcmp($offset, "show_all"))
$out .= " <a href=\"".$path."show_all=yes\">[".STRING_SHOWALL."]</a>";
else
$out .= "<b>[".STRING_SHOWALL."]</b>";
}
}
[/spoiler]