Topお知らせ > チャレンジ! Movable TypeをCMSとして使ってみよう!(第5回 head要素の中身を作る/グローバルナビゲーションを作る)
News
各種ブログテンプレート
2008年10月12日

エントリー本文

チャレンジ! Movable TypeをCMSとして使ってみよう!(第5回 head要素の中身を作る/グローバルナビゲーションを作る)

Posted at October 12,2008 12:03 AM
Category:[お知らせ]
Tag:[]

またまた遅くなりましたが、フリーランスWebデザイナー・黒野明子さんgihyo.jp で Movable Type の連載第5回が公開されています。


チャレンジ! Movable TypeをCMSとして使ってみよう!- 第5回 head要素の中身を作る/グローバルナビゲーションを作る

チャレンジ! Movable TypeをCMSとして使ってみよう!

第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 が利用でき、そうでない場合は、テンプレートセットの設定(またはテンプレート編集画面の「テンプレートの種類」)から利用可能な変数を確認する、というのが正しい解釈です。

Posted by yujiro
この記事を読んだ人はこんな記事も読んでいます
関連記事
人気エントリー
Hatena Hot Entries
Hatena Entries
トラックバックURL


コメントする
greeting

*必須



ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字 イタリック アンダーライン ハイパーリンク 引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)

Now loading...
Introduction
Entries of this Category
Recent Entries
Recent Comments
Recent Trackbacks
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

loading ...
Categories
Monthly Archives
BlogPeople
Now loading...
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 4.261
 
List Me!