MovableTypeのプレビュー機能を改良するStylePreviewプラグイン(改良)。
公開日 : 2007-03-31 17:05:28
以前公開したものはテンプレートを正規表現で置換するというものだったのだが、
<$MTBlogName$>, <$MTBlogDescription$>, <$MTBlogURL$>, <$MTEntryTitle$>, <$MTEntryBody$>, <$MTEntryMore$>, <$MTEntryKeywords$>, <$MTEntryExcerpt$> の各テンプレートタグをそれぞれの内容に置き換えて表示確認をする。それだけ。それ以外のテンプレートタグは無視(削除)される。フィルター系のプラグインは効かない。
MTらしくないしちゃんと「Build」させたいということでlib:MT:App:CMS.pmを眺めていたら「ああ...なるほどなぁ」という感じ。やっぱりもう少しドキュメントを充実させて欲しい。こんどProNetミーティングというものに参加してみようと思っているのでそのあたりも伝えられれば。
テンプレート指定→build部分の処理は以下のような感じ。今回のはきちんとフィルター系のプラグインも動作する。
my $tmap = MT::TemplateMap->load(
{ blog_id => $blog_id,
archive_type => 'Individual',
is_preferred => 1
},);
# 優先度の高いエントリーアーカイブのテンプレートをロードする
my $template = MT::Template->load({id => $tmap->template_id});
my $preview_tmpl = $template->text;
my $entry = MT::Entry->new;
$entry->blog_id($blog_id);
# 要するに, 保存しない状態でMT::EntryオブジェクトをつくってBuildする
my $ctx = MT::Template::Context->new;
$ctx->stash('entry', $entry);
$ctx->stash('blog', $blog);
$ctx->stash('blog_id', $blog->id);
my $build = MT::Builder->new;
my $tokens = $build->compile($ctx, $preview_tmpl)
or return $app->error($app->translate(
"Parse error: [_1]", $build->errstr));
defined(my $html = $build->build($ctx, $tokens))
or return $app->error($app->translate(
"Build error: [_1]", $build->errstr));
エントリー編集画面から「確認」をクリックすると完全な状態でプレビュー画面が表示される。

* MT4対応についてはBeta4の時点での動作しか確認できていません。MT4正規版対応については現在作成中です。