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>
Евгений Лебедев
10 июня 2017, 16:17
1
1 186
0

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

Павел Романов
10 июня 2017, 19:31
0
А так?
<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>
    Евгений Лебедев
    10 июня 2017, 19:38
    0
    Так же… ничего не поменялось. На всякий случай кеш MODx сбросил и кеш браузера тоже. Но не работает. ответ пустой приходит после запроса. Там на картинке видно… прикрепил к посту.
Евгений Лебедев
11 июня 2017, 18:14
0
Иду в файл assets/components/pdotools/connector.php, к которому происходит запрос ajax.

В результате переменная $_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);
}
Игорь
03 декабря 2018, 19:25
0
Автор как-то решил этот глюк? У меня что-то подобное тоже нарисовалось… :(
Pavel Kravchuk
12 января 2019, 21:40
0
Такая же проблема у меня нарисовалась.Использую 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, сайт мультиязычный
Pavel Kravchuk
14 января 2019, 20:19
0
немного еще провел тестов, оказывается в админку входить не обязательно, достаточно зайти на страницу входа в админку site_name/manager/ и после этого возвращаешься обратно, и пагинация работает. Может кто то подскажет куда копать?
    Евгений Шеронов
    14 января 2019, 20:37
    +1
    Проблемы могут быть с куками, с доменом, который используется для выставления cookie, с контекстом, если они используются и может с правами на запись в сессию, может вообще таблица сессий переполнена и в базе данных нет места для записи (но это почти фантастика).

    Начните проверять cookie, адрес страницы выставления, и если в браузере запрещены куки, то и сессии работать не должны.
Pavel Kravchuk
14 января 2019, 20:36
0
Еще покопавшись обнаружил, что при очистки сессий браузера создается одна переменная PHPSESSID, которая постоянно меняется(при перезагрузке страницы или нажатии кнопок пагинации), но когда я захожу в админку /manager/ добавляется еще одна переменная PHPSESSID и значения их больше не меняются. Может это как то влияет на работу AJAX пагинации?
Pavel Kravchuk
14 января 2019, 20:58
0
Похоже понял в чем проблема. Поскольку сайт мультидоменный, сессия создается на другом контексте WEB (site_name/en/), хотя нахожусь в секции RU (site_name/). Как можно решить данную проблему?
    Евгений Шеронов
    15 января 2019, 15:33
    +1
    Настройка session_cookie_domain или session_cookie_path.
    В настройки контекстов можете их тоже добавить.

    Обычно как раз проблемы тогда, когда основной site_url(base_url) для WEB имеет какую-то вложенность, а в других контекстах нет. Поэтому настройки сессий тоже нужно править)
      Pavel Kravchuk
      15 января 2019, 18:10
      0
      Благодарствую. Действительноб web констекст имеет «base_url= /en/».
      Я установил пока «session_cookie_path= /» для контекста web и вроде все правильно работает. НО, в принципе это немного не корректно т.к. для русского контекста параметр «session_cookie_path= /» и он не работает, все равно PHPSESSID = /en/, хотя «base_url= /». Или у меня не правильный ход мыслей?
      Домен при этом не меняется.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.