Login и контексты (мультиязычность)

Я уже поднимал данную проблему, но не понимал в чем дело: modx.pro/help/5896/

Оказалось, что проблема в Сниппете Login:
Есть 2 контекста: web и en.
Если указываю в Login параметр &contexts=`web,en`, то после входа в контексте en, пользователя перебрасывает на русскую версию сайта, без возможности переключить язык. (т.е. если даже пройти по ссылке site.ru/en/, перекинет на site.ru/)

Если параметр убрать, то на /en/ входит без проблем, однако, если войти на контексте web, то сайт снова не пускает на английскую версию. Спасает только выход и вход на английской версии сайта.
Пока сделал костыль, заменил окно входа ссылками на страницы логина в каждом из контекстов.
Дмитрий
27 июля 2015, 00:22
modx.pro
1
1 799
0

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

Александр Жиленко
28 июля 2015, 17:17
+1
Попробуйте в обе формы авторизации помимо перечисления контекстов у сниппета добавить следующие скрытые поля в форме авторизации (в обоих контекстах ничего не меняя):
<input type="hidden" name="login_context" value="web">
<input type="hidden" name="add_contexts" value="en">

В итоге человек в обоих случаях получит основную авторизацию контекста web, а также дополнительно будет авторизованным в контексте en.
    Дмитрий
    28 июля 2015, 18:18
    0
    Похоже, что это работает! Огромное спасибо! Вы очень помогли.
    Как показывает практика, Англоговорящие сообщества не отличается терпимостью к подобным ошибкам.
    Впрочем, их понять можно, мы ведь тоже по корейским сайтам не ходим.
      Дмитрий
      29 июля 2015, 16:59
      0
      Простите, я ошибся. Мне пора привыкнуть к тому, что нельзя тестировать вход админской учеткой.
      Это помогает логиниться во всех контекстах сразу, однако не решает основную проблему редиректа.
        Дмитрий
        29 июля 2015, 17:03
        0
        Может быть что-нибудь не так с правами доступа к контекстам? Админскую учетку пускает в любой контекст. Может быть проблема в том что у простых пользователей нет прав на просмотр данного контекста? Хотя я никаких настроек прав не делал вообще, да и незарегистрированным пользователям контекст en доступен.
          Александр Жиленко
          29 июля 2015, 17:11
          +2
          Обязательно: Дано группу пользователей, которые имеют право просматривать контексты web и en. Пользователь должен быть добавлен в эту группу. Тогда все работает корректно.

          А вышеописанные скрытые поля нужны, чтобы MODX не пытался создать две переменные PHPSESSID в куках при работе с двумя контекстами одновременно в рамках одного доменного имени. Поскольку такая переменная в рамках одной сессии будет использована только одна.
            Дмитрий
            29 июля 2015, 18:10
            0
            Как же я мог так жестко протупить?)) Добавил строку в свою регистрацию, и все работает.)
            $user->joinGroup('Users','Member');
            Вопрос на засыпку: есть ли встроенный способ массово добавить всех пользователей в группу?)
              Воеводский Михаил
              29 июля 2015, 18:12
              +1
              $users = $modx->getCollection('modUser');
              foreach($users as $user) {
              	$user->joinGroup('Users','Member');
              }
                Дмитрий
                29 июля 2015, 18:19
                0
                Спасибо! Я чуть в mysql уже не полез))
                  Воеводский Михаил
                  29 июля 2015, 18:22
                  +1
                  В базу можно лезть только с очень простыми запросами — изменить, например, одно поле для множества записей. В остальных случаях это опасно, тк легко можно что-то упустить и поломать связи объектов.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        9