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

質問全般・改善要望
kazuike
メンバー
メンバー
記事: 457
登録日時: 2009年8月12日(水) 12:53

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

投稿記事by kazuike » 2014年7月06日(日) 19:15

-----
MODXのバージョン:1.0.13J-r1
-----

先日「OnDocFormPrerenderでの使用するテンプレート切り替え(1.0.13J-r1)」
viewtopic.php?f=7&t=1407#p7639
は、
「$docObject->template」に値を入れればOKでした。

で解決したかと思い込んでいましたが、
この方法では、
テンプレート変数やManagerManagerがテンプレートの切替についてきてくれません。
(プラグインの実行順序を変えても同じです)

「使用テンプレート」欄は「SwitchDefaultTemplate」で設定したテンプレートに切り替わっているのですが、
テンプレート変数やManagerManagerは、グローバル設定の「デフォルトテンプレート」の設定のままです。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
kazuike
メンバー
メンバー
記事: 457
登録日時: 2009年8月12日(水) 12:53

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

投稿記事by kazuike » 2014年7月06日(日) 19:22

試しに

コード: 全て選択

$docObject->template = $dtmpl;
$content['template'] = $dtmpl;
としたところ、
ManagerManagerは、切替についてきてくれるようになりました。
しかし、
テンプレート変数は、グローバル設定のデフォルトテンプレートのままです。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
kazuike
メンバー
メンバー
記事: 457
登録日時: 2009年8月12日(水) 12:53

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

投稿記事by kazuike » 2014年7月06日(日) 20:19

とりいそぎ、
「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(^^;;
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
kazuike
メンバー
メンバー
記事: 457
登録日時: 2009年8月12日(水) 12:53

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

投稿記事by kazuike » 2014年7月06日(日) 20:22

ちなみに、
kazuike さんが書きました:試しに

コード: 全て選択

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

コード: 全て選択

$docObject['template'] = $dtmpl;
$content['template'] = $dtmpl;
に変えました。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
yama
管理人
記事: 2908
登録日時: 2009年7月29日(水) 02:50

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

投稿記事by yama » 2014年7月06日(日) 20:29

ありがとうございます。もしよければ修正済みのmutate_content.dynamic.phpをそのまま添付していただいてよいですか?差分を見て問題なさそうであればマージしてみます。
kazuike
メンバー
メンバー
記事: 457
登録日時: 2009年8月12日(水) 12:53

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

投稿記事by kazuike » 2014年7月06日(日) 20:56

ファイルを添付します。
精査したわけではありませんので、ご確認お願いします。

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

ManageManagerなんかは、ほとんど「OnDocFormRender」で良いような気もしますし…
添付ファイル
mutate_content.dynamic-OnDocFormPrerender.zip
(3.63 KiB) ダウンロード数: 94 回
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
kazuike
メンバー
メンバー
記事: 457
登録日時: 2009年8月12日(水) 12:53

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

投稿記事by kazuike » 2014年7月06日(日) 21:12

kazuike さんが書きました:ManageManagerなんかは、ほとんど「OnDocFormRender」で良いような気もしますし…

すみません。ちょっと訂正です。
ManagerManagerは、
現状ではJavascript(jQuery)で、生成された編集画面のHTMLを後からカスタマイズするものなので、「OnDocFormRender」でも…と思いましたが、
コアの吐き出す編集画面のHTML自体を、PHP内部で変更するためのイベントは、やはり必要ですね。
そういうプラグインを作っている人がいるかどうか知りませんが、
たとえば、スマホ用(レスポンシブ対応)の編集画面を作ろうと思えば、
こういったものが必須になりますね。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
yama
管理人
記事: 2908
登録日時: 2009年7月29日(水) 02:50

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

投稿記事by yama » 2014年7月07日(月) 15:39

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