Babel и переключение контекста.

Прошу помочь, есть мультиязычный сайт, babel + плагин переключения,
Все работает, но проблема в том, что если алиас ресурса начинается например с 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'));
    }
}

прошу помочь с кодом, или предложить альтернативу.
спасибо.
evgeniy dovgani
30 июня 2021, 10:32
modx.pro
2 097
0

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

evgeniy dovgani
30 июня 2021, 11:21
0
пробую этот плагин, тоже самое, если алиас начинается с 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']);
}
    evgeniy dovgani
    30 июня 2021, 15:29
    0
    дело было в htaccess
    RewriteRule ^(en\/|ua\/|de\/)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]
    так должно быть
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2