MT4Beta : ExtensibleArchivesを作成してみた雑感

mt4のプラグイン作成上の新機能として、ExtensibleArchivesというものがあります。
それで、試行錯誤しながら作ってみているのですが、どうにも難しくて、段々、自分の問題なのかMTの問題なのか分からなくなってきました。
とりあえず感じたことを書きます。非常に分かりづらい内容の上、実際のプラグインの書き方などの実践的な内容もありません。また、気をつけてコードを追ったつもりですが、やたらややこしいので、根本的に自分がとんでもなく間違った理解をしている可能性もあります。あまり興味のない方は読み飛ばすことをおすすめします。

ExtensibleArchivesというのは(この呼び方が正しいのかは知りません)、プラグインから独自のアーカイブの種類を作成するためのシステムです。現在のMT4beta3で、今までの月別やカテゴリー別のアーカイブに加えて、投稿者別や、カテゴリーごとの月別、週別などのアーカイブが作成できるようになっていますが、これらもプラグインによって実現されています。
さらに、プラグインを自作することによって、より豊富なアーカイブページを作成することが出来るわけです。投稿者ごとのカテゴリーアーカイブとか、カテゴリーごとの世紀別アーカイブとか好き勝手な形式のアーカイブを作成できるわけです。夢が広がりますね。

それで、今回練習がてら、エントリーのタイトルを基準にした英和辞書風アーカイブの作成に挑戦してみました。で、まあ、以下の理由によりうまくいきませんでした。うーん、アーカイブページの出力までは出来るんですけどね。

アーカイブの基本型が固定されている点

プラグインからExtensibleArchiveを作成する場合、事前に、アーカイブの基本型を日付基準、投稿者基準、カテゴリー基準、エントリー基準、の中から選ぶ必要があります。というか無理やり選ばされます。例えば、カテゴリー基準のアーカイブなら「category_based」という項目を有効にします。項目を選ばない場合、自動的に日付基準としての振る舞いをするようです。
そして、「MTArchiveNext」などの一部のテンプレートタグの振る舞いについては、この基本型から振る舞いが決定され、プラグイン側で動作を決めることが出来ないようです。
結果、自分が作ろうとしたアーカイブでは、MTArchiveNextの動作がまったく意図しないものになってしまいました。ずいぶん悪戦苦闘したのですが、いまだに対応できていません。やっぱり、プラグイン作成の手間がかかるようになっても良いから、基本型と異なるスタイルのアーカイブも作成できるようにするために、「non_based」とかそんなものを追加して欲しいですね。

ページの作成とアーカイブリストの作成で動作が非対称な点

プラグインの作成時に、いくつかのサブルーチンを登録する事になるのですが、これらは主に、「アーカイブページの再構築時」「MTArchivesなどのタグでのループ内」の二つの場合に呼び出されることになります。で、この二つの場合でのサブルーチンの呼ばれ方が、それぞれで違うので、非常にややこしいことになっています。
アーカイブを作成する場合に重要になる事の一つに、実際にこのアーカイブではファイルをいくつ出力するのか、ということがあります。
それで、出力するファイルの概要を決定するサブルーチンを、「archive_group_iter」という項目に指定するのですが、これは「MTArchives」から呼ばれるときにしか利用されません。実際のページのビルドのときは、「archive_file」という項目で指定する、出力するファイルのファイル名を決定するサブルーチンの実行結果を元に決定するようになっています。
これは非常に分かりづらいです。何か理由があったのかも分かりませんが、単なる設計ミスなのでは、という気がします。出来たら直して欲しいですねー。


というわけで、「英和辞書風アーカイブ」プラグインは現在絶賛未完成です。無念。