[pdoTools] 2.2.1 Улучшения ajax пагинации

Представляю вам новую версию pdoTools с небольшими улучшениями работы pdoPage в режиме ajax.

Первое изменение заключается в том, что все запросы теперь отправляются на отдельный файл-коннектор, который лежит в /assets/components/pdotools/. Во-первых, это ускоряет работу, потому что мы запускаем MODX в API_MODE и не выполняем все сниппеты на текущей странице, перед pdoPage.

А во-вторых, теперь режим ajax у pdoPage можно использовать при включенном Fenom в теле страницы. Кому интересно, вот подробности.

Второе изменение косметическое. Был добавлен параметр &ajaxHistory, который позволяет отключить сохранение номера страницы в url.

Зачем это нужно? Очень просто — для режимов scroll и button. Очень многие пользователи просили сделать так, чтобы можно было просто загружать результаты и сбрасывать всё при перезагрузке страницы.

По умолчанию &ajaxHistory пуст и ориентируется на параметр &ajaxMode: для default он включен, а для прокрутки и кнопки — отключен. Но вы можете и сами указать ему 0 или 1 при любом режиме работы.

Если &ajaxHistory отключен, то страницы в url не сохраняются, а значит и блок с постраничной навигацией не нужен — так что, он скрывается автоматически. Обратите внимание, что он по-прежнему необходим для правильной работы, но на странице его не видно.

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

Совсем мелкое изменение — добавление блоку-обёртке (по умолчанию это у нас #pdopage) класса loading при загрузке, чтобы вывести какой-нибудь индикатор. Например, вот так:
<div id="pdopage">
	<div class="rows">
		[[!pdoPage?
			&parents=`0`
			&ajaxMode=`scroll`
		]]
	</div>
	<div class="spinner"></div>
	[[!+page.nav]]
</div>

<style>
#pdopage .spinner {
	display: none;
	width: 32px;
	height: 32px;
	background: url('/inc/img/loading.gif') no-repeat;
	background-size: 32px;
}
#pdopage.loading .spinner {
	display: block;
	margin: 20px auto 10px auto;
}
</style>
Это можно было и раньше сделать через pdoPage.callbacks, но я решил что лишний класс не помешает.

Оценить pdoPage в &ajaxMode=`scroll` можно прямо здесь, в разделе последних комментариев. Если вдруг что-то не работает — почистите кэш своего браузера.

Версия 2.2.2


Добавил еще один параметр в pdoPage для указания схемы генерации ссылки на страницу &pageLinkScheme. Теперь легко можно делать человекопонятную навигацию, если захочется.

Документация здесь.
Василий Наумкин
09 января 2016, 15:25
modx.pro
1
4 382
+11

Комментарии: 19

Александр Янк
09 января 2016, 19:18
+4
Очень полезное улучшение, Василий спасибо за ваши труды.
    Іван Клімчук
    09 января 2016, 22:31
    +2
    Таки да, спасибо. Все же мечта сделать сайт на чистом femon близка к правде. А то из-за особенности pdoPage пришлось отказаться в свое время. Теперь пора вернуть как было :)
      Волков Николай
      10 января 2016, 18:25
      1
      0
      Было бы здорово, если бы ещё замена текущих позиций была бы из коробки на аяксмод button без callback'ов
        brioni
        11 января 2016, 13:51
        0
        Спасибо, обновился.
          Александр Москвин
          11 января 2016, 16:51
          0
          Всё хорошо, но в ajaxе
          Не отрабатывает modx фильтры
          небо1.рф/shop/men/sweatshirt/
          Обновил, только что, если кликнуть показать ещё
            Василий Наумкин
            11 января 2016, 16:53
            0
            Вызывай их кэшированными.
              Александр Москвин
              11 января 2016, 17:00
              -1
              так вызывались, до обновления нормально работало…
              yadi.sk/i/3vo6S3uXmopsi
              почистил кэш на всякий и всё равно тоже самое.
                Александр Москвин
                11 января 2016, 17:11
                0
                ну моё дело сообщить о баге, чье-то дело минусовать)
                откатываюсь до версии ранее.
                Но ошибка в том, что
                [[!+old_price:gt=`0`:then=`распродажа`]]
                такую конструкцию не отрабатывает [pdoTools] 2.2.2
                  Александр Москвин
                  11 января 2016, 17:29
                  0
                  Поковырялся решил проблему как и говорил новая версия при аяксе показать всё
                  не отрабатывает плейсхолдеры вида [[!+]], решил поменять на [[+]] всё заработало
                  [[!+old_price:gt=`0`:then=`распродажа`]] было
                  [[+old_price:gt=`0`:then=`распродажа`]] стало
                  Не знаю баг, не баг, ну в общем, как то так)
                    Василий Наумкин
                    11 января 2016, 18:07
                    +1
                    По большому счёту — нет, не баг.

                    Некэшированные условия не обрабатываются при запуске сниппета, а оставляются «на потом» для разбора парсером. При работе же через ajax до него дело вообще не доходит, ибо pdoPage делает exit() когда всё закончил.

                    Странно, что это работало раньше. В любом случае, в магазине уже можно загрузить версию 2.2.3, которая дополнительно обрабатывает [[!+]], хоть их и не стоит использовать без особой необходимости.
            Григорий Коленько
            11 января 2016, 22:52
            0
            Всем привет! Сегодня натыкайлся на коммент по поводу расширения стандартного js pdopage. Сейчас найти не могу. Кому не сложно подкиньте ссылку :)
            Николай Пиневич
            12 января 2016, 13:36
            1
            -1
            Не отображает картинки на страницах подгруженных аяксом…
            Вызов картинки в чанке [[!pthumb? &input=`[[+tv.img]]` &options=`w=250&h=320&f=png`]]
            Вывод до апдейта assets/image-cache/image.e414e724.png
            После апдейта image.png
              TITAN-UZ
              15 января 2016, 14:33
              0
              Классный обновления!
              Теперь думаю о канонических url для page :D
                lexikon
                18 августа 2016, 13:12
                0
                Ajax c указанным pageLinkScheme работает криво(
                  Иван
                  26 августа 2016, 00:20
                  0
                  Здравствуйте. Подскажите, пожалуйста, как реализовать работу &pageLinkScheme=`/[[+pageVarKey]]-[[+page]]` в связке с &ajaxMode=`default`. Параметры указал, плагин для обработки повесил на событие OnPageNotFound, но переход по страницам навигации не происходит. В чем может быть проблема?
                    mngatoff
                    20 октября 2016, 22:45
                    0
                    Василий, приветствую. До улучшений pdopage можно было так:

                    &ajax=`1`
                    $.get('?page=3', function(response) {
                     своя логика без переделывания стандартного скрипта
                    }
                    Перешел на fenom.
                    щас response, естесственно, всю страницу отдает

                    какие-то аналогичные способы есть для подобных штук в новых реалиях?

                    P. S. Извиняюсь за дублирование, поздно сообразил, что лучше сразу сюда)
                      tools
                      03 марта 2017, 15:45
                      0
                      Василий, прошу прощения, не могу найти ответ про пагинацию и pdoPage. Сейчас, находясь на третьей и последующих страницах есть ссылка на первую вида
                      site.ru/news?page=1
                      а на второй, так вообще, аж три ссылки на первую страницу, ты писал об этом уже) (https://bezumkin.ru/sections/components/1975/#comment-15942)

                      Вопрос, как можно указать ссылки на первую страницу такими:
                      site.ru/news
                      ?
                        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                        19