TopMovable Typeカスタマイズサイドバー > Movable Type 4 のアーカイブリスト表示の仕組みを探る
2007年10月 2日

Movable Type 4 のアーカイブリスト表示の仕組みを探る

Posted at October 2,2007 1:33 AM
Category:[サイドバー]
Tag:[, , ]

デフォルトテンプレートのサイドバーにある、アーカイブリスト表示について解説します。

当サイトで現在配布中のテンプレートもこれとほぼ同じ構成で、MTIf の部分だけを抽出すると、概ね下記のようになっていますので参考にしてください。*1

1.アーカイブリスト表示用のテンプレートタグ

「デザイン」→「テンプレート」→「テンプレートモジュール」→「サイドバー(3カラム)(または2カラム)」の中に下記のようなテンプレートタグがあります。これがアーカイブリスト表示用のテンプレートタグです。

<MTIf name="module_author_archives">
    :
 [ユーザー別アーカイブリスト]
    :
</MTIf>
 
<MTIf name="module_monthly_archives">
    :
 [月別アーカイブリスト]
    :
</MTIf>
 
<MTIf name="module_category-monthly_archives">
    :
 [月別カテゴリアーカイブリスト]
    :
</MTIf>
 
<MTIf name="module_author-monthly_archives">
    :
 [ユーザー月別アーカイブリスト]
    :
</MTIf>
 
<MTIf name="module_category_archives">
    :
 [カテゴリアーカイブリスト]
    :
</MTIf>

デフォルトでは5種類のアーカイブリストが用意されており、すべて青色の MTIf タグで括られています。

メインページでは

  • 月別アーカイブリスト
  • ユーザー別アーカイブリスト
  • カテゴリアーカイブリスト

が表示されるようになっています。各アーカイブページでは、アーカイブの内容にそったリストが表示されます(その仕組みは後述)。

アーカイブリストが表示されるためには、上の赤色で示した、MTIf タグにある、各 name 属性の値が "1" であることが条件になります。
例えば、月別アーカイブが表示されるためには、module_monthly_archives に "1" が設定されている必要があります。

この MTIf タグの name 属性が表示を制御するポイントとなりますので、次に、各 name 属性の値をどこで "1" に設定しているかについて解説します。

2.メインページで表示される仕組み

メインページテンプレートの先頭に下のタグが記述されています。

<MTSetVar name="module_category_archives" value="1">
<MTSetVar name="module_author_archives" value="1">
<MTSetVar name="module_monthly_archives" value="1">

つまり、MTSetVar タグで name 属性の値に "1" が設定され、メインページのサイドバーには、前述の通り、カテゴリアーカイブリスト・ユーザー別アーカイブリスト・月別アーカイブリストが表示される、という訳です。

ただし、厳密には各リストは MTIfArchiveTypeEnabled タグでも括られています(下の青色部分)。

<MTIf name="module_author_archives">
<MTIfArchiveTypeEnabled archive_type="Author">
    :
 [ユーザー別アーカイブリスト]
    :
</MTIfArchiveTypeEnabled>
</MTIf>
 
<MTIf name="module_monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Monthly">
    :
 [月別アーカイブリスト]
    :
</MTIfArchiveTypeEnabled>
</MTIf>
 
<MTIf name="module_category-monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Category-Monthly">
    :
 [月別カテゴリアーカイブリスト]
    :
</MTIfArchiveTypeEnabled>
</MTIf>
 
<MTIf name="module_author-monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Author-Monthly">
    :
 [ユーザー月別アーカイブリスト]
    :
</MTIfArchiveTypeEnabled>
</MTIf>
 
<MTIf name="module_category_archives">
<MTIfArchiveTypeEnabled archive_type="Category">
    :
 [カテゴリアーカイブリスト]
    :
</MTIfArchiveTypeEnabled>
</MTIf>

MTIfArchiveTypeEnabled タグの中が実行されるためには、赤色で示した「アーカイブ種類(=アーカイブマッピング)」が存在する必要があります。存在しなければ、リストは表示されません。

デフォルトテンプレートでは「ユーザー別アーカイブ」のアーカイブマッピングは設定されていないので、MTSetVar タグがあるにもかかわらずメインページに表示されないのは、そのためです。

3.アーカイブページで表示される仕組み

メインページについてはテンプレート編集画面で MTSetVar タグで name 属性が明示されていますが、各アーカイブテンプレート、例えば「ブログ記事リスト」には、

module_author_archives
module_monthly_archives
module_category-monthly_archives
module_author-monthly_archives
module_category_archives

という name 属性値は見当たりません。

実は、これらの値はシステムで事前に設定されており、各アーカイブに対応する name 属性に "1" が設定されているのです。

ソースコードが読める方は lib/MT/WeblogPublisher.pmcore_archive_types というサブルーチンを見ればお分かりになると思います。

下は、lib/MT/WeblogPublisher.pm より月別アーカイブ部分を抜粋したものです。青字部分に module_monthly_archives が設定されているのが何となくお分かりになると思います。

sub core_archive_types {
    return {
     :
   (中略)
     :
        'Monthly' => ArchiveType(
            name                  => 'Monthly',
            archive_label         => \&monthly_archive_label,
            archive_file          => \&monthly_archive_file,
            archive_title         => \&monthly_archive_title,
            date_range            => \&monthly_date_range,
            archive_group_iter    => \&monthly_group_iter,
            archive_group_entries => \&monthly_group_entries,
            archive_entries_count => \&monthly_entries_count,
            dynamic_template      => 'archives/<$MTArchiveDate format="%Y%m"$>',
            default_archive_templates => [
                ArchiveFileTemplate(
                    label    => MT->translate('yyyy/mm/index.html'),
                    template => '%y/%m/%i',
                    default  => 1
                ),
            ],
            dynamic_support => 1,
            date_based      => 1,
            template_params => {
                datebased_only_archive    => 1,
                datebased_monthly_archive => 1,
                module_monthly_archives   => 1,
                main_template             => 1,
                archive_template          => 1,
                archive_class             => "datebased-monthly-archive",
            },
        ),
     :
   (中略)
     :
    };
}

他のアーカイブも同様にシステムで設定された値を使用しています。

アーカイブページ右上に表示される「このアーカイブについて」も、同じ仕組みで制御されています。

4.すべてのアーカイブページで同じアーカイブリストを表示するには

1項で示した、各アーカイブリストの一番外側にある MTIf タグを削除してください。

ただしアーカイブによってはメインページと表示が異なる可能性があります。その場合は、

で対応してみてください。


拙著「Movable Type WEBデザインの新しいルール」の配布テンプレートではこのタグを省略しています。

Posted by yujiro
関連記事
人気エントリー
トラックバックURL


コメントする

*必須



お知らせ:2008年5月現在、多忙のため、7月頃までコメントを速やかに回答できない状態が続きます。ご質問の内容によっては回答が7月以降になる可能性がありますので、予めご了承ください。

太字 イタリック アンダーライン ハイパーリンク 引用

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

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

Now loading...
Entries of this Category
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 ...
BlogPeople
Now loading...
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 4.1
 
List Me!