MT > プレビュー用テンプレートの切り替え

トップページ > MT > プレビュー用テンプレートの切り替え

 ブログの個別記事テンプレートが、PC用とスマフォ用で2つある場合など、複数のプレビューが必要な場合
への対応方法です。

 スカイアーク社さんのAltTemplatePreviewプラグインを使います。
http://www.skyarc.co.jp/engineerblog/entry/alttemplatepreview.html

 これを利用すると、エントリーの編集画面で下の方に

といったセレクトボックスが表示されるので、これでプレビューしたいテンプレートを選ぶことが出来ます。
非常に便利!です。

 ただ、このプラグイン、そのままでは自分の環境(MT5.14 + Perl 5.10.0)ではうまく動作しませんでした。
以下のような修正をしたところ、うまく動作しました。

116行目
       $_->is_preferred ($_->template_id == $preview_alt_tmpl);
       $_->is_preferred( ($_->template_id == $preview_alt_tmpl)? 1:0 );
に変更

128行目
       $_->is_preferred ($_->id == $orig_tmpl_map_id);
       $_->is_preferred( ($_->id == $orig_tmpl_map_id) ? 1:0 );
に変更

 これはperlのバージョンの問題なのでしょうか? ただ括弧をつけるだけでも大丈夫な気がしますが、、。よくわかりません。

 また、このプラグインは、一時的にパーマネントリンク対象のテンプレートを切り替えているので、再構築処理とプレビューでのテンプレート切り替え処理が重なると、再構築された記事のパーマネントリンクが別のテンプレートのものになってしまう危険性があるような、、、気がします。
 しかしながら、データベースをInnoDBにして、トランザクションをかければ、安全にプレビューを行うことが出来るようになるはず、です。トランザクションをかけるには、AltTemplatePreview.plファイルの
   # Change temporally
の前に
MT::Object->begin_work;
を追加

 最後の
   $html;
の前に
MT::Object->commit;
を追加すれば出来ます。(もちろん、テーブルのスキーマがMyISAMでは出来ないので注意。InnoDBでないとダメです。最新のMySQL 5.5などはデフォルトスキーマがInnoDBなので、MTが作り出すテーブルは最初からInnoDBなので大丈夫です)

 上記の修正を全部加えたものを用意したいのですが、このプラグインはスカイアーク社さんの著作権があり改修版の二次配布は出来ないみたいなので、差分ファイルのみあげておきます。差分ファイル

 使い方はオリジナルのAltTemplatePreview.plファイルと、パッチファイルpatch_file.patchを同じ
ディレクトリにおいておいて、
patch AltTemplatePreview.pl < patch_file.patch
とすればOKです。


※ちなみに、ですが、PowerCMSでは独自のプレビュー処理がオーバーライドしているので、このプラグインは動作しません。(PowerCMS 3.13ではそうでした) とはいえ、PowerCMSの中のExtFieldsプラグインだけ無効にしておけば、正しく動作するようです。

2013/3/7
最終更新:2013年03月07日 15:13