К содержанию

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

Доброго времени суток. Продолжаю войну с переводами, предыдущую заметку решил оставить, так как по сути решение нашел, но оно не работает, а именно не переключаются контексты.
Что я имею:
Контекст по умолчанию web
— cultureKey — ru
— site_start — 1
— error_page — 1
Создал новый контекст en
— cultureKey — en
— site_start — 197
— error_page — 197

Далее, я уже даже прибегнул к тому, что в плагине на событие OnHandleRequest прописал принудительное
$_SESSION['lang'] = 'en';
$modx->switchContext('en');
$modx->setOption('cultureKey', 'en');
В теории при любой передаче параметра должен же переключиться контекст? Но у меня ничего не происходит… Вообще…
Я что то упустил? Контексты как то иначе переключаются? Буду крайне благодарен любой информации… 4е сутки веду войну…
Николай
Николай
23 сентября 2013, 20:22
modx.pro
11 344
Реклама

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

Max Skoryk
Max Skoryk Старожил
24 сентября 2013, 00:57
Так ведь можно же воспользоваться плагином отсюда. Уже напамять знаю :-).
Просто в контекстах создавать нужные настройки.
    Николай
    Николай Проверенный
    24 сентября 2013, 01:11
    Отлично!!! Такого я еще не находил, спасибо, попробую))
      Николай
      Николай Проверенный
      24 сентября 2013, 03:42
      Не сработало… Как минимум
        [[BabelLinks]]
      не выводит ничего, хотя сниппет установлен, контексты созданы, и прописаны…
        Николай
        Николай Проверенный
        24 сентября 2013, 03:53
        Мне кажется, там чего-то не хватает… В каментах люди пишут сообщения типа
        2. при обновлении MODx надо контролировать файлы index.php

        Спасибо!
        По index.php. А если он обновится в MODx? Веть скопированные файлы так же хорошо бы обновить до актуальной версии.
        Или уже очень поздно, и я плохо вижу, или в заметке на самом деле нету ничего касаемо копирования файлов…
        Николай
        Николай Проверенный
        24 сентября 2013, 05:56
        Я вообще перестал понимать происходящее… Если я в index.php заменю дефолтное значение
        /* Initialize the default 'web' context */
        $modx->initialize('web');
        На
        /* Initialize the default 'web' context */
        $modx->initialize('en');
        То $modx->switchContext('web'); и $modx->switchContext('en'); работает!
        Если же в index.php останется web то в плагине смена контекста не работает…

        ps
        if ($_SESSION['lang'] == "en") { 
            $modx->setOption('cultureKey', 'en'); 
        } else { 
            $modx->setOption('cultureKey', 'ru'); 
        }
        В office переводится все ок, на разных страницах разный язык, а вот ms2 как был русский так и остается…
          Max Skoryk
          Max Skoryk Старожил
          24 сентября 2013, 09:23
          Там совсем не нужно трогать index.php. Просто внимательно все сделать. Не забыть про .htaccess, и прочие мелочи. А еще есть логи ошибок сервака и самого MODX.
            Сергей Шлоков
            Сергей Шлоков Эксперт
            24 сентября 2013, 10:21
            Добавь в настройки контекста:
            base_url = "/"
            http_host = "en.yoursite.ru"
            site_url = "http://en.yoursite.ru/"
            Замени yoursite.ru на свой. Должно заработать.
              Николай
              Николай Проверенный
              24 сентября 2013, 12:55
              А я же могу сделать yoursite.ru/en/?
              В этих блоках мне надо указать en,ru?
              # The Friendly URLs part
              RewriteCond %{REQUEST_FILENAME} !-f
              RewriteCond %{REQUEST_FILENAME} !-d
              RewriteRule ^(en|ru)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]
                Сергей Шлоков
                Сергей Шлоков Эксперт
                24 сентября 2013, 13:36
                В чем проблема? Можешь. Если у тебя нет поддоменов, то создавай виртуальные каталоги-контейнеры (en/ru) — т.е. ресурсы со start_id обзывай en и ru (они должны быть контейнерами). Мой пример выше для поддоменов. Тогда тебе не нужны эти параметры.
                .httpaccess вообще не причем. MODX сам рулит.
              Павел Левин
              Павел Левин Проверенный
              01 октября 2013, 18:59
              Когда я делал мультиязычность на своём проекте с помощью babel я использовал следующие мануалы:
              Документация Babel на русском
              MODx REVO multilanguage Мультиязычность + Babel (способ настройки без изменения .htacces)

              Пример плагина: Switchlang
              <?php
              $lankey = substr($_SERVER['REQUEST_URI'],1,2);
              if($modx->context->get('key')!="mgr"){
                  //grab the current domain from the http_host option
                  switch ($lankey) {
                      case 'en':
                          //switch the context
                          $modx->switchContext('en');
                          //set the cultureKey
                          $modx->setOption('cultureKey','en');
                          break;
                      case 'es':
                          $modx->switchContext('es');
                          $modx->setOption('cultureKey', 'es');
                          break;
                      default:
                          // Set the default language/context here
                          $modx->switchContext('web');
                          $modx->setOption('cultureKey', 'ru');
                          break;
                  }
              }
              системное событие: OnHandleRequest

              Статья немного битая, но в целом всё понятно, понятно что
              </span><span class="pun">
              не должно быть в config.core.php и вообще его не нужно открывать)

              В зависимости от кол-ва требуемых языков, создаются папки, в моём случае это "en" и "es" т.е. английский и испанский (хочу заметить, что web — это русский язык).

              Всё отлично работает, также и с пакетом Article (дополнение для новостных сайтов, добавляет новую возможность "Создать->Создать Статьи здесь" и уже внутри создавать дочерние документы и с интерфейсом управления).
                Рустам С
                Рустам С Старожил
                21 марта 2015, 00:04
                Нашел еще интересный плагин для роутинга контекстов

                NEW CONTEXT ROUTING PLUGIN FOR MODX
                chsmedien.com/blog/2014/01/new-context-routing-plugin-for-modx

                (modx.com/extras/package/xrouting
                  nekto
                  nekto Старожил
                  18 мая 2015, 20:37
                  Здравствуйте! Никто не сталкивался с тем, что не выводится ссылка на активный контекст.
                  Само переключение контекстов прекрасно работает, вот ссылка на активный не выводится. Стандартный вызов: [[BabelLinks]]
                    nekto
                    nekto Старожил
                    18 мая 2015, 20:40
                    Разобрался, нужно было выставить параметр &showCurrent=`1`.
                      mukan120689
                      mukan120689 Старожил
                      31 июля 2017, 14:59
                      У меня несколько обратная ситуация, в оригинал версии не выводит переключатель на english, а когда захожу в ручную на английски url то все порядке. сталкивался кто с таким?
                    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    14