ページ 11

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

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

具体的には、プラグイン「SwitchDefaultTemplate」
http://www.hikidas.com/hikidas/modx_resource/modx_elements/SwitchDefaultTemplate.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;
のように変更して、
パラメータが変わった場合は、無視せず、処理を行うようにしました。
この変更による副作用があるかどうかはわかっていません。