チャレンジ! Movable TypeをCMSとして使ってみよう!(第5回 head要素の中身を作る/グローバルナビゲーションを作る)
またまた遅くなりましたが、フリーランスWebデザイナー・黒野明子さんの gihyo.jp で Movable Type の連載第5回が公開されています。
チャレンジ! Movable TypeをCMSとして使ってみよう!- 第5回 head要素の中身を作る/グローバルナビゲーションを作る
第5回は「head要素の中身を作る/グローバルナビゲーションを作る」です。
今回は、テンプレートモジュールを利用したキーワードの meta 要素の keywords への反映、カスタムフィールドを利用して「カテゴリ用キーワード」を作成し、入力した内容を meta 要素の description への反映、テンプレートモジュールを利用したグローバルナビゲーションの表示を行っています。
いつものように、「ほげ山くん」と「くれま先輩」が会話形式で進めます。
お詫び
今回の記事では、メインページを判定する変数 main_index と検索結果を判定する変数 search_results は予めシステムで設定されているという説明がありまして、私も気がついておりませんでした。この件については拙著「Movable Type 4.2 パーフェクトガイド」に反映されていませんでしたので、この場をお借りしてお詫び申し上げます。
で、ちょっと調べてみたところ、変数 search_results は 4.2 からシステム内部で設定されたのですが、変数 main_index については、厳密にはテンプレートセットで記述した値が利用されるようです。
「既定のブログ」であれば、lib/MT/DefaultTemplates.pm の設定(下記の青色)が反映されます。
...前略...
BEGIN {
$templates = {
'index' => {
'main_index' => {
label => 'Main Index',
outfile => 'index.html',
rebuild_me => 1,
...後略...
青色部分はテンプレートの「テンプレートの種類(identifier)」に該当するのですが、各インデックステンプレートの再構築時点でこの「テンプレートの種類」が、lib/MT/Template.pm の下記の青色の行で変数として設定されます。
sub build {
my $tmpl = shift;
my($ctx, $cond) = @_;
$ctx ||= $tmpl->context;
my $timer = MT->get_timer();
local $timer->{elapsed} = 0 if $timer;
local $ctx->{__stash}{template} = $tmpl;
my $tokens = $tmpl->tokens
or return;
my $build = $ctx->{__stash}{builder} || MT::Builder->new;
my $page_layout;
if (my $blog_id = $tmpl->blog_id) {
$ctx->stash('blog_id', $blog_id);
my $blog = $ctx->stash('blog');
unless ($blog) {
$blog = MT::Blog->load($blog_id) or
return $tmpl->error(MT->translate(
"Load of blog '[_1]' failed: [_2]", $blog_id, MT::Blog->errstr ));
$ctx->stash('blog', $blog);
} else {
$ctx->stash('blog_id', $blog->id);
}
MT->config->TimeOffset($blog->server_offset);
$page_layout = $blog->page_layout;
}
$page_layout = $tmpl->page_layout if $tmpl->page_layout;
$ctx->var( 'page_layout', $page_layout )
unless $ctx->var('page_layout');
if (my $layout = $ctx->var('page_layout')) {
my $columns = {
'layout-wt' => 2,
'layout-tw' => 2,
'layout-wm' => 2,
'layout-mw' => 2,
'layout-wtt' => 3,
'layout-twt' => 3,
}->{$layout};
$ctx->var( 'page_columns', $columns ) if $columns;
}
$ctx->var( $tmpl->identifier, 1 ) if defined $tmpl->identifier;
$timer->pause_partial if $timer;
my $res = $build->build($ctx, $tokens, $cond);
if ($timer) {
$timer->mark("MT::Template::build[" . ($tmpl->name || $tmpl->{__file} || "?").']');
}
unless (defined($res)) {
return $tmpl->error(MT->translate(
"Publish error in template '[_1]': [_2]",
$tmpl->name || $tmpl->{__file}, $build->errstr));
}
$res =~ s/^\s*//;
return $res;
}
つまり外部のテンプレートセットに入れ替えて利用する場合は、外部テンプレートセットの identifier の設定に依存するので、次のような config.xml であれば、メインページで設定される変数が main_index でない可能性もあります。
...前略...
'index' => {
'top_page' => {
label => 'Main Index',
outfile => 'index.html',
rebuild_me => 1,
...後略...
ということで、指摘をされた方への指摘ですが、デフォルトテンプレートをカスタマイズするのであれば、変数 main_index が利用でき、そうでない場合は、テンプレートセットの設定(またはテンプレート編集画面の「テンプレートの種類」)から利用可能な変数を確認する、というのが正しい解釈です。
- 「MTDDC Meetup TOKYO 2015」に登壇します
- ブログ開設10周年
- 2012年上半期アクセスランキングベスト10
- MTCafe Tokyo開催のお知らせ
- 「ソーシャルコマース~ソーシャルメディア時代のショッピングと企業戦略~(仮)」刊行記念セミナー開催のお知らせ
- 書籍「MovableTypeによる実用サイト構築術 ウェブシステムとしての活用ノウハウ MT5/5.1対応」プレゼント企画
- 書籍「Facebookページプロフェッショナルガイド」プレゼント本日締め切り
- 「Facebookページプロフェッショナルガイド」3刷決定
- 書籍「Facebookページプロフェッショナルガイド」プレゼント企画
- Facebookページ「小粋空間」が300いいね!達成
- 東京電力 計画停電検索(iPhone版)
- 東北地方太平洋沖地震対策情報まとめサイト
- 「東京電力 計画停電インクリメンタル検索」バージョンアップ
- 東京電力 計画停電インクリメンタル検索
- 東京電力計画停電