Автор Тема: Изменение навигации по каталогу  (Прочитано 20585 раз)

Оффлайн Dentar

  • Пользователь
  • **
  • Сообщений: 47
    • Просмотр профиля
Изменение навигации по каталогу
« : Августа 25, 2012, 12:12:29 am »
Уважаемые специалисты, подскажите как изменить вид навигации по каталогу:

[пред]  [1-12]  [13-24]  [25-36]  [37-48]  [49-60]  [61-72]   ...   13   [след] [показать все]

на следующий:

1  2  3  4  5  6  7  8  9  10  ...  13  Показать все

По-моему так красивее. А еще шикарнее если бы ссылки были в виде кнопок.
Заранее спасибо.
« Последнее редактирование: Августа 25, 2012, 12:16:03 am от Dentar »

Оффлайн Dentar

  • Пользователь
  • **
  • Сообщений: 47
    • Просмотр профиля
Re: Изменение навигации по каталогу
« Ответ #1 : Августа 25, 2012, 12:26:01 pm »
Спасибо, разобрался

Оффлайн rom1

  • Спец
  • ***
  • Сообщений: 136
    • Просмотр профиля
Re: Изменение навигации по каталогу
« Ответ #2 : Августа 25, 2012, 08:36:57 pm »
Версия 5.0.2 Вопрос по навигации.

Постраничные линки выглядят так:
[1-10]  [11-20]  [21-30]  [31-40]  [41-50]  [51-60]   ...   14   [след] [показать все]

При этом последняя ссылка (14) это ссылка на страницу [131-139]
Соответстственно для страниц [231-239] ссылка выглядит как (24)
И так далее.

Немного вводит в заблуждение. Я так понимаю в конце ссыли пропущен 0, т.е. для первого примера там должно быть 140 -
не подскажете как поправить? В функции поковырялся, но больно сложно там всё ((


Оффлайн rom1

  • Спец
  • ***
  • Сообщений: 136
    • Просмотр профиля
Re: Изменение навигации по каталогу
« Ответ #3 : Августа 25, 2012, 09:04:35 pm »
Разобрался сам, не понял только нафига так было сделано.

В строке 479 есть код:

$out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a-$a%$q)."\">".(floor($a/$q)+1)."</a> &nbsp;&nbsp;";
            else //$a is divided by $q
               $out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a-$q)."\">".(floor($a/$q))."</a> &nbsp;&nbsp;";
меняем на

$out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a-$a%$q)."\">".(floor($a-$a%$q))."</a> &nbsp;&nbsp;";
            else //$a is divided by $q
               $out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a-$q)."\">".(floor($a-$q))."</a> &nbsp;&nbsp;";
     
тогда будет отображаться оффсет.
« Последнее редактирование: Августа 25, 2012, 11:58:25 pm от nictboom »

nictboom

  • Гость
Re: Изменение навигации по каталогу
« Ответ #4 : Августа 26, 2012, 12:14:53 am »
Цитировать
Немного вводит в заблуждение. Я так понимаю в конце ссыли пропущен 0, т.е. для первого примера там должно быть 140
14 это номер последней страницы, при условии выводить по 10 товаров на страницу.

Оффлайн rom1

  • Спец
  • ***
  • Сообщений: 136
    • Просмотр профиля
