アルファサード株式会社 代表取締役 野田 純生のブログ


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正規版対応については現在作成中です。

カテゴリ


このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の創業者であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