PdoPage и ЧПУ на главной

Здравствуйте!
Помогите с плагином из документации

<?php
// Реагируем только на событие OnPageNotFound
if ($modx->event->name == 'OnPageNotFound') {
    // Определяем ключ запроса из настроек
    $req = $modx->getOption('request_param_alias');
    // Ловим нужный ключ страницы
    $pageVarKey = 'page';
    // Если в запросе повторяется наш шаблон "pageVarKey-page", то работаем дальше
    if (preg_match("#.*?({$pageVarKey}-(\d+))#", $_REQUEST[$req], $matches)) {
        // Отрезаем ЧПУ строку и получаем точный адрес текущей страницы
        $uri = str_replace($matches[1], '', $matches[0]);

        // Ищем страницу по этому адресу
        $id = 0;
        // Сначала как есть, со слешем на конце
        if (!$id = $modx->findResource($uri)) {
            // Если не находим - то пробуем отрезать слэш и ищем повторно
            $id = $modx->findResource(rtrim($uri, '/'));
        }

        // Если ресурс найден
        if ($id) {
            // Добавляем номер страницы в глобальные массивы, чтобы pdoPage их там увидел
            $_GET[$pageVarKey] = $_REQUEST[$pageVarKey] = $matches[2];
            // И загружаем эту страницу
            $modx->sendForward($id);
        }
        // Если ресурс не был найден - ничего не делаем, возможно запрос поймает другой плагин
    }
}
на всякий случай вызов

<div class="row justify-content-around">
{$_modx->runSnippet('!pdoPage', [
                    'parents' => 1,
                    'templates' => '4',
                    'useWeblinkUrl' => 1,
                    'limit' => 14,
                    'pageLinkScheme' => '[[+pageVarKey]]-[[+page]]',
                    'sortby' => 'id',
                    'sortdir' => 'DESC',
                    'includeTVs' => 'image',
                    'tpl' => '@FILE chunks/catalog/category.row.tpl'
                    'tplPageWrapper' => '@INLINE <nav aria-label="Page navigation example"><ul class="pagination pagination-template d-flex justify-content-center">[[+prev]][[+pages]][[+next]]</ul></nav>'
                    'tplPage' => '@INLINE <li class="page-item"><a href="[[+href]]" class="page-link">[[+pageNo]]</a></li>'
                    'tplPageActive' => '@INLINE <li class="page-item"><a href="[[+href]]" class="page-link active">[[+pageNo]]</a></li>'
                    'tplPagePrev' => '@INLINE <li class="page-item"><a href="[[+href]]" class="page-link"> <i class="fa fa-angle-left"></i></a></li>'
                    'tplPageNext' => '@INLINE <li class="page-item"><a href="[[+href]]" class="page-link"> <i class="fa fa-angle-right"></i></a></li>'
                    'tplPagePrevEmpty' => '@INLINE <li class="page-item"> </li>'
                    'tplPageNextEmpty' => '@INLINE <li class="page-item"> </li>'
                    'cache' => '1'
                    'cacheTime' => '23400'
                ])}
</div>
{'page.nav' | placeholder}
Всё работает на всех страницах, кроме главной. При переходе с главной на любую /page-№ «Страница не найдена». Как его переписать, чтобы работал на любых страницах?
Ксения
28 августа 2018, 16:38
modx.pro
606
0

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

Наумов Алексей
28 августа 2018, 16:52
+1
Вот тут
$uri = str_replace($matches[1], '', $matches[0]);
для главной страницы получается или пустая строка или слеш.
Ну и подозреваю, что findResource ее не находит.
В этом случае добавьте условие в код, что если строка пуста — то это главная страница ($id = 1).
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1