Прописывать везде ссылки типа [[~30 &context=`catalog`]] не хочется, да и не всегда возможно, поэтому я написал плагинчик switchContext на событие OnHandleRequest, который сам переключает контекст, если нужной страницы нет в текущем контексте:
<?php if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') { return; } if ($_SERVER['REQUEST_URI'] != '/') { $uri = substr($_SERVER['REQUEST_URI'],1); if (substr($uri,-5) != '.html' && substr($uri,-1) != '/') { $uri .= '/'; } $resource = $modx->getObject('modResource', array('uri' => $uri)); if (!empty($resource)) { $ctx = $resource->get('context_key'); } else{ return ''; } } else { $ctx = 'web'; } if ($ctx != $modx->context->key){ $modx->switchContext($ctx); }
Теперь я прописываю ссылки так: [[~31]], а если надо переключить контекст, плагин сам сделает всю работу. G+
На сайте все адреса представлены в виде site.ru/name/ (со '/' на конце).
Страница 404 находится в отличном от web контексте.
По вашему примеру реализовал плагин вида:
Теперь переключение контекстов работает исправно, но при заходе на любую страницу в лог пишется запись:
Изначально плагин не имел условия внутри $error_id > 0, но тогда при заходе на несуществующую страницу в лог сыпалась схожая ошибка, но с id страницы 404.
Подскажите, пожалуйста, в чем причина засорения лога? Заранее спасибо.