MT4.0, CMSの変化とTransformerプラグイン。
公開日 : 2007-06-07 10:20:15
Movable Type4.0でCMSの内部はどう変わったか。
Movable Type4.0βでは管理画面のインターフェイスもデザインも大幅に刷新されているからTransformer系プラグインはそのままでは動かないだろうとは思っていたが「動かない」というレベルの話ではないようだ。
CMSのテンプレート自体も変わっているがそもそもCMSのテンプレートの書き方自体が大きく変わっている。
例えばBlogのIDを表示させるには、V3では「<TMPL_VAR NAME=BLOG_ID>」(HTML::Templateを使用)、V4では「<mt:var name="blog_id">」。
「Movable Type v4.0 (Athena): A Developer's Perspective (Movalog: Movable Type Tips & Tricks)」より(訳はかなりいい加減)
We had to resort to crude search and replace techniques that would search for a line of code and replace it with what we wanted.
This had the lovely effect of breaking plugins at even the most minor of changes. With v4.0, a series of DOM-like methods have been introduced (including getElementById,
getElementsByTagName so on and so forth). These methods allow us to easily find fields and markup within app templates and should, hopefully, mean that Transformer plugins are less prone to break. A great example of how these methods work is on the edit template page. New with 4.0, when a template contains an MTInclude tag, a link to the template is automatically shown in the sidebar.
これまでは粗雑な検索に頼って必要なコードの行を捜し求めて、それを私たちが欲しかったものに置き換えるテクニックを利用してきた。この方法には少しの変化でプラグインが動かなくなる問題があった。
V4.0では、一連のDOMのような方法を導入した(getElementById、getElementsByTagNameなどを含んでいる) 。
これらのメソッドは、私たちが(APP)CMSテンプレートの中から簡単にフィールドやとマークアップを見つけることを助けるだろう。
これはTransformer pluginsがより「壊れにくく」なったことを意味する。
これがどのように役立つかについての素晴らしい例が「テンプレート編集画面」にある。 新しくなった4.0のテンプレート編集画面ではテンプレートがMTIncludeタグを含むとき、テンプレートへのリンクがサイドバーで自動的に表示される。
CMSのテンプレートの記法は随分変わっているからv3系のTransformerプラグインは動かないだろうが、書き方自体は変わっているのだろうかということで簡単なプラグインを書いてテストしてみた。
MT->add_callback('MT::App::CMS::AppTemplateSource.preview_entry',10 ,$plugin, ¥&_AltPreview);
動かない。CMSのコードを調べてみる。
$ find . -name "*.pm"|xargs grep 'AppTemplateSource'
./MT/Compat/v3.pm: # $MT::CallbackAlias{'AppTemplateSource'} = 'template_source';
lib/MT/Compat/v3.pm
# Unnecessary to map since all the v3 legacy callbacks would fail
# anyway.
# $MT::CallbackAlias{'AppTemplateSource'} = 'template_source';
# $MT::CallbackAlias{'AppTemplateParam'} = 'template_param';
# $MT::CallbackAlias{'AppTemplateOutput'} = 'template_output';
つまりは「大切でない(コールバックのエイリアス)マッピング(何故ならv3のレガシーなコールバック達はおそらくうまく動かないだろうから」ということらしい(だからコメントアウトされたままだ)。
で、このコードを見てわかる通り「template_source,template_param,template_output」というコールバックが新たに加わっている。
つまり以下の通りv3からコールバック名が変更になる。但しそのまま入れ替えてもテンプレートも記法も変わっているから動かないだろう、ということ。
AppTemplateSource => template_source
AppTemplateParam => template_param
AppTemplateOutput => template_output
ということで、以下のようにすることでTransformerプラグインが動作することは確認した。
モノにもよるが移植は結構骨のある作業になりそうだ。
MT->add_callback('MT::App::CMS:: template_source.preview_entry',10 ,$plugin, ¥&_AltPreview);
時間があればもう少し突っ込んでみたい。