Прописывать везде ссылки типа [[~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 контексте.
По вашему примеру реализовал плагин вида:
<?php if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') { return; } if ($_SERVER['REQUEST_URI'] != '/') { $uri = strtok(substr($_SERVER['REQUEST_URI'], 1), '?'); if (substr($uri,-1) != '/') { $uri .= '/'; } $resource = $modx->getObject('modResource', array('uri' => $uri)); if (!empty($resource)) { $ctx = $resource->get('context_key'); } } else { $ctx = 'web'; } if (!empty($ctx)) { if ($ctx != $modx->context->key){ $modx->switchContext($ctx); } } else { $error_id = intval($modx->getOption('error_page')); if ($error_id > 0) { $error_page = $modx->makeUrl($error_id); $resource = $modx->getObject('modResource', array('id' => $error_id)); $modx->sendRedirect($error_page); } }Теперь переключение контекстов работает исправно, но при заходе на любую страницу в лог пишется запись:Изначально плагин не имел условия внутри $error_id > 0, но тогда при заходе на несуществующую страницу в лог сыпалась схожая ошибка, но с id страницы 404.
Подскажите, пожалуйста, в чем причина засорения лога? Заранее спасибо.