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
modx.pro
1
3 032
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
                +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= /». Или у меня не правильный ход мыслей?
                  Домен при этом не меняется.
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                11