Разные результат [[!pdoPage]] и $modx->runSnippet
Вопрос.
Вызываю в шаблоне
Вызываю в снипете
Но для меня важно чтобы пагинация работала без перезагрузки страницы.
Спасибо за ранее если кто то поможет.
Вызываю в шаблоне
[[!pdoPage?
&parents=`[[*id]]`
&ajaxMode=`default`
&element=`msProducts`получаю как и ожидалось все товары этого родителя. Обратите внимание что вызываю с параметром &ajaxModeВызываю в снипете
$params['parents'] = $id;
$params['element'] = 'msProducts';
$params['ajaxMode'] = 'default';
$res = $modx->runSnippet('pdoPage', $params);
if ($res=='') {$res="Ничего не найдено";}Тоесть тот же сниппет с теми же параметрами и получаю — ничего не найдено! Стоит заккоментировать строку $params['ajaxMode'] = 'default'; и сразу находятся все товары.Но для меня важно чтобы пагинация работала без перезагрузки страницы.
Спасибо за ранее если кто то поможет.
Техническая поддержка MODX
Сайт лежит, тормозит или остался без разработчика?
Переезд с MODX 2 на 3, PHP 7 на 8, скорость и безопасность. Поддержка со сроками и ответственностью, а не совет в чате.
Подробнее
Реклама
Комментарии: 5
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Вот относительно моей ситуации.
Есть страница, в шаблоне которой есть div#result
Попадая на нее в первый раз внутри дива лежит вызов pdoPage, который выводит ну скажем 1 товар используя msProducts и пагинацию
Попадаем на страницу и все отлично.
На странице есть ссылки, позволяющие отсортировать результаты и это происходит через JQuery.post
При клике на ссылку считываем из нее параметры, передаем их в сниппет и там через switch выбираем что запустить и что вернуть.
К примеру так
при клике на ссылку получаем из нее id текущего ресурса и «указание» что делать и ajax ом передаем без перезагрузки на эту же страницу.
На странице есть снипет который ловит ajax запросы, получает значение и через свитч вызывает тот или иной сниппет с нужными параметрами.
К примеру так
Тоесть получили с сылки значение show_price_down и вызвали сниппет pdoPage с настройками, которые вернут нам товары, отсортированные по убыванию цены.
Мой сниппет возвращает $res как строку.
В ней лежит код выводящий товары.
И этот код заменяет собой содержимое div#result
В случае если работать без pdoPage все работает чудно. Я задаю ссылкам нужные мне значения атрибутов, ловлю их в сниппете. вызываю либо msProducts или pdoResorces с нужными настройками, передаваемыми в массиве $params и все работает как часики. Но без пагинации.
Вызов pdoPage вызывает сложности.
Пагинация по умолчанию выводится в плейсхолдер [[!+page.nav]]
Если я указываю его за пределами div#result то пагинация корректно выводится только в первый заход на страницу, что логично. Когда я через аякс меняю выборку и вывожу уже не 100 товаров а 5, то я отлично переписываю содержимое div#result новыми пятью товарам, а строка с пагинацей остается не изменной. Она ведь за пределами контейнера и не сменилась при аякс запросе.
Вношу плейсхолдер [[!+page.nav]] внутрь контейнера и ожидаемый результат. При аякс запросе пагинация просто исчезает. Что логично ведь она не содержится в переменной $res, в которой лежит результат отработки вызова снипета pdoPage. Делаю свой снипет на основе pdoPage и в return кроме отработки снипета методом конкатенации добавляю значение переменной $pagination в которой как раз и лежит код пагинации. Почти радуюсь ибо теперь с каждый аякс запросом моим возвращаются и товары и новая пагинация. Чудно! НО.
При переходе по пагинации начинается вполне прогнозируемый сбой.
Ведь URL не изменяется когда я получаю данные через аякс и страница называется www.site.ru/collection независимо от того выведео у меня сейчас все 100 товаров коллекции или 5, которые отобраны по аякс запросу которые есть на складе. И стоит перейти по пагинации я попадаю на URL типа www.site.ru/collection?page=2
То есть пагинация идет по гет запросу и я вижу соверщенно не нужный мне результат. Я вижу вторую страницу не товаров которыя я отобрал а вторую страницу ВСЕХ товаров.
Надеюсь я понятно поясняю, простите за длину.
А вот попытка передать параметр ajaxMode при вызове снипета pdoPage внутри моего снипета приводит к тому, что он ничего не находит. Стоит убрать указание параметра ajaxMode и все работает чудно, но приводит к ошибкам указанным выше. Я вижу по коду снипета pdoPage что при передаче значения в него ajaxMode он просто вызывает пустой return? но пока не могу понять как с этим бороться.
Как сделать чтобы на одном URL менялось содержимое тега div#result по моему запросу а пагинация перемещала по отобранным результатам.
Спасибо всем, кто хотя бы прочел это до конца.
Мне кажется тут проще свой вариант написать с пагинацией, чем переделывать pdoPage.