FaviconManager2 : FaviconManagerをMT4に対応させたよ

FaviconManager2.0b1.zip

以前のFaviconManagerプラグインとは別設計となり、互換性がありません。MT4beta4でのみ動作確認を行っております。ご注意ください。
また、(基本的にMT4が正式リリースされるまでは)ベータ版とさせていただきます。
MT4が正式にリリースされてから、再度調整や機能追加などを行い、リリースする予定です。

大きな違いは以下の点です。

Change Log

  • テンプレートを書き換える必要が無くなった
    • 以前のバージョンでは事前にテンプレートを書き換える処理を実行する必要がありましたが、その必要がなくなりました。
    • プラグインが有効な状態で再構築するだけで、自動的にHTMLファイルにfaviconへのリンクが追加されます。
    • プラグインをアンインストールした場合にも、テンプレートにゴミが残ったりしません。
  • MTのダイナミックパブリッシングに対応した
  • MT4のassets機能に対応した
    • urlの代わりに、「asset:N」(Nはassetのid)と指定することで、assetから画像を引っ張ってきます。ただ、assetのidをサクっと確認することが出来ないんですよね。。。
    • 管理画面上で一覧表示して選択するように出来ればよいのですが、現在のところ手が回ってませんすみません。

Tech Memo

管理画面へのリンクタグの追加部分では、ちょっと面白いtransformerを使っています。
管理画面のHTMLヘッダー部分はheaderテンプレートで記述されているのですが、この中で順不同で構わないlinkタグなどは、一度「html_head」変数に格納されてから出力されます。
さらに、「mtsetvarblock」タグ部分で「prepend」というアトリビュートが指定されていて、処理時点ですでに変数に値が格納されている場合には、上書きせずに、既存の内容に続けて追記するようになっています。

<mt:setvarblock name="html_head" prepend="1">

ですから、HTMLのヘッダー部分にlinkタグなどを追加したい場合、この「html_head」変数に追加したい内容を入れてあげるだけで、自動的にMTがマージしてくれる、というわけです。
今回は、template_sourceコールバックをフックして、setvarblockタグを含むテンプレートの断片を、直接headerテンプレートの先頭に追加してみました。

MT->add_callback('MT::App::CMS::template_source.header', 9, $plugin, \&_add_cmsfavicon);
sub _add_cmsfavicon {
    my ($eh, $app, $tmpl_ref) = @_;
    my $url = $plugin->get_favicon_url;
    my $add = <<"EOT";
<mt:setvarblock name="html_head" prepend="1">
    <link rel="shortcut icon" href="$url" />
</mt:setvarblock>
EOT
    $$tmpl_ref = $add . $$tmpl_ref;
}

これだけで、管理画面のHTMLヘッダ部分に任意の内容を追加できます。mt:varへの値の設定方法については、もっと上手いやり方もあると思います。
MT4のテンプレートは、非常に多くのsetvar、getvarなどの変数タグが使われていて最初は面食らいましたが、そのお陰でこういったハックの余地が多く提供されていると思うと、なんだかワクワクしてきますね。