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

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

Posted at October 2,2007 1:33 AM
Tag:[Archive, MovableType, MTIf]

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

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

関連記事
トラックバックURL


コメント

mt4.12でログイン出来なくなりました。
Can't call method "execute" on an undefined value at /users/H/e/em-grp.com/docs/mt/extlib/Data/ObjectDriver/Driver/DBI.pm line 118.

どなたか対処をご存知であればご返答ください。

llib/MT/ArchiveType/Category.pm の archive_group_entriesの下に $limit = 300 unless $limit; #← これを挿入で解決するような記事を発見したのですがmt4.12にはArchiveType/Category.pmのfolderが存在しないようで対処に困っています。

参考http://chez-sugi.net/movabletype/20090314.html

[1] Posted by seiji : October 6, 2011 8:47 PM
コメントする
greeting

*必須

*必須(非表示)


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

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

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

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