Модификация getPage

Вчера модифицировал getPage для вывода первых и последних страниц с пропусками.

Изменения

  • Добавил параметр &showEdgePages — включить показ страниц в новом виде? По умолчанию — да.
  • Добавил параметр &pageSkipTpl — шаблон для оформления пропуска, по умолчани — li с многоточием.
  • Изменил параметр &pageLimit по умолчанию, с 5 на 2.

Как работает?

Вывод первых и последних страниц равен &pageLimit. По умолчанию, теперь это 2, значит выведется первые 2, текущая, 2 предыдущих, 2 следующих и 2 последних.
Если количество первых или последних страниц равняется &pageLimit (то есть, мы достаточно ушли от краев списка), то крайняя страница от текущей слева и/или справа меняется на &pageSkipTpl.

В итоге получается то, что вы видите на картинке вверху.

Возможно, кому то не очень понравится, что итоговое количество страниц меняется, в зависимости от положения в списке, но городить велосипед проверок и условий на 30 строк мне не хочется.
В любом случае, раньше и такого не было. Да и параметр для включения/отключения нового режима тоже не зря приделан.

Ссылки

Все изменения предложены автору getPage, Jason Coward — он пока молчит.

Пакет можно скачать в нашем репозитории. В связи с выходом pdoPage, getPageExt удалён из репозитория.

Предыдущая заметка
Плагин editButton


Комментарии ()

  1. Мордынский Николай 07 марта 2013, 16:26 # 0
    Василий день добрый.
    Такая проблема при навигации с помощью getPage при переходе на первую или последнюю страны исчезают блоки в начало, в конец, следующая и предыдущая.

    В следствии чего блок постранички прыгает и выглядит это не красиво.
    Вопрос аналогичный поднимался тут, но там автора закидали шапками.

    А у тебя в блоге постраничка нормально работает и блоки не исчезают просто получают класc disabled.

    Подскажи решение как лучше. Не хочется влезать в код пакета — при обновлении затрется
    1. Василий Наумкин 07 марта 2013, 17:07 # 0
      Все банально:
      [[+prev:default=`<li class="disabled"><a href="#"><</a></li>`]][[+pages]][[+next::default=`<li class="disabled"><a href="#">></a></li>`]]
      1. Володя 03 августа 2013, 11:06 # 0
        у меня почему то такая конструкция не срабатывает, получается что всегда disabled
        1. Алексей 16 сентября 2013, 13:33 # 0
          Василий, у меня такое тоже не работает, всегда стиль disabled и пуская ссылка.
          1. Василий Наумкин 16 сентября 2013, 13:40 # 0
            У меня там опечатка
            next::default
            надо заменить на
            next:default

            А так вроде все верно.
            1. Алексей 16 сентября 2013, 13:45 # 0
              Пишу так
              [[+prev:default=`<li class="disabled"><a href="[[+href]]"><<</a></li>`]][[+pages]][[+next:default=`<li class="disabled"><a href="[[+href]]">>></a></li>`]]
              не работает
              1. Василий Наумкин 16 сентября 2013, 13:52 # 0
                Что именно не работает?

                По умолчанию, если нет предыдущей и следующей страницы — ссылки на них пропадают. Так — не пропадают, а получаются отключенные, блок навигации не дергается.

                Так что именно у тебя не работает? Ссыли все равно пропадают, или не становятся активными, когда должны?
                1. Алексей 16 сентября 2013, 13:56 # 0
                  Ссылки не пропадают и не становятся активными, как и должны
                  <li class="disabled"><a href=""> << </a></li>
                  <li><a class="active" href="catalog/">1</a></li>
                  <li><a href="catalog/?page=2">2</a></li>
                  <li><span>...</span></li>
                  <li><a href="catalog/?page=10">10</a></li>
                  <li><a href="catalog/?page=11">11</a></li>
                  <li class="disabled"><a href=""> >> </a></li>
      2. Мордынский Николай 07 марта 2013, 19:59 # 0
        хех )) действительно б об этом не подумал спасибо.
        1. Володя 29 июля 2013, 11:26 # 0
          подскажите по поводу пагинации. допустим имею две страницы: page 1, page 2.
          но если в адресную строку ввести несуществующий адрес/?page=N то открывается пустая страница, а не 404?
          кто нибудь решал этот вопрос?
          1. Мордынский Николай 29 июля 2013, 14:26 # 0
            хм действительно есть такое… «какая удивительная хрень!!!»
            Думаю можно фильтрами вывода сделать редирект.
            Но это костыль и замедлит генерацию страниц каталога((

            1. Володя 29 июля 2013, 15:12 # 0
              ну вообще и так тоже переходит http://bezumkin.ru/modx?page=34, то есть тут скорее всего дело не getpage…
              фильтр тут не поможет я думаю
              1. Мордынский Николай 29 июля 2013, 15:20 # 0
                Фильтр можно сделать на возвращаемый контен или что нибудь подобное, либо количество элементов.

                Но тут не вижу ничего страшного страница не существует, но и ссылок на них не генерируется, хотя если уменьшить количество товара в каталоге тогда да будит плохо.

                Притом что да у Василия на сайте такой же эффект в Экст гет пейдж
            2. Василий Наумкин 29 июля 2013, 15:30 # 0
              Какой вопрос?

              Page — это указатель для пагинации, на сколько отмотать результатов. Страница каждый раз одна и та же, она открывается, Not Found нет.

              Если я передам любой странице параметр ?xxx=33 она тоже должна выдать 404? А если там есть сниппет, который примет этот параметр и выдаст результат? А если примет, но не выдаст? А если там 3 пагинации, 2 выдадут результаты, а третья нет — она должна сделать редирект на 404?

              В общем, я не вижу проблемы, потому что понимаю, что происходит при передаче параметров для пагинации.

              1. Мордынский Николай 29 июля 2013, 15:45 # 0
                bezumkin.ru/?page=50 проблемы нет пока каталог растет;

                Если ассортимент к примеру уменьшится, то на сайте появятся проиндексированные пустые страницы которые не отдают 404 и ето не есть гуд.
                1. Василий Наумкин 29 июля 2013, 15:47 # 0
                  И ЯНДЕКС НАС ЗАБАНИТ!!!

                  Серьезно, меня это вообще не беспокоит.
                  1. Мордынский Николай 29 июля 2013, 16:16 # 0
                    Василий, речь идет вообще не конкретно о твоем пакете, тоже самое и в обычном гет пейдже — не стоит так реагировать.

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

                    У нас ежемесячный бюджет 100 тыс на поддержание позиций в яндексе и нехорошо если такие мелочи будут все портить. Сделать коммерческий сайт мало надо его еще продавать заставить.

                    Интересно много симплдрим бы продал примочек к modx, если бы не твой блог который переправляет пользователей. — хрен бы он что продал потому что в выдаче их нет( ну если только что нибудь вкарячил своим клиентам в довесок).

                    Не у каждого есть такой поставщик покупателей как ты (случай давольнотаки неординарный).

                    Вся коммерция конкурирует за топ выдачи.
                    Просто если тебе это неважно, не значит что это неважно другим.
                    Если бы ты попробывал какой нибудь реальный магазин в Московском регионе протолкнуть понял бы.

                    1. Василий Наумкин 29 июля 2013, 16:31 # 0
                      Объясняю еще раз, что ситуация нормальная, на странице может быть огромное количество сниппетов, принимающих разные параметры.

                      Здесь нет 404 not found, вот и все. И ошибки нет, если кто-то вбил что-то руками не то.

                      А всеобщее зацикливание на поисковиках приводит к тому, что люди вообще не задумываются, как и почему работает их сайт — это очень раздражает.

                      Вообще, посмотрел на Маркете и Озоне — сделано гораздо умнее, просто выводится первая страница, никаких 404 нет.
                      Такое, думаю, можно сделать в getPage — поставил задачу.
                      1. Мордынский Николай 29 июля 2013, 16:41 # 0
                        Как вариант на 1вую.

                        Зациклитвание только у тех у кого бизнес держится на сайте. Потомуу что ресурсы у людей ограничены некоторые последнее вкладывают и + — месяц простоя сайта для них жизненно важен. Что бы в яндексе не расказывали про красивые сайты, лучше ранжируются все равно специально заточенные, на некоторые уродства в топе даже смотреть тошно.
                        1. Мордынский Николай 29 июля 2013, 16:54 # 0
                          Я понимаю, что ситуация нормальная и не совсем критичная.

                          Как я написал проблем небудит пока поисковик не нажрется фейковых ссылок — что может быть при уменьшении, товара в каталоге. Ссылка была проинлдексирована и поисеовик будит на нее все равно заходить она в памяти, а поскольку 404 нет и 302 нет то он будит считать ее пустой страницей, дублем и или еще чем нибудь(и может отнести сайт к числу гавносайтов).

                          Если бы я вел блог как у тебя мне тоже было б монопенесуально, что там видит поисковик — это особенность комьюнити. Причем конкурентов у тебя нет практически в рунете. и все бы в топ 5 по желанию легко вместились, а если бы конкуренция было бы за 1000 ресурсов…
                          1. Василий Наумкин 29 июля 2013, 17:47 # 0
                            Ты мне так рассказываешь, как будто Озоном рулишь.

                            Если весь бизнес в интернете, и все с него живут — поди можно и пару программистов постоянных подключить, которые решат все вопросы?

                            Я уж молчу про специально заточенные движки (или и вовсе — специально написанные), и правила выдачи контента.

                            Вконтакте и facebook вон, уже и php переделывают под свои нужды.
                            1. Александр Мелихов 30 июля 2013, 10:34 # 0
                              Вконтакте и facebook вон, уже и php переделывают под свои нужды.
                              А где можно об этом поподробнее почитать? Что-то заинтересовало, чем они там занимаются.
                              1. Василий Наумкин 30 июля 2013, 10:43 # 0
                                Ищи на Хабре kPHP и HipHop.
                              2. Мордынский Николай 30 июля 2013, 15:14 # 0
                                ошибаешься таким гигантам как раз такие мелочи ни к чему у них имя

                                Дело то как раз в ограниченности бютжета
                              3. Илья Уткин 30 июля 2013, 14:11 # 0
                                Ага, у вас уменьшился каталог, яндекс увидел 404 и выкинул страницу ?page=50 из индекса. А потом каталог опять увеличился, а страница уже не в индексе и фиг знает, когда появится… )))

                                А вообще, яндекс не причисляет к «говносайтам» хорошие сайты, у которых просто есть пустые странички.
                                1. Мордынский Николай 30 июля 2013, 15:18 # 0
                                  Еще как причесляет(вопрос объема страниц уменьши каталог на 2/3 ?). это раз
                                  Вы не прочитали все коменты речь идет как раз о том, что страница не возвращает 404.

                                  1. Володя 30 июля 2013, 16:28 # 0
                                    Да нет Николай, Илья наверно имел ввиду такую ситуацию:
                                    допустим 50 страниц с пагинацией, и они в индексе. Затем каталог уменьшился допустим до 49 страниц. Сделали что несуществующая страница отдает 404 и соответственно яндекс выкинул ее из индекса. Но каталог вскоре снова расширился до 50 страниц, а яндекс ее уже выкинул… так вот он и говорит когда же она теперь снова появится в поиске…
                                    хз что правильней, кто разбирается отпишите
                                    1. Мордынский Николай 30 июля 2013, 16:53 # 0
                                      Как только 50 страница снова появится и даст 200 ответ он ее по новой проиндексирует и это правильно. Так и должно быть, а если страница пустая и при это мдает 200 ответ то плохо потому, что она останется в базе.

                                      Это все равно что не чистить корзину на компе, Свиду все в порядке, а количество хлама по мнению поисковика на сайте растет.
                                      1. Володя 30 июля 2013, 17:24 # 0
                                        а если на запрос о несуществующей странице давать 404 ответ и подменять ее первой страницей без редиректа. Это есть правильно?
                                      2. Илья Уткин 30 июля 2013, 17:34 # 0
                                        Попробуйте создать сниппет sendError404:
                                        <?php
                                        $_GET['page'] = 1;
                                        $modx->sendForward($modx->resource->id, 'HTTP/1.1 404 Not Found');
                                        А в вызове сниппета getPage добавить параметр toPlaceholder:
                                        [[!getPage?
                                            &toPlaceholder=`resList`
                                            &element=`getResources`
                                            &tpl=`tpl.News.list.row`
                                        ]]
                                        Тогда вот таким фильтром можно заставить отдавать 404 ошибку:
                                        [[[[!+page:gt=`[[+pageCount]]`:then=`sendError404`:else=`+resList`]]]]
                                        1. Володя 30 июля 2013, 17:45 # 0
                                          да я именно твое решение мне и интересно, я на твоем блоге уже с ним ознакомился)
                                          1. Илья Уткин 30 июля 2013, 17:46 # 0
                                            Ой, я, вроде, Николаю отвечал)))
                          Добавление новых комментариев отключено.