エントリー本文
チャレンジ! 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 が利用でき、そうでない場合は、テンプレートセットの設定(またはテンプレート編集画面の「テンプレートの種類」)から利用可能な変数を確認する、というのが正しい解釈です。
- ブログ論壇の誕生 - 佐々木俊尚が選んだ著名ブロガーリストのOPML
- Movable Type 4.1 カスタムフィールドの使用方法
- グローバルナビゲーション(その1:基本スタイル)
- Movable Type(MT)テンプレート
- 社務所は
- Movable Type 4.25(英語版ベータ)・Motion(ベータ)リリース
- チャレンジ! Movable TypeをCMSとして使ってみよう!(第6回 グローバルナビゲーションを仕上げる/トップページに最新ブログ記事一覧を表示させる・第7回 トップページを仕上げる)
- Movable Type プラグイン一覧
- バンダイ ∞(むげん)プチプチ
- Movable Type プラグイン一覧(MT4対応)
- Amazon 携帯サイト「Amazile」
- 新型インフルエンザ相談窓口
- WebSig24/7 MT4分科会第3回勉強会
- 薬の約7割がネットで買えなくなる件について
- チャレンジ! Movable TypeをCMSとして使ってみよう!(第15回、最終回)
- お問い合わせフォームから質問を受け付けます
- チャレンジ! Movable TypeをCMSとして使ってみよう!(第12回~第14回)
- チャレンジ! Movable TypeをCMSとして使ってみよう!(第11回 個別のブログ記事テンプレートに着手する)
- 実験!Movable Typeラボラトリー
- チャレンジ! Movable TypeをCMSとして使ってみよう!(第8回 ブログ記事リストテンプレートを使って,カテゴリ別絵本一覧ページを作る・第9回 パンくずナビゲーション部分を作る・第10回 ブログ記事リストテンプレートを完成させる)
- ブログ更新を一時休止します
- カウンタを更新しました
- トラックバック送信テスト用エントリーが人気
- メールフォームの不具合等について
- 当ブログの検索フォームへの検索文字列設定方法について
- チャレンジ! Movable TypeをCMSとして使ってみよう!(第6回 グローバルナビゲーションを仕上げる/トップページに最新ブログ記事一覧を表示させる・第7回 トップページを仕上げる)
- コンサート出演のお知らせ
- 「小粋な UserList」不具合のお知らせ
- Web Directions East
- 渋谷・東急百貨店の「なにわ うまいもん市」
