Re: Movable Type でメンテナンスしやすいテンプレート書き換え系のプラグインを書く
公開日 : 2016-02-15 17:43:43
こんなページができていて、いい傾向じゃないの(上から目線w)、と思ってまして。
ツッコミと言うわけではないですが、僕も最近色々思ってたことが触れられてたので。
ま、同じことなんですけど、何でこういうエントリを書いてるかというと、PerlでMTMLやHTMLを突っ込むのについついPerlのヒアドキュメントを使っちゃうことがあるからなのです。ひとつのファイルで完結するからどうしても手を抜いてそういう実装をしがちなのですが。
僕なら、テンプレートを tmpl/include に置いた上でこう書きます。
sub template_param_edit_entry {
my ( $cb, $app, $param, $tmpl ) = @_;
$app->{ plugin_template_path } =
File::Spec->catfile( MT->component( 'AwesomePlugin' )->path, 'tmpl' );
my ( $node, $attr, $include );
$node = $tmpl->getElementById( 'header_include' );
$attr = { name => 'include/edit_entry_header.tmpl' };
$include = $tmpl->createElement( 'include', $attr );
$tmpl->insertBefore( $include, $node );
$node = $tmpl->getElementById( 'title' );
$attr = { name => 'include/edit_entry_title.tmpl' };
$include = $tmpl->createElement( 'include', $attr );
$tmpl->insertBefore( $include, $node );
}
DOMに慣れている方なら直感的かと思うし。どっちがいいということではなくて、自分が理解しやすい方法で書けばいいと思います、ええ。
※どっちかと言えば各MTタグにidが振られてないとかそういうのが問題かと思う(一回バージョンアップでidが変わったことあるぜ!!)
追記:天野さんから指摘あり。
plugintemplatepath を使う方法は、複数のプラグインで同じことをしようとした時に片方が効かなくなる。
さらに追記
$app->{ plugin_template_path } =
File::Spec->catfile( MT->component( 'AwesomePlugin' )->path, 'tmpl' );
# の代わりに
$attr = { name => 'include/edit_entry_header.tmpl',
component => 'AwesomePlugin' };
とする。