Movable Type 4 のアーカイブリスト表示の仕組みを探る
デフォルトテンプレートのサイドバーにある、アーカイブリスト表示について解説します。
当サイトで現在配布中のテンプレートもこれとほぼ同じ構成で、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.pm
の core_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デザインの新しいルール」の配布テンプレートではこのタグを省略しています。
- Movable Typeのカテゴリーアーカイブページでブログ全体のブログ記事一覧を表示する
- Movable Type 5.0(MT5.0)以降でアーカイブURLにサブドメインを適用する
- MTArchiveList タグブロック内で使えるテンプレートタグ
- 予約変数一覧 for Movable Type 4.2
- アーカイブページのリストの表示内容が異なる理由
- サイドバーの表示をメインページと同じにする
- 予約変数一覧 for Movable Type 4(その2)
- 予約変数一覧 for Movable Type 4(その1)
- アーカイブのブログ記事一覧をサイドバーに表示する
- アーカイブページに「最近のコメント」「最近のトラックバック」を表示する
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