ページ 11

プラグインでテンプレートを切り替えても入力欄が切り替わらない

Posted: 2020年9月29日(火) 15:27
by kazuike
MODX1.0.23Jにおいて、
リソースやウェブリンクを新規作成する際、
イベント「OnDocFormPrerender」でプラグインを起動し、使用するテンプレートを切り替えても、
編集画面上のテンプレート変数は、デフォルトテンプレートのものになります。

具体的には、プラグイン「SwitchDefaultTemplate」
http://www.hikidas.com/hikidas/modx_res ... te.ja.html
を使用して、
新規作成時の使用テンプレートが、条件によって自動的に切り替わり、入力欄も切り替わるはずが、
上記のように、テンプレート変数が切り替わらないという現象が起こっています。

調べたところ、
manager/actions/document/mutate_content/functions.php
の関数「getTmplvars」が、
パラメータを変えて呼び出しても、2回目以降は常に無視するため、
テンプレート変数が切り替わらないということがわかりました。

対処法として、
manager/actions/document/mutate_content/functions.php
8行目~11行目の

コード: 全て選択

    static $tmplVars = null;
    if($tmplVars!==null) {
        return $tmplVars;
    }
の箇所が問題のようですので、
この箇所を

コード: 全て選択

    static $tmplVars = null;
    static $last_docid = null;
    static $last_template_id = null;
    static $last_docgrp = null;
    if($tmplVars!==null && $last_docid==$docid && $last_template_id==$template_id && $last_docgrp==$docgrp) {
        return $tmplVars;
    }
    $last_docid = $docid;
    $last_template_id = $template_id;
    $last_docgrp = $docgrp;
のように変更して、
パラメータが変わった場合は、無視せず、処理を行うようにしました。
この変更による副作用があるかどうかはわかっていません。

プラグインでテンプレートを切り替えても入力欄が切り替わらない

Posted: 2020年11月20日(金) 12:27
by mod_kks
プラグイン間の連携を含めて、OnDocFormPrerenderイベントの中で全て処理
するのは発火順序とか内部処理が複雑に絡むので無理があるのではないかと
考えています。この際、プラグイン側の刷新を考えてみるのはどうでしょう?

デフォルトのシステムでテンプレートを切り替えた時にsubmit送信を行なって
フレーム内のリロードが発生するのですが、条件に合致した場合だけロードの
タイミングで同じことを発生させる方法で処理してみるのはいかがでしょうか。

公開されているプラグインの内容を元にサンプルを作成してみました。
リロード発生で一瞬ちらつきが発生しますが、比較的健全な方法での切り替え
なので、連携も問題ないように思います。
$_REQUESTで取れていない内容は$docObjectから代用できるものは代用したり
しましたが、途中の判別についてはあまり精査していないので、確認が必要です
が、一応動作するようです。

プラグインでテンプレートを切り替えても入力欄が切り替わらない

Posted: 2021年4月25日(日) 15:51
by yama
確認遅くなりましたが、不具合なので後ほど修正します。
(mod_kksさんの解決方法のほうがスマートな感じですが)

プラグインでテンプレートを切り替えても入力欄が切り替わらない

Posted: 2021年4月25日(日) 22:57
by yama
https://github.com/modxcms-jp/evolution ... 22e137d011
修正しました。

でもよく考えたら、そもそもgetTmplvars()の引数は$docidだけであるべきのような気がします。
機会があれば調べてみます。