こんばんは。なんとか希望の動作をするものができたのでご報告します。
結局、OnBeforeDocFormSaveイベントとOnDocFormSaveイベントの間で’editedon’フィールドやテンプレート変数の更新処理がされているため、
あまりうまい方法が思いつかず、無駄なテンプレート変数なども増やしたくなかったのでグローバル変数を使って保持するようにしてみました。
以下が今回作ってみたプラグインになります。よろしければご利用ください。
インストール
1.ダウンロードしたファイル内の「assets」ディレクトリをMODxのトップディレクトリに転送
2.「phiEditedon」という名前のプラグインを作成
3.「プラグイン コード (php)」にダウンロードしたファイル内の「phieditedon.plugin.txt」の内容をコピー&ペースト
4.「プラグイン設定」に次のコードをコピー&ペースト
&updateTV=Update TV name;string;pe_update&editedonTV=Editedon TV name;string;pe_editedon
5.プラグインを「OnBeforeDocFormSave」イベントと「OnDocFormSave」イベントに登録
6.プラグインを保存
テンプレート変数の作成
1.「プラグイン設定」の「Update TV name」で設定した名前のテンプレート変数(初期設定では「pe_update」)を作成
2.「入力タイプ」を「DropDown List Menu」にして、「入力時のオプション値」に次のコードをコピー&ペースト
Auto==-1||Manual==0||Disable==1
3.「デフォルト値」に「-1」を入力して、テンプレート変数を保存
4.「プラグイン設定」の「Editedon TV name」で設定した名前のテンプレート変数(初期設定では「pe_editedon」)を作成
5.「入力タイプ」から「Date」を選び、テンプレート変数を保存
使い方
ドキュメントを保存すると、テンプレート変数の設定値に合わせてドキュメントの編集日時が更新されます。
Auto: 現在の日時をドキュメントの編集日時として更新。MODxの標準の動作と同等。
Manual: テンプレート変数Editedon TV nameで設定した日時をドキュメントの編集日時として更新。テンプレート変数Editedon TV nameが未設定の場合はAutoと同等。
Disable: 前回の編集日時をドキュメントの編集日時として更新。ドキュメントの新規作成時、複製時はAutoと同等。
なお、テンプレート変数の設定はドキュメントの保存のたびにリセットされます。
動作確認はMODx 0.9.6でしていますが、DBを操作するプラグインなのでバージョンが違う場合などには注意してください。