Как подсунуть другой ресурс при 404

Такая ситуация
Есть много контекстов, для примера: web, msk;
В контекста web структура:
Главная
    Блог
        Запись блога 1
в msk
Главная
Так вот. Если мы в контексте msk и переходим в блог то получаем закономерное 404.
Можно ли обработать это действие в событии onPageNotFound и подсунуть ресурс из дефолного контекста (web)?

Пока что настроил обработку поиска запрашиваемого ресурса в другом контексте.
<?php
    if ($modx->context->key === 'mgr' || $modx->event->name !== 'OnPageNotFound') return;
    
    $alias = $modx->context->getOption('request_param_alias', 'q');
    
    if (!isset($_REQUEST[$alias])) {return false;}
    
    $curUrl = strtok($_REQUEST[$alias], '?');
    
    $defaultCtx = $modx->getContext($modx->getOption('default_context'));
    
    if (key_exists($curUrl, $defaultCtx->aliasMap)) {
        $modx->resource = $modx->getObject('modResource', $defaultCtx->aliasMap[$curUrl]);
    }
Denis
01 сентября 2020, 13:14
modx.pro
480
0

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

Denis
01 сентября 2020, 14:49
0
Сделал иначе.
В сессию записывается текущий контекст.
Потом идёт редирект на дефолтный контекст.
Но так же повешено событие на onHandleRequest и если в сессии есть предыдущий контекст — то он переключает его туда.
Небольшая магия с очередью ивентов и всё работает как нужно)
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1