pdoPage Не работает ajax пагинация по кнопке
Для вывода документов использую pdoPage. При нажатии на кнопку, чтобы подгрузить следующие документы получаю пустой ответ. При этом в Crome в большинстве случаев срабатывает. А в Firefox и пробовал в Edge, не работает.
<div class="items">
<div id="pdopage">
<div class="rows">
[[!pdoPage?
&parents=`[[*id]]`
&ajaxMode=`button`
&tpl=`tplItem`
&sortby=`menuindex`
&sortdir=`DESC`
&includeTVs=`image,file`
&idx=`1`
&limit=`5`
&processTVs=`0`
&prepareTVs=`0`
&sortby=`{"publishedon":"DESC"}`
]]
</div>
[[!+page.nav]]
</div>
</div>
Комментарии: 11
А так?
<div class="items">
<div id="pdopage">
[[!+page.nav]]
<div class="rows">
[[!pdoPage?
&ajaxMode=`button`
&tpl=`tplItem`
&includeTVs=`image,file`
&prepareTVs=`image,file`
&idx=`1`
&limit=`5`
&sortby=`publishedon`
]]
</div>
</div>
</div>
Так же… ничего не поменялось. На всякий случай кеш MODx сбросил и кеш браузера тоже. Но не работает. ответ пустой приходит после запроса. Там на картинке видно… прикрепил к посту.
Иду в файл assets/components/pdotools/connector.php, к которому происходит запрос ajax.
В результате переменная $_SESSION['pdoPage'][$_REQUEST['hash']] и без нее не идет запуск сниппета. Да и вообще получается сессии $_SESSION['pdoPage'] не существует. Где она должна создаваться?
Причем $_SESSION['pdoPage'] существует, если работать в Chrome. В firefox не работает.
В результате переменная $_SESSION['pdoPage'][$_REQUEST['hash']] и без нее не идет запуск сниппета. Да и вообще получается сессии $_SESSION['pdoPage'] не существует. Где она должна создаваться?
Причем $_SESSION['pdoPage'] существует, если работать в Chrome. В firefox не работает.
<?php
/**@var modX $modx */
define('MODX_API_MODE', true);
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php';
$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');
// Switch context if needed
if (!empty($_REQUEST['pageId'])) {
if ($resource = $modx->getObject('modResource', (int)$_REQUEST['pageId'])) {
if ($resource->get('context_key') != 'web') {
$modx->switchContext($resource->get('context_key'));
}
$modx->resource = $resource;
}
}
echo $_SESSION['pdoPage'][$_REQUEST['hash']];
// Run snippet
if (!empty($_REQUEST['hash']) && !empty($_SESSION['pdoPage'][$_REQUEST['hash']])) {
$scriptProperties = $_SESSION['pdoPage'][$_REQUEST['hash']];
$_GET = $_POST;
// For ClientConfig and other similar plugins
$modx->invokeEvent('OnHandleRequest');
$modx->runSnippet('pdoPage', $scriptProperties);
}
Автор как-то решил этот глюк? У меня что-то подобное тоже нарисовалось… :(
Такая же проблема у меня нарисовалась.Использую ajaxMode=`default`
При нажатии на кнопки пагинации, ajax запрос возвращается пустым (Status Code: 200 OK).
$_SESSION['pdoPage'][$_REQUEST['hash']] так же пустая в connector.php при ajax запросе, хотя в pdopage.class.php сессия устанавливается при загрузке страницы. Эта проблема возикает только у анонимных пользователей, только входишь в админку, сессия $_SESSION['pdoPage'] создается автоматически и все работает, пока не выйдешь из админки и не очистишь все куки и сессии в браузере.
Пробовал распечатать все сессии в connector.php при ajax запросе, в отладчике видно только массив modx.user.0.resourceGroups и modx.user.0.attributes т.е. похоже что MODx без проблем сохраняетсвои сессии.
Подкажите как решить данную проблему? Куда копать?
Использую MODx 2.7.0, pdoTools 2.12.0-pl, сайт мультиязычный
При нажатии на кнопки пагинации, ajax запрос возвращается пустым (Status Code: 200 OK).
$_SESSION['pdoPage'][$_REQUEST['hash']] так же пустая в connector.php при ajax запросе, хотя в pdopage.class.php сессия устанавливается при загрузке страницы. Эта проблема возикает только у анонимных пользователей, только входишь в админку, сессия $_SESSION['pdoPage'] создается автоматически и все работает, пока не выйдешь из админки и не очистишь все куки и сессии в браузере.
Пробовал распечатать все сессии в connector.php при ajax запросе, в отладчике видно только массив modx.user.0.resourceGroups и modx.user.0.attributes т.е. похоже что MODx без проблем сохраняетсвои сессии.
Подкажите как решить данную проблему? Куда копать?
Использую MODx 2.7.0, pdoTools 2.12.0-pl, сайт мультиязычный
немного еще провел тестов, оказывается в админку входить не обязательно, достаточно зайти на страницу входа в админку site_name/manager/ и после этого возвращаешься обратно, и пагинация работает. Может кто то подскажет куда копать?
Проблемы могут быть с куками, с доменом, который используется для выставления cookie, с контекстом, если они используются и может с правами на запись в сессию, может вообще таблица сессий переполнена и в базе данных нет места для записи (но это почти фантастика).
Начните проверять cookie, адрес страницы выставления, и если в браузере запрещены куки, то и сессии работать не должны.
Начните проверять cookie, адрес страницы выставления, и если в браузере запрещены куки, то и сессии работать не должны.
Еще покопавшись обнаружил, что при очистки сессий браузера создается одна переменная PHPSESSID, которая постоянно меняется(при перезагрузке страницы или нажатии кнопок пагинации), но когда я захожу в админку /manager/ добавляется еще одна переменная PHPSESSID и значения их больше не меняются. Может это как то влияет на работу AJAX пагинации?
Похоже понял в чем проблема. Поскольку сайт мультидоменный, сессия создается на другом контексте WEB (site_name/en/), хотя нахожусь в секции RU (site_name/). Как можно решить данную проблему?
Настройка session_cookie_domain или session_cookie_path.
В настройки контекстов можете их тоже добавить.
Обычно как раз проблемы тогда, когда основной site_url(base_url) для WEB имеет какую-то вложенность, а в других контекстах нет. Поэтому настройки сессий тоже нужно править)
В настройки контекстов можете их тоже добавить.
Обычно как раз проблемы тогда, когда основной site_url(base_url) для WEB имеет какую-то вложенность, а в других контекстах нет. Поэтому настройки сессий тоже нужно править)
Благодарствую. Действительноб web констекст имеет «base_url= /en/».
Я установил пока «session_cookie_path= /» для контекста web и вроде все правильно работает. НО, в принципе это немного не корректно т.к. для русского контекста параметр «session_cookie_path= /» и он не работает, все равно PHPSESSID = /en/, хотя «base_url= /». Или у меня не правильный ход мыслей?
Домен при этом не меняется.
Я установил пока «session_cookie_path= /» для контекста web и вроде все правильно работает. НО, в принципе это немного не корректно т.к. для русского контекста параметр «session_cookie_path= /» и он не работает, все равно PHPSESSID = /en/, хотя «base_url= /». Или у меня не правильный ход мыслей?
Домен при этом не меняется.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.