Babel и переключение контекста.
Прошу помочь, есть мультиязычный сайт, babel + плагин переключения,
Все работает, но проблема в том, что если алиас ресурса начинается например с de (например derevnya) — он переключает на контекст de — вместо того что бы вывести страницу с главного контекста.
прошу помочь с кодом, или предложить альтернативу.
спасибо.
Все работает, но проблема в том, что если алиас ресурса начинается например с de (например derevnya) — он переключает на контекст de — вместо того что бы вывести страницу с главного контекста.
if ($modx->event->name == 'OnHandleRequest') {
// global referer;
if (!isset($_COOKIE['gl_refer']) || !strlen($_COOKIE['gl_refer'])) {
if (!strlen($_SERVER['HTTP_REFERER'])) setcookie('gl_refer', ' ', time()+31536000);
else setcookie('gl_refer', $_SERVER['HTTP_REFERER'], time()+31536000);
}
// end global referer;
if ($modx->context->get('key') == 'mgr') {return;}
if (preg_match('/^\/en\//i', $_SERVER['REQUEST_URI'])) {
$modx->switchContext('en');
$context = 'en';
$uri = preg_replace('/^\/en\//i', '', $_SERVER['REQUEST_URI']);
} else if (preg_match('/^\/ua\//i', $_SERVER['REQUEST_URI'])) {
$modx->switchContext('ua');
$context = 'ua';
$uri = preg_replace('/^\/ua\//i', '', $_SERVER['REQUEST_URI']);
}
else if (preg_match('/^\/de\//i', $_SERVER['REQUEST_URI'])) {
$modx->switchContext('de');
$context = 'de';
$uri = preg_replace('/^\/de\//i', '', $_SERVER['REQUEST_URI']);
}
else if (preg_match('/^\/fr\//i', $_SERVER['REQUEST_URI'])) {
$modx->switchContext('fr');
$context = 'fr';
$uri = preg_replace('/^\/fr\//i', '', $_SERVER['REQUEST_URI']);
}
else if (preg_match('/^\/cn\//i', $_SERVER['REQUEST_URI'])) {
$modx->switchContext('cn');
$context = 'cn';
$uri = preg_replace('/^\/cn\//i', '', $_SERVER['REQUEST_URI']);
}
else if (preg_match('/^\/it\//i', $_SERVER['REQUEST_URI'])) {
$modx->switchContext('it');
$context = 'it';
$uri = preg_replace('/^\/it\//i', '', $_SERVER['REQUEST_URI']);
}
else if (preg_match('/^\/es\//i', $_SERVER['REQUEST_URI'])) {
$modx->switchContext('es');
$context = 'es';
$uri = preg_replace('/^\/es\//i', '', $_SERVER['REQUEST_URI']);
}
else if (preg_match('/^\/pt\//i', $_SERVER['REQUEST_URI'])) {
$modx->switchContext('pt');
$context = 'pt';
$uri = preg_replace('/^\/pt\//i', '', $_SERVER['REQUEST_URI']);
}
else {
$context = 'web';
$uri = preg_replace('/^\/ru\//i', '', $_SERVER['REQUEST_URI']);
}
if (strpos($uri, "?")) $uri = substr($uri,0,strpos($uri, "?"));
if ($res = $modx->getObject('modResource', array('context_key' => $context, 'uri' => $uri))) {
$modx->sendForward($res->get('id'));
}
}
прошу помочь с кодом, или предложить альтернативу.
спасибо.
Комментарии: 2
пробую этот плагин, тоже самое, если алиас начинается с de — то он переключается.
<?php
# OnHandleRequest
if($modx->context->get('key') != "mgr"){
/* grab the current langauge from the cultureKey request var */
switch ($_REQUEST['cultureKey']) {
case "de":
/* switch the context */
$modx->switchContext('de');
break;
case 'en':
/* switch the context */
$modx->switchContext('en');
break;
default:
/* Set the default context here */
$modx->switchContext('web');
break;
}
/* unset GET var to avoid
* appending cultureKey=xy to URLs by other components */
unset($_GET['cultureKey']);
}
дело было в htaccess
RewriteRule ^(en\/|ua\/|de\/)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]
так должно быть
RewriteRule ^(en\/|ua\/|de\/)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]
так должно быть
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.