Movable Type4で「年度別」アーカイブ。
公開日 : 2007-08-22 19:48:19
「Movable Typeな夏。」で書いたように、今週末に開発者向けカンファレンス(8月24日)とMovable Type 4 Hack-a-thon(8月25日)があって参加する予定なんだけど、色々忙しくてMT4をいぢくったりソース読む時間がないので、ちょっと助走というか頭の体操がてらに「年度別アーカイブ」が作れないかやってみた (&ProNetミーティングで質問したんだけど「ごにょごにょ...今度開発者向けMtgとかHack-a-thonとかありますので...」ってな回答だったので!)。
使い捨て気味のプログラムですがさらしておきますね。文字通り年度別アーカイブを作れるかどうかやってみよう! ってなことで書いたもの。IR系のウェブサイトなんかだと必須だもの。
MT4からは「年」アーカイブが作れる...ということは年度もできるかも!?
「デザイン」→「テンプレート」→「アーカイブテンプレート」→「ブログ記事リスト」で「新しいアーカイブマッピングを作成」、種類「年別」を選択。
コードは以下。エラー処理も再構築(スタティックなファイルの書き出し)も何もないし4月〜3月決めうち! だけど許してね。うまくいったら来週あたりプラグインになってるかも...なってるかな? なってるといいね(誰?)
#!/usr/bin/perl -w
my $MTDIR;
use strict;
BEGIN {
if ( $0 =~ m!(.*[/¥¥])! ) {
$MTDIR = $1;
} else {
$MTDIR = './';
}
unshift @INC, $MTDIR . './lib';
unshift @INC, $MTDIR . './extlib';
}
use MT;
use MT::TemplateMap;
use MT::Template;
my $mt = MT->new(Config => $MTDIR.'./mt-config.cgi');
use CGI;
my $q = new CGI;
my $at = 'Yearly';
my $year = $q->param('year');
my $blog_id = $q->param('blog_id');
my $start = $year.'040100000';
my $end = $year+1;
$end .='0331235959';
my $tmap = MT::TemplateMap->load(
{ blog_id => $blog_id,
archive_type => $at,
is_preferred => 1
},);
my $blog = MT::Blog->load({ id => $blog_id });
my $template = MT::Template->load({id => $tmap->template_id});
my $page_tmpl = $template->text;
my $ctx = MT::Template::Context->new;
$ctx->stash('blog', $blog);
$ctx->stash('blog_id', $blog_id);
$ctx->{current_archive_type} = $at;
$ctx->{archive_type} = $at;
$ctx->{current_timestamp} = $start;
$ctx->{current_timestamp_end} = $end;
my $build = MT::Builder->new;
my $tokens = $build->compile($ctx, $page_tmpl);
my $html = $build->build($ctx, $tokens);
print "content-type: text/html; charset=utf-8¥n¥n";
print $html;
http://localhost/mt/f_year.cgi?blog_id=1&year=2006
ってな具合にアクセスすると...出来てるっぽいな。
うまくいったら来週あたりプラグインになってるかも...なってるかな? なってるといいね(しつこい!?)