Movable Type Hack-a-thon に参加してきましたよ

  • 投稿日:
  • by

ども、MT4i の中の人です。本日(もう昨日になっちゃた)シックス・アパート株式会社にて開催された、Movable Type Hack-a-thon に参加してきました。のでその感想などなど。

10時開場ということだったので、9時半には入ろうと思っていたのですが、起きたらなんと8時45分!しかも前の晩に風呂入らないで寝ちゃったからシャワー浴びなきゃだし!ということで、会場入りしたのは10時でした。しかし、まだまだ全然人が集まってなかったので一安心。:-)

で、この日は何をやろうかと考えていて、結局俺にはこれしかないんだからと、MT4i の Trac に残っているチケットを片っ端からやっつけていこうと思ったんですけど、そのことを前日に社内の IRC で喋ったところ、「カスタムフィールド対応!」との声が。正直、カスタムフィールドには全然興味がなかったので、対応するつもりはさらさらなかったんですけど、それ言われて色々と思いを巡らせてみると、4.1 の目玉機能であるカスタムフィールドに対応するのは 4.1 対応の第1歩だなと。インパクトもありますしね。というわけで、まずはカスタムフィールド対応、でも無理そうだったらすぐあきらめよう、という心構えで臨みました。

会場入りしたら、まずは MT4.1 のダウンロードから。そうですまだ触ってませんでした。で、コード読んだり色々といじってみたんですが、どうもうまくない。カスタムフィールドの値は meta というカラムに入ってくるんですけど、これの取得の仕方が良く分からない。吉松さんに聞いたりして、CustomFields::Util::get_meta というメソッドは見つけたんだけれど、use CustomFields::Util; しても見つからないと言われる。 use MT; してみたらと大幅に書き換えてみたけれどダメ。一体全体どうしたらと、昼食後も悩んでいたんだけれど、ふと、直接 use lib 'addons/Commercial.pack/lib' しちゃえば良いことに気づきました。気づいてしまえばどうってことなかったりします。

実際にどんなコード書いたかはチェンジセット見てもらえばわかるんですが、簡単に説明しておくと、

my $packs = $mt->find_addons('pack');
for my $pack (@{$packs}){
    push @INC, $pack->{path};
}

まずは上記コードで Commercial.pack の lib を @INC に追加します。find_addons() で addon の一覧が帰ってくるので、各 pack の {path} を @INC に push しています。で、

require CustomFields::Util;
my $meta = CustomFields::Util::get_meta($obj);

meta 情報を取得します。CustomFields::Util; を use でなく require しているのは、単に use だと上記 @INC への path 追加前に読もうとしてエラーになってしまうためです。そして、

for my $cf (keys %$cfs) {
    $template->param('ENTRY_'.$cf => encode("shiftjis",decode("utf8", $cfs->{$cf})));
}

取得した meta 情報を Template に渡しています。

今日の作業では、個別記事ページにて「種類」が「テキスト」のカスタムフィールドについて、表示することができるようになりました。ただし、カスタムフィールドの「種類」は他のものもありますし、ブログ記事でなくカテゴリーやフォルダにも追加できるし、更には MT4i にて記事投稿する際に入力させるのか、させるならどうやって?とか、問題は山積み。どこまでやるかはまだ考えてないですが、ぼちぼちやっていこうと思っています。

そんなこんなで、最後には今日の成果を発表することができたし、初めての Hack-a-thon への参加としては、上々だったのではないかと思います。自宅では子ども3人に囲まれてなかなかコーディングの時間がとれませんし、今後も Hack-a-thon には積極的に参加していきたいと思います。何より、困った時に質問できる人がすぐそばにいてくれるのが最高ですw