Re: Изменение навигации по каталогу
« Ответ #5 : Августа 26, 2012, 01:09:06 am »
Ну тогда вообще нелогично. )) Я б никогда не догадался сам. Спасибо.
Оптимальнее всего было бы прописывать вместо этого последний диапазон последней страницы,
но как это сделать совсем непонятно (

nictboom

  • Гость
Re: Изменение навигации по каталогу
« Ответ #6 : Августа 26, 2012, 01:47:33 am »
можно попробовать:[".($a-$a%$q)."-".$a."], хотя если следовать логике то:[".(($a-$a%$q)+1)."-".$a."]. в случае если один товар на последней странице, будет иметь вид [140-140]
а лучше вообще перевести просто в номера страниц.
« Последнее редактирование: Августа 26, 2012, 01:53:43 am от nictboom »

Alex

  • Гость
Re: Изменение навигации по каталогу
« Ответ #7 : Ноября 07, 2012, 10:10:43 pm »
Добрый вечер форумчане  :) надеюсь на вашу помощь.
локальный хост | 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)."\">[&#9668;Назад]</a> &nbsp;";

         //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> &nbsp;";
               if ($min != 1) { $out .= "... &nbsp;"; };
            }
         }

         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> &nbsp;";
         }

         //# of current page
         if (strcmp($offset, "show_all"))
         {
            $min = $offset+$q;
            if ($min > $a) $min = $a;
            $out .= "<b>[".($k+1)."]</b> &nbsp;";
         }
         else
         {
            $min = $q;
            if ($min > $a) $min = $a;
            $out .= "<a href=\"".$path."offset=1\">[1]</a> &nbsp;"; //первая ссылка если нажать на показать все
         }

         //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> &nbsp;"; // ссылки справа
         }

         if ($min*$q < $a) { //the last link
            if ($min*$q < $a-$q) $out .= " ... &nbsp;&nbsp;";
            if (!($a%$q == 0))
               $out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a-$a%$q)."\">[".(floor($a/$q)+1)."]</a> &nbsp;&nbsp;"; //так и не понял что делает этот кусок
             else//$a is divided by $q
               $out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a/$q)."\">[".(floor($a/$q))."]</a> &nbsp;&nbsp;";//оформление последней ссылки
         }

         //[next]
         if ($offset<$a-$q) $out .= "<a href=\"".$path."offset=".(($offset+$q)/$q+1)."\">[Вперед &#9658;]</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)."\">[&#9668;Назад]</a> &nbsp;";

//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> &nbsp;";
if ($min != 1) { $out .= "... &nbsp;"; };
}
}

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> &nbsp;";
}

//# of current page
if (strcmp($offset, "show_all"))
{
$min = $offset+$q;
if ($min > $a) $min = $a;
$out .= "<b>[".($k+1)."]</b> &nbsp;";
}
else
{
$min = $q;
if ($min > $a) $min = $a;
$out .= "<a href=\"".$path."offset=1\">[1]</a> &nbsp;"; //первая ссылка если нажать на показать все
}

//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> &nbsp;"; // ссылки справа
}

if ($min*$q < $a) { //the last link
if ($min*$q < $a-$q) $out .= " ... &nbsp;&nbsp;";
if (!($a%$q == 0))
$out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a-$a%$q)."\">[".(floor($a/$q)+1)."]</a> &nbsp;&nbsp;"; //так и не понял что делает этот кусок
else //$a is divided by $q
$out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a/$q)."\">[".(floor($a/$q))."]</a> &nbsp;&nbsp;";//оформление последней ссылки
}

//[next]
if ($offset<$a-$q) $out .= "<a href=\"".$path."offset=".(($offset+$q)/$q+1)."\">[Вперед &#9658;]</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]
« Последнее редактирование: Ноября 07, 2012, 10:14:06 pm от Alex »

nictboom

  • Гость
Re: Изменение навигации по каталогу
« Ответ #8 : Ноября 07, 2012, 10:58:15 pm »
давай упрощу тебе жизнь:
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)."\" title=\"".STRING_PREVIOUS."\">< &nbsp;</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\">&nbsp;1 &nbsp;</a>";
                    if ($min != 1) { $out .= "... &nbsp;"; };
                }
            }

            for ($i = $min; $i<$k; $i++)
            {
                $m = $i*$q + $q;
                if ($m > $a) $m = $a;

                $out .= "<a href=\"".$path."offset=".($i*$q)."\">&nbsp;".($i+1)."&nbsp;</a>";
            }

            //# of current page
            if (strcmp($offset, "show_all"))
            {
                $min = $offset+$q;
                if ($min > $a) $min = $a;
                $out .= "<span class=\"show\">".($k+1)."</span>";
            }
            else
            {
                $min = $q;
                if ($min > $a) $min = $a;
                $out .= "<a href=\"".$path."offset=0\">&nbsp;1&nbsp;</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)."\">&nbsp;".($i+1)."&nbsp;</a>";
            }

            if ($min*$q < $a) { //the last link
                if ($min*$q < $a-$q) $out .= " ... &nbsp;&nbsp;";
                if (!($a%$q == 0))
                    $out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a-$a%$q)."\">".(floor($a/$q)+1)."&nbsp;</a>";
                else //$a is divided by $q
                    $out .= "<a class=\"no_underline\" href=\"".$path."offset=".($a-$q)."\">".(floor($a/$q))."&nbsp;</a>";
            }

            //[next]
//            if ($offset<$a-$q) $out .= "<a href=\"".$path."offset=".($offset+$q)."\" title=\"".STRING_NEXT."\">&nbsp;>&nbsp;</a>";
            if (($offset<$a-$q)and(strcmp($offset, "show_all"))) $out .= "<a href=\"".$path."offset=".($offset+$q)."\" title=\"".STRING_NEXT."\">&nbsp;>&nbsp;</a>";
            //[show all]
            if (strcmp($offset, "show_all"))
                $out .= "&nbsp;<a href=\"".$path."show_all=yes\">".STRING_SHOWALL."</a>";
            else
                $out .= "<span class=\"show\">".STRING_SHOWALL."</span>";

        }
}
поковыряешься, думаю разберешься.
ps/ для <span class=\"show\"> соответственно можно задать стиль( span.show {трам-пам-пам}), так же добавить и стиль для ссылок и описать его.
« Последнее редактирование: Ноября 07, 2012, 11:01:52 pm от nictboom »

Alex

  • Гость
Re: Изменение навигации по каталогу
« Ответ #9 : Ноября 07, 2012, 11:51:40 pm »
давай упрощу тебе жизнь...

В вашем варианте сохранена стандартная генерация ссылок:
http://www.ru/brand/apple/&offset=0  урл 1ой страницы
http://www.ru/brand/apple/&offset=10 урл 2ой страницы
...
http://www.ru/brand/apple/&offset=90 урл 8ой страницы


а  нужно что бы было так:
http://www.ru/brand/apple/&offset=1 урл 1ой страницы
http://www.ru/brand/apple/&offset=2 урл 2ой страницы
...
http://www.ru/brand/apple/&offset=8 урл 8ой станицы
...
http://www.ru/brand/apple/&offset=15 урл 15ой станицы

В моем варианте так и генерирует, но при переходе на любую из этих страниц, меня перебрасывает на главную страницу этого бренда:
http://www.ru/brand/apple/

была мысль, что нужно как то объяснить это в файле .htaccess

Надеюсь в этот раз более понятно объяснил.
Наверно я  один такой придирчивый, но хочется, чтоб была логичность в номере страниц и урлах :-\

nictboom

  • Гость
Re: Изменение навигации по каталогу
« Ответ #10 : Ноября 08, 2012, 12:01:29 am »
0 - 10  или 20 ...90  значение зависит от кол-во выводимых позиций на станице(будь то 10-20).
а позвольте поинтересоваться: это для поисковиков? или для посетителей?
если первое, то не вижу в этом смысла. если второе то тем более. человеку по моему пофик(запоминать подобный урл ни кто не будет).

Alex

  • Гость
Re: Изменение навигации по каталогу
« Ответ #11 : Ноября 08, 2012, 12:11:44 am »
0 - 10  или 20 ...90  значение зависит от кол-во выводимых позиций на станице(будь то 10-20).
а позвольте поинтересоваться: это для поисковиков? или для посетителей?
если первое, то не вижу в этом смысла. если второе то тем более. человеку по моему пофик(запоминать подобный урл ни кто не будет).
тут наверно и не первое и не второе, а третье для себя  :D просто хотелось так реализовать.
Ну ладно, сделаю как временный вариант 0 10...50...90, мб у кого будет идея как сделать так, как было описано выше  ;) было бы круто!

Тут назрел такой вопрос, на сколько запарно будет сделать рядом с пагинацие выпадающий список с количеством отображаемых товаров на странице? причем что бы при выборе количества товаров, эта информация запоминалась и отображала пользователю в других разделах такое же количество товаров, до изменения на другое.
(например как тут http://www.svyaznoy.ru/catalog/navigation/1813?PAGEN_1=3 )
« Последнее редактирование: Ноября 08, 2012, 12:22:44 am от Alex »

nictboom

  • Гость
Re: Изменение навигации по каталогу
« Ответ #12 : Ноября 08, 2012, 04:24:40 pm »
на сколько запарно будет сделать рядом с пагинацие выпадающий список с количеством отображаемых товаров на странице?поправить пару-тройку includes файлов(category.php, brands.php, tag.php) и столько же tmpl.html

nictboom

  • Гость
Re: Изменение навигации по каталогу
« Ответ #13 : Декабря 25, 2012, 01:05:34 am »
Цитировать
Тут назрел такой вопрос, на сколько запарно будет сделать рядом с пагинацие выпадающий список с количеством отображаемых товаров на странице?
да в принципе, решение было, чуть подзабыл выложить, туть будет.