- Не работает пагинация
- Комментарии (6)
- Ajax пагинация не работает
- Комментарии (13)
- Не работает pdoPage
- Комментарии: 15
- Блог вебмастера
- создание сайтов, заработок в сети, раскрутка, программирование
- Modx: ошибка pdoPage, не работает ajax и пагинация
- Рабочий код плагина вывода пагинации pdoPage modx
- Не работает последняя страница pdoPage modx
- Не работает первая страница навигации pdoPage
- Не работает ajax режим
- MODX. Пагинация на сайте с использованием pdoPage
- Возможные проблемы
- Документация сниппета pdoPage
- pdoPage
- pdoPage
- Параметры
- Поддержка Ajax
- Встроенная Ajax пагинация
- Загрузка кнопкой
- Загрузка при прокрутке
- History API
- Функции обратного вызова
- Человекопонятная навигация
- Примеры
Не работает пагинация
Комментарии (6)
А со стандартными шаблонами работает?
Если нет, то проверьте, есть ли на странице еще вызов pdoPage.
В этом случае добавьте параметр: и тогда страницы выводите:
Также бывает не лишним изменить [[+total]] параметром
Так, что-то я совсем запутался.
Со стандартным шаблоном такая же ситуация (не работает как надо).
В [[!pdoPage?… добавил &pageNavVar=`prod`
На странице пытаюсь вывести [[!+prod.nav]]. В итоге вообще ничего не выводится.
По последнему (изменить total) вообще не понял, это где менять надо?
Параметр pageNavVar служит для того, чтобы развести несколько вызовов pdoPage на странице (документация). Иначе по клику на ссылке будут листаться все.
Параметр totalVar задает плейсхолдер для сохранения общего количества результатов. Дело в том, что практически все сниппеты (pdoResources, getImageList, getProducts, pdoMenu и т. д.) выводят это кол-во в переменную total. Бывает (сталкивался пару раз), что пагинация глючит из-за того, что какой-то сниппет считывает этот total и на основе него делает вывод, а total-то не его)).
Поэтому и рекомендовал добавить в вызов этот параметр с любым уникальным значением (хотя сам pdoPage пишет по умолчанию в page.total, но мало ли).
Чтобы совсем обособить данный вызов, можно ещё пененазначить переменную в запросе через &pageVarKey.
Если собрать все вышесказанное, то сделайте так:
Если и это не поможет, надо смотреть сайт.
PS на всякий случай.
В HEAD base прописан?
Источник
Ajax пагинация не работает
Тоже самое картинкой, чтобы было понятнее:
Поидее должна выдаваться стандартная кнопка «показать еще», но ее нет. Если ставить параметр &ajaxMode=`scroll`, то также ничего не происходит.
В чем может быть ошибка?
PDOtools 2.3.5
Ajax в параметрах pdoPAge имеет значение ДА
Комментарии (13)
Для начала сделайте такие же ID и классы у элементов, как в документации:
Или в этих параметрах укажите свои:
ajaxElemWrapper — jQuery селектор элемента-обёртки с результатами и пагинацией. По умолчанию #pdopage.
ajaxElemRows — jQuery селектор элемента с результатами. По умолчанию #pdopage .rows
Все равно кнопка не появляется.
Селекторы стоят по дефолту.
Появилась другая проблема:
Новые элементы стали появляться с кривой ссылкой на картинку.
Изначальный путь:
У новых элементов путь:
Я так понимаю править надо шаблон, но почему тогда работают первые элементы?
помогло, но есть еще одна проблема 🙂
Перестали работать кнопки выбора количества товара (плюс, минус) у новых элементов.
Секция Функции обратного вызова
Вот скрипт, отвечающий за изменение количества товара:
Т.е. нужно поставить в шаблон скрипт, который будет вызывать функцию из верхнего скрипта:
Приветствую! Мучаюсь с проблемой… надеюсь на помощь
При ajax-загрузке контента с помощью pdopage перестают работать скрипты слайдеров и галерей, потому что они работают только с контентом, который был загружен во время загрузки страницы. Перепробовал уже
$(‘body’).on( ‘click’, ‘.btn-more’, function() < >);
и
pdoPage.callbacks[‘after’] = function(config, response) < >;
и
$(document).ajaxSuccess(function() < >;
ничто не отрабатывает правильно. При вызове обычного alert, изначально появляется модальное окно, а уже потом подгружается контент, из чего делаю вывод, что при клике по кнопке с классом .btn-more изначально загружаются скрипты, а уже потом подгружается контент с помощью ajax, с которым подгруженные скрипты уже не работают. Помогите понять как решить проблему
Всем привет еще раз!
Получилось заставить работать галерею с помощью ajaxStop. Правда тут возникла другая сложность — после подгрузки контента ajax’ом функция, которая была отработана во время изначальной загрузки страницы продолжает работать и после загрузки контента ajax’ом, при этом дублируя результаты отработки после каждого нажатия на кнопку btn-more. Пока не могу понять как обнулить результаты отработки функции и одновременно снова загрузить скрипт.
$(function() <
var $gallery = $(‘.rows a’).simpleLightbox();
$gallery.on(‘show.simplelightbox’, function() <
console.log(‘Requested for showing’);
>)
.on(‘shown.simplelightbox’, function() <
console.log(‘Shown’);
>)
.on(‘close.simplelightbox’, function() <
console.log(‘Requested for closing’);
>)
.on(‘closed.simplelightbox’, function() <
console.log(‘Closed’);
>)
.on(‘change.simplelightbox’, function() <
console.log(‘Requested for change’);
>)
.on(‘next.simplelightbox’, function() <
console.log(‘Requested for next’);
>)
.on(‘prev.simplelightbox’, function() <
console.log(‘Requested for prev’);
>)
.on(‘nextImageLoaded.simplelightbox’, function() <
console.log(‘Next image loaded’);
>)
.on(‘prevImageLoaded.simplelightbox’, function() <
console.log(‘Prev image loaded’);
>)
.on(‘changed.simplelightbox’, function() <
console.log(‘Image changed’);
>)
.on(‘nextDone.simplelightbox’, function() <
console.log(‘Image changed to next’);
>)
.on(‘prevDone.simplelightbox’, function() <
console.log(‘Image changed to prev’);
>)
.on(‘error.simplelightbox’, function(e) <
console.log(‘No image found, go to the next/prev’);
console.log(e);
>);
>);
$(document).ajaxStop(function() <
var $gallery = $(‘.rows a’).simpleLightbox();
Для добавления комментариев вы должны авторизоваться или зарегистрироваться.
Источник
Не работает pdoPage
Сталкнулся с очень странной проблемой не работает pdoPage. Что я уже только не делал вот 2 варианта вызова в двух разных ситуациях и ниодин не работает. Для меня это очень странно. Версия пдо последняя
Журнал ошибок
[2017-07-15 20:43:59] (ERROR in resource 3 . /sub/shk/public_html/core/model/modx/modparser.class.php: 1353) Bad link tag `[[
Комментарии: 15
В первый вызов надо добавить параметр:
Если у вас комментарии только в этом ресурсе, или:
Если нужно из всех ресурсов внутри контейнера 45.
Обёртка всего вызова с Ajax должна быть такая:
Из второго вызова убрать параметры:
И задать правильный parents.
Добавляем к вызову параметр:
в чанке вызываем:
Случаем не на одной странице оба вызова ставишь? Приведи полный вызов исправленного второго варианта.
Это убрать, а так вызов совершенно обычный.
Источник
Блог вебмастера
создание сайтов, заработок в сети, раскрутка, программирование
Modx: ошибка pdoPage, не работает ajax и пагинация
Очень долго возился с выводом постов в блоге на modx. Выводил через pdoPage, и сталкивался с проблемами навигации. В статье расскажу какие проблемы были и как их решить. И конечно же выложу рабочий код решение.
Рабочий код плагина вывода пагинации pdoPage modx
Сразу выложу код и поясню его, а потом опишу косяки, с которыми столкнулся.
parents — родительский ресурс, с которого выводить статьи (посты);
includeTVs — мои tv, очень много информации у меня разбита и хранится в Дополнительных полях;
tpl — шаблон вывода (чанк). Его сейчас выложу;
ajaxMode — именно в нем и причина, почему-то нужно указывать.
Код шаблона для моего вывода через сниппет pdoPage в modx:
В чанке используются стандартные переменные (типа uri, pagetitle, longtitle) и Дополнительные поля (tv.status, start). Если что не понятно — спрашивайте. Кстати, по дате еще есть нюансы (strtotime или нет, формат даты modx). Но это уже другая статья.
А сейчас по основным проблемам или даже багам, с которыми я сталкивался.
Не работает последняя страница pdoPage modx
Сначала я столкнулся с проблемой, когда у меня не работала последняя страница. У меня стоял &limit=10, было 4 страницы, по первым трем ходил спокойно, а последняя не открывалась — просто перезагружалась текущая. И была загвоздка, я играл с кодом, и у меня вылазила вторая ошибка — если заработает последняя, то не открывались другие страницы.
Не работает первая страница навигации pdoPage
Уже вроде написал код, проверил, но перестала открываться первая страница («Первая» и «1»). Причем проблема когда ты находишься на последней странице. На других все хорошо. Вроде не существенно, и можно забить, но нужно решать любые косяки.
Не работает ajax режим
Обновляет страницу (сам ajax не работает), не грузит еще посты (где-то косяк) или вообще ничего не выводит. Такое было, когда я хотел выводить через аякс-запросы. На что стоит обратить внимание:
- id блока, в котором находится вывод;
- ajaxMode.
У многих не работал ajax-вывод именно через не заданный или неправильно заданный контейнер (div) в котором находился блок с данными. Вот рабочий код для вывода pdoPage с ajax-подгрузкой постов (статей):
Источник
MODX. Пагинация на сайте с использованием pdoPage
Отредактировано: 29 Декабря 2019
Создать пагинацию на сайте можно с помощью сниппета pdoPage, который входит в состав компонента pdoTools. Принцип его работы аналогичен принципу pdoResource, если говорить точнее, то pdoPage вызывает сниппет pdoResource для вывода ресурсов. Как настроить страницу для вывода пагинации:
- Для начала надо настроить вызов ресурсов, аналогично тому, как это делается с pdoRecource (если вы уже настроили вывод через этот сниппет, просто замените название на pdoPage, оставив прежние параметры)
Обратите внимание: снипет надо вызывать некешируемым, иначе возникнут неполадки при переключении страницы
Вывод ресурсов с разбивкой на страницы готов.
Возможные проблемы
Если при переключении страниц пагинация пропадает — вероятно проблема в кеше.
Если, несмотря на правильно установленный код, пагинация не отображается — могут быть конфликты с другими вызовами pdoPage. В этом случае можно переназначить поисковое значение страницы с помощью параметра &pageVarKey.
Если не происходит переключение между страницами — возможно не указан &pageVarKey
Документация сниппета pdoPage
pdoPage
pdoPage
Сниппет pdoPage позволяет вывести результаты работы других сниппетов с разбивкой на страницы.
Есть несколько серьезных отличий от сниппета getPage:
- 2 вида пагинации: с пропуском страниц и классическая (зависит от параметра &pageLimit).
- Пагинация не плавает. Если указано показывать 5 ссылок на страницы — всегда будет 5 и не больше.
- Можно указать чанки для вывода при отсутствии ссылок на первую, последнюю, следующую или предыдущую страницу.
- Параметр &maxLimit не позволяет пользователю затормозить ваш сайт большой выборкой.
- Редирект на первую страницу при отсутствии результатов или некорректном параметре &page.
- Работает со сниппетом pdoResources, по умолчанию.
- Поддерка работы через ajax.
Параметры
При вызове сниппета pdoPage указываются параметры сниппета, для которого производится пагинация. Данный сниппет должен понимать параметры &page и &limit. По умолчанию pdoPage принимает все параметры pdoTools и кроме того, некоторые свои:
Название | По умолчанию | Описание |
---|---|---|
&plPrefix | Префикс для выставляемых плейсхолдеров | |
&limit | 10 | Ограничение количества результатов на странице. Число должно быть больше 0, иначе вам не нужен этот сниппет. |
&maxLimit | 100 | Максимально возможный лимит выборки. Перекрывает лимит, указанный пользователем через url. |
&offset | 0 | Пропуск результатов от начала. |
&page | 1 | Номер страницы для вывода. Перекрывается номером, указанным пользователем через url. |
&pageVarKey | page | Имя переменной для поиска номера страницы в url. |
&totalVar | page.total | Имя плейсхолдера для сохранения общего количества результатов. |
&pageLimit | 5 | Количество ссылок на страницы. Если больше или равно 7 — включается продвинутый режим отображения. |
&element | pdoResources | Имя сниппета для запуска. |
&pageNavVar | page.nav | Имя плейсхолдера для вывода пагинации. |
&pageCountVar | pageCount | Имя плейсхолдера для вывода количества страниц. |
&pageLinkScheme | Шаблон генерации ссылок на страницы. Позволяет реализовать ЧПУ пагинацию. См. ниже. | |
&tplPage | Чанк оформления обычной ссылки на страницу. | |
&tplPageWrapper | Чанк оформления всего блока пагинации, содержит плейсхолдеры страниц. | |
&tplPageActive | Чанк оформления ссылки на текущую страницу. | |
&tplPageFirst | Чанк оформления ссылки на первую страницу. | |
&tplPageLast | Чанк оформления ссылки на последнюю страницу. | |
&tplPagePrev | Чанк оформления ссылки на предыдущую страницу. | |
&tplPageNext | Чанк оформления ссылки на следующую страницу. | |
&tplPageSkip | Чанк оформления пропущенных страниц при продвинутом режиме отображения (&pageLimit >= 7). | |
&tplPageFirstEmpty | Чанк, выводящийся при отсутствии ссылки на первую страницу. | |
&tplPageLastEmpty | Чанк, выводящийся при отсутствии ссылки на последнюю страницу. | |
&tplPagePrevEmpty | Чанк, выводящийся при отсутствии ссылки на предыдущую страницу. | |
&tplPageNextEmpty | Чанк, выводящийся при отсутствии ссылки на следующую страницу. | |
&cache | 0 | Кэширование результатов работы сниппета. |
&cacheTime | 3600 | Время актуальности кэша, в секундах. |
&cache_user | Принудительно устанавливает ID посетителя, по-умолчанию кеширование производится с учетом ID посетителя | |
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. | |
ajax | Включить поддержку ajax запросов. | |
ajaxMode | Ajax пагинация «из коробки». Доступны 3 режима: «default», «button» и «scroll». | |
ajaxElemWrapper | #pdopage | jQuery селектор элемента-обёртки с результатами и пагинацией. |
ajaxElemRows | #pdopage .rows | jQuery селектор элемента с результатами. |
ajaxElemPagination | #pdopage .pagination | jQuery селектор элемента с пагинацией. |
ajaxElemLink | #pdopage .pagination a | jQuery селектор ссылки на страницу. |
ajaxElemMore | #pdopage .btn-more | jQuery селектор кнопки загрузки результатов при ajaxMode = button. |
ajaxHistory | Сохранять номер страницы в url при работе в режиме ajax. | |
frontend_js | [[+assetsUrl]]js/pdopage.min.js | Ссылка на javascript для подключения сниппетом. |
frontend_css | [[+assetsUrl]]css/pdopage.min.css | Ссылка на css стили оформления для подключения сниппетом. |
setMeta | 1 | Регистрация мета-тегов со ссылками на предыдущую и следующую страницу. |
strictMode | 1 | Строгий режим работы. pdoPage делает редиректы при загрузке несуществующих страниц. |
Шаблон | По умолчанию |
---|---|
&tplPage | @INLINE [[+pageNo]] |
&tplPageWrapper | @INLINE |
&tplPageActive | @INLINE |
&tplPageFirst | @INLINE |
&tplPageLast | @INLINE |
&tplPagePrev | @INLINE |
&tplPageNext | @INLINE |
&tplPageSkip | @INLINE |
&tplPageFirstEmpty | @INLINE |
&tplPageLastEmpty | @INLINE |
&tplPagePrevEmpty | @INLINE |
&tplPageNextEmpty | @INLINE |
ajaxTplMore | @INLINE [[%pdopage_more]] |
Поддержка Ajax
pdoPage может выдавать JSON и прерывать работу движка при соответствии запроса трём характеристикам:
- У сниппета включен параметр &ajax.
- Запрос сделан при помощи XMLHttpRequest, то есть — ajax.
- В запросе содержится переменная, указанная у сниппета в &pageVarKey. По умолчанию, это page .
То есть, вам достаточно просто указать сниппету &ajax=`1` и отправить странице GET запрос типа:
И в ответ вы получите JSON c результатами работы, пагинацией и служебными данными: номер страницы, сколько всего страниц и сколько всего результатов. Учитывая, что pdoPage — это сниппет-обёртка, таким образом вы можете заставить работать через ajax многие другие сниппеты.
Встроенная Ajax пагинация
Начиная с версии 1.10 pdoPage умеет загружать страницы через ajax. Вам нужно только обернуть его вызов в специальную разметку:
Внутри [[+page.nav]] у нас div с классом pagination — так в pdoPage по умолчанию.
Вы можете менять идентификаторы этой разметки следующими параметрами:
- ajaxElemWrapper — jQuery селектор элемента-обёртки с результатами и пагинацией. По умолчанию #pdopage .
- ajaxElemRows — jQuery селектор элемента с результатами. По умолчанию #pdopage .rows
- ajaxElemPagination — jQuery селектор элемента с пагинацией. По умолчанию #pdopage .pagination
- ajaxElemLink — jQuery селектор ссылки на страницу. По умолчанию #pdopage .pagination a
Два последних селектора рассчитывают на то, что вы не меняли стандартное оформление блока пагинации в параметре &tplPageWrapper. Работа обеспечивается подключением javascript файла из параметра &frontent_js.
Параметр &ajax=`1` указывать необязательно. Не пустой &ajaxMode активирует его самостоятельно.
Загрузка кнопкой
В отличии от стандартной пагинации, этот тип работы предполагает, что пользователь будет двигаться только вниз, загружая новые элементы, и поэтому сдвигает блок пагинации при прокрутке.
Так что, логично его размещать вверху:
Используются всё те же селекторы, плюс:
- ajaxElemMore — jQuery селектор кнопки загрузки результатов при ajaxMode = button. По умолчанию #pdopage .btn-more .
- ajaxTplMore — Шаблон кнопки для загрузки новых результатов при ajaxMode = button. Должен включать селектор, указанный в &ajaxElemMore. По умолчанию @INLINE [[%pdopage_more]]
При нажатии на кнопку загружаются &limit элементов и добавляются в конец блока результатов. Если больше загружать нечего — кнопка прячется. Плавающий блок навигации показывает текущую страницу и позволяет быстро перейти куда нужно. Здесь клик уже не обрабатывается через ajax, потому что и так выходит довольно сложно.
Если вывод плавающего блока в пагинацией не нужен, то просто сделайте ему display:none в вашем css.
Загрузка при прокрутке
Этот способ очень похож на предыдущий, только нет кнопки и её не нужно нажимать — всё делается автоматически при прокрутке страницы.
History API
pdoPage поддерживает работу с History API вашего браузера. Это значит, что когда &ajaxMode включен, сниппет может сохранять номер страницы в адресной строке, чтобы при перезагрузке ничего не терялось. Также правильно работает навигация кнопками «вперёд\назад» браузера.
Вы можете изменить это поведение параметром &ajaxHistory, включив или выключив его. По умолчанию он работает следующим образом:
- Если ajaxMode установлен в default, то History API используется, номер страницы сохраняется.
- Если ajaxMode установлен в scroll или button, то History API не используется.
При отключении &ajaxHistory блок в постраничной навигацией скрывается, чтобы страницы нельзя было переключать вручную.
Функции обратного вызова
Вы можете указать функции, которые будут вызываться до и после загрузки страницы через ajax вот так:
С версии 1.11.0-pl появилась возможность добавления обработчика на событие pdopage_load:
Проверка данных в config позволит вам различить разные вызовы pdoPage на одной странице.
Человекопонятная навигация
С версии 2.2.2 можно использовать параметр &pageLinkScheme для указания схемы генерации ссылок на страницу. В параметре может быть всего 2 плейсхолдера:
- [[+pageVarKey]] — переменная с именем страницы. По умолчанию page .
- [[+page]] — номер страницы
Для примера укажите такой параметр:
Это приведёт к генерации ссылок, типа
При переходе по этим ссылкам (кроме первой) MODX будет выдавать ошибку 404, потому что страниц с этими адресами не существует. Так что, нам нужно написать плагин для их обработки:
Теперь этот плагин будет обрабатывать вашу ЧПУ навигацию.
Примеры
Так как pdoPage является частью pdoTools, в параметре &element у него сразу прописан сниппет pdoResources. Поэтому простой вызов сниппета выведет вам дочерние ресурсы:
Выводим все возможные документы сайта:
Включаем навигацию с пропуском страниц. Обратите внимание, что если страниц выходит меньше 7, то будет работать обычная навигация.
Активируем кэш на 30 минут:
Указываем максимальный лимит выборки. Теперь, какой бы limit не указал пользователь в url — все равно будет не больше 10 результатов на странице.
Вывод полей MIGX с разбитием на страницы, с использованием pdoPage:
Источник