TopMovable Typeカスタマイズアーカイブ > 2007年10月
2007年10月 2日

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

October 2,2007 1:33 AM
Tag:[, , ]
Permalink

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

当サイトで現在配布中のテンプレートもこれとほぼ同じ構成で、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デザインの新しいルール」の配布テンプレートではこのタグを省略しています。

Comments [1] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

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

AMN
Categories
Monthly Archives
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3