Разные результат [[!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'; и сразу находятся все товары.Но для меня важно чтобы пагинация работала без перезагрузки страницы.
Спасибо за ранее если кто то поможет.
Комментарии: 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.