Я использую modX Revo с плагинами Логин и Бабель .Как было написано в руководстве Babel, я сделал 2 контекста для двух языков, использовал телевизионные параметры и написал плагин contextSwitch.Это в основном как плагин из примера в руководстве.После этого я подключил плагин к событию HandleRequest.
Все работает, кроме переключения контекста после входа в систему: если пользователь авторизован, modX показывает только главную страницу, остальные показывают страницу 404.Я попытался порыться в коде и обнаружил, что метод switchContext модели modx (строка 1843 из /core/model/modx/modx.class.php) возвращает false.
public function switchContext($contextKey, $reload = false) {
$switched= false;
if ($this->context->key != $contextKey) {
$switched= $this->_initContext($contextKey, $reload); // RETURNS FALSE
if ($switched) {
if (is_array($this->config)) {
$this->setPlaceholders($this->config, '+');
}
}
}
return $switched;
}
Это происходит, потому что контекстне может быть инициирован (метод _initContext того же класса в том же файле).Здесь контекст создается правильно, когда мы просим переключиться на него, но $ this-> context-> checkPolicy ('load') возвращает false (около 2169 строки того же файла).
protected function _initContext($contextKey, $regenerate = false) {
// HERE IS EVERYTHING ALLRIGHT
$initialized= false;
$oldContext = is_object($this->context) ? $this->context->get('key') : '';
if (isset($this->contexts[$contextKey])) {
$this->context= & $this->contexts[$contextKey];
} else {
$this->context= $this->newObject('modContext');
$this->context->_fields['key']= $contextKey;
}
if ($this->context) { //HERE TRUE
if (!$this->context->prepare((boolean) $regenerate)) { // HERE TRUE
$this->log(modX::LOG_LEVEL_ERROR, 'Could not prepare context: ' . $contextKey);
} else {
if ($this->context->checkPolicy('load')) { // HERE FALSE - MODX CAN'T DO IT
// .. SOME OTHER modX CODE
Так что после этого я перестал рыться в ядре.Может быть, кто-то уже видел нечто подобное или знает, что ядро modx Revo хорошо ответит, почему modx не может переключать контекст, когда пользователь вошел в систему?
Ps Я пытался использовать другое событие для плагина переключения контекста - но, конечно,это событие является наиболее правильным для плагина.И я подчеркиваю, что modx не может переключать контекст только тогда, когда пользователь вошел в систему!
ОБНОВЛЕНИЕ
Я попытался отредактировать некоторые разрешения.Но ничего не произошло (я снял деньги и переместил всех пользователей).Вот скриншот разрешений контекста (извините за неанглийский, однако это должно быть ясно):
ОБНОВЛЕНИЕ 2 Разрешения были неправильными: они должны быть всеми 9999 и "список, видгруз ".Но в то же время я не могу войти, пока я нахожусь во втором контексте, как раньше, я не мог.Теперь я попытался выяснить, является ли это той же самой проблемой или нет.
ОБНОВЛЕНИЕ 3 Вторая проблема с входом в систему заключается в том, что solvineg очень прост: в параметрах сниппета должен быть & contexts = web,eng