プラグインLoginおよびBabelで modX Revo を使用しています。Babel のマニュアルに書かれているように、2 つの言語用に 2 つのコンテキストを作成し、TV パラメータを使用し、contextSwitch プラグインを作成しました。ほとんどの場合、マニュアルの例のプラグインに似ています。その後、イベントHandleRequestにプラグインを配置しました。
ログイン後のコンテキストの切り替え以外はすべて機能しています。ユーザーが承認されている場合、modX はメイン ページのみを表示し、他のページは 404 ページを表示します。コードを調べてみたところ、モデル modx のメソッド switchContext (/core/model/modx/modx.class.php の 1843 行目) が 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 がコンテキストを切り替えることができない理由に答えるのに良い modx Revo コアを知っていますか?
Ps コンテキスト スイッチ プラグインに別のイベントを使用しようとしましたが、もちろん、このイベントはプラグインに最も適しています。そして、ユーザーがログインしている間だけ modx がコンテキストを切り替えることができないことを強調しています!
アップデート
いくつかの権限を編集しようとしました。しかし、何も起こりませんでした (私は現金を清算し、すべてのユーザーを再ログインしました)。これはコンテキスト権限のスクリーンショットです(英語以外の人には申し訳ありませんが、明確にする必要があります):
UPDATE 2 パーミッションが間違っていました: それらはすべて 9999 で、"list, veiw, load" でなければなりません。しかし、同時に、以前と同じように2番目のコンテキストにいる間はログインできません。今、私はそれが同じ問題かどうかを調べようとしました。
更新 3
ログインに関する 2 番目の問題は非常に簡単に解決できます。スニペット パラメータには &contexts= が必要です。web,eng