ページ 11

OnDocFormPrerenderでの使用するテンプレート切り替え(コアやMM連動)

Posted: 2014年7月06日(日) 19:15
by kazuike
-----
MODXのバージョン:1.0.13J-r1
-----

先日「OnDocFormPrerenderでの使用するテンプレート切り替え(1.0.13J-r1)」
http://forum.modx.jp/viewtopic.php?f=7&t=1407#p7639
は、
「$docObject->template」に値を入れればOKでした。
で解決したかと思い込んでいましたが、
この方法では、
テンプレート変数やManagerManagerがテンプレートの切替についてきてくれません。
(プラグインの実行順序を変えても同じです)

「使用テンプレート」欄は「SwitchDefaultTemplate」で設定したテンプレートに切り替わっているのですが、
テンプレート変数やManagerManagerは、グローバル設定の「デフォルトテンプレート」の設定のままです。

Re: OnDocFormPrerenderでの使用するテンプレート切り替え(コアやMM連動)

Posted: 2014年7月06日(日) 19:22
by kazuike
試しに

コード: 全て選択

$docObject->template = $dtmpl;
$content['template'] = $dtmpl;
としたところ、
ManagerManagerは、切替についてきてくれるようになりました。
しかし、
テンプレート変数は、グローバル設定のデフォルトテンプレートのままです。

Re: OnDocFormPrerenderでの使用するテンプレート切り替え(コアやMM連動)

Posted: 2014年7月06日(日) 20:19
by kazuike
とりいそぎ、
「manager/actions/mutate_content.dynamic.php」の

コード: 全て選択

$content = $docObject; //Be compatible with old plugins
$modx->documentObject = & $content;

コード: 全て選択

// invoke OnDocFormPrerender event
$evtOut = $modx->invokeEvent('OnDocFormPrerender', array('id' => $id));
の部分を

コード: 全て選択

$docObject = mergeValues($initial_v,$db_v,$form_v);

コード: 全て選択

$tmplVars  = getTmplvars($id,$docObject['template'],$docgrp);
$docObject = $docObject + $tmplVars;
の間に移動して

コード: 全て選択

$docObject = mergeValues($initial_v,$db_v,$form_v);

$content = $docObject; //Be compatible with old plugins
$modx->documentObject = & $content;

// invoke OnDocFormPrerender event
$evtOut = $modx->invokeEvent('OnDocFormPrerender', array('id' => $id));

$tmplVars  = getTmplvars($id,$docObject['template'],$docgrp);
$docObject = $docObject + $tmplVars;
のようにしてみました。

これでなんとなく、私が使っている機能に関しては動いているような気もしますが…

「Quick Manager+」等は普段使っていないので…f(^^;;

Re: OnDocFormPrerenderでの使用するテンプレート切り替え(コアやMM連動)

Posted: 2014年7月06日(日) 20:22
by kazuike
ちなみに、
kazuike さんが書きました:試しに

コード: 全て選択

$docObject->template = $dtmpl;
$content['template'] = $dtmpl;
としたところ、
ManagerManagerは、切替についてきてくれるようになりました。
の部分は、

コード: 全て選択

$docObject['template'] = $dtmpl;
$content['template'] = $dtmpl;
に変えました。

Re: OnDocFormPrerenderでの使用するテンプレート切り替え(コアやMM連動)

Posted: 2014年7月06日(日) 20:29
by yama
ありがとうございます。もしよければ修正済みのmutate_content.dynamic.phpをそのまま添付していただいてよいですか?差分を見て問題なさそうであればマージしてみます。

Re: OnDocFormPrerenderでの使用するテンプレート切り替え(コアやMM連動)

Posted: 2014年7月06日(日) 20:56
by kazuike
ファイルを添付します。
精査したわけではありませんので、ご確認お願いします。

今回感じたことですが、
使用テンプレートやリソースタイプは、作成するリソースの種類(編集項目)を決める重要な要素ですし、
親リソースや所属グループは、権限に関わる重要な要素ですので、
「OnDocFormPrerender」は、そういうコントロールに使うことメインで良いような気がしました。

ManageManagerなんかは、ほとんど「OnDocFormRender」で良いような気もしますし…

Re: OnDocFormPrerenderでの使用するテンプレート切り替え(コアやMM連動)

Posted: 2014年7月06日(日) 21:12
by kazuike
kazuike さんが書きました:ManageManagerなんかは、ほとんど「OnDocFormRender」で良いような気もしますし…
すみません。ちょっと訂正です。
ManagerManagerは、
現状ではJavascript(jQuery)で、生成された編集画面のHTMLを後からカスタマイズするものなので、「OnDocFormRender」でも…と思いましたが、
コアの吐き出す編集画面のHTML自体を、PHP内部で変更するためのイベントは、やはり必要ですね。
そういうプラグインを作っている人がいるかどうか知りませんが、
たとえば、スマホ用(レスポンシブ対応)の編集画面を作ろうと思えば、
こういったものが必須になりますね。

Re: OnDocFormPrerenderでの使用するテンプレート切り替え(コアやMM連動)

Posted: 2014年7月07日(月) 15:39
by yama
mutate_content.dynamic.zip
(3.66 KiB) ダウンロード数: 457 回
OnDocFormPrerenderのタイミングなどを少し調整しました。これだとどうでしょう?
$modx->documentObjectとしてテンプレート変数の情報も合わせて参照できるようにしています。