アーカイブページのリストの表示内容が異なる理由

アーカイブページのリストの表示内容が異なる理由

Posted at December 7,2007 2:22 AM
Tag:[Customize, MovableType, Sidebar]

サイドバーの表示をメインページと同じにする」の続きです。

前述のエントリーでは、サイドバーにある各メニューの MTIf タグを外す方法を記しましたが、これだけでは全てのページでサイドバーが同じ表示にはなりません。具体的には、「最近のエントリー」「最近のコメント」「最近のトラックバック」の3つのリストの表示が、アーカイブによって異なります。

理由は、リスト表示に使われるテンプレートタグ(MTEntries 等)がアーカイブの種類に依存した振る舞いをしているためです。全てが依存している訳ではありませんので、具体的な結果については後述します。

これは不具合ではなく、Movable Type の仕様と思われますが、見落としていなければMovable Type ドキュメントには明示的な記述はありません。したがってこれらのリスト類がどのように表示されるか、実際に設定してみないと分からない訳です。

ということで、このエントリーでは、メインページに設定しているリストを各アーカイブページに設定した場合の結果と、それらを回避する方法について記します。

1.「最近のエントリー」「最近のコメント」「最近のトラックバック」のアーカイブページの表示結果

公開テンプレートを例に、メインページに設定してある「最近のエントリー」「最近のコメント」「最近のトラックバック」と同じMTタグを各アーカイブページに設定した場合の表示がどのようになるかを、下記の一覧にまとめました。

最近の
エントリー
最近の
コメント
最近の
トラックバック
カテゴリー・アーカイブ該当カテゴリーのエントリー一覧[MTEntries recently_commented_on指定]
該当カテゴリーの全エントリーのコメントをMTCommentsのlastn分表示
[MTEntries lastn指定]
コメントのないエントリー含めlastn分表示
表示されない
月別アーカイブ該当月のエントリー一覧[MTEntries recently_commented_on指定]
該当月の全エントリー・コメントをMTCommentsのlastn分表示
[MTEntries lastn指定]
該当月のコメントのないエントリー含めlastn分表示
メインページと同様
ブログ記事アーカイブメインページと同様メインページと同様該当エントリーのトラックバック一覧

ちょっと分かりにくいですが、メインページと同じ表示になるのは、

月別アーカイブ:「最近のトラックバック」
ブログ記事アーカイブ:「最近のエントリー」「最近のコメント」

の3パターンのみです。

2.考察

それぞれのリストが、各アーカイブでどのように振舞っているかをまとめました。

最近のエントリー・最近のコメント

「ブログ記事リスト」として再構築される場合は、テンプレートの種別に依存した表示になります。ブログ記事やウェブページといった単一ページではテンプレート種別に依存しません。

最近のトラックバック

そもそも Movable Type におけるトラックバックは、「ブログ記事」あるいは「カテゴリー」に対応した情報です。したがって、ブログ記事リスト・カテゴリーアーカイブとして再構築される場合は、テンプレート種別に依存した表示が自然です。
月別アーカイブでメインページと同じ表示になるのは、トラックバックが「日付」というアーカイブ種別に依存しない性質の情報だからです。

なお、上記の表では、カテゴリーアーカイブでは「最近のトラックバックが表示されない」と記しましたが、実はカテゴリー単位にトラックバック設定があり、ブログ管理画面より「一覧」→「カテゴリ」→「任意のカテゴリ名」で、トラックバック受信許可の項目があります。

カテゴリ単位でのトラックバック受信

ここに表示されたトラックバックURLにトラックバックを送信すれば、カテゴリーアーカイブに紐づけられた「最近のトラックバック」が表示されます。ブログ管理画面の「トラックバック一覧」にも受信件数が表示されます(下)。

カテゴリ単位でのトラックバック受信

3.アーカイブページで正常に表示する方法

次にアーカイブページで「最近のエントリー」「最近のコメント」「最近のトラックバック」を表示する方法を記します。

3.1 プラグインを利用する

メインページと同じ情報をアーカイブページに表示するには、indexcontext プラグインがお勧めです。

関連記事:メインページと同じ情報をアーカイブページで表示する indexcontext プラグイン

また、MTCollate プラグインを利用すればカテゴリー・アーカイブ/月別アーカイブで正常にすることができます。

関連記事:MTCollate を使って「最近のコメント」を表示する

Recents プラグインを利用する方法もあります。このプラグインを利用する場合は、MTCommentsRecent タグに mode="force" を付与することを忘れないでください。

3.2 モジュール化する

リスト自体をモジュール化(部品化)します。具体的には、インデックステンプレートとしてリストを作成・再構築し、その情報をインクルードすれば、問題を解消することができます。
ここで述べる「モジュール化」は、ブログ管理画面の「デザイン」→「テンプレート」→「テンプレートモジュール」とは異なりますのでご注意ください。

モジュール化には、

がありますが、個人的には「Ajax モジュール化」をお勧めします。

4.まとめ

メインページと同じ表示を行う場合、個人的には3.2項のモジュール化による表示を推奨します。

理由は、ページ数が増大しても再構築のパフォーマンスがほとんど変わらないためです。モジュール化しない場合、「最近のエントリー」「最近のコメント」「最近のトラックバック」がアーカイブページ分再構築されますが、インデックステンプレートでモジュール化すれば、アーカイブページが増えても、常に3ファイルしか再構築されずにすみます。

「カテゴリーリスト」や「月別アーカイブリスト」、また再構築のパフォーマンスの問題上、メインページでしか表示が推奨されていない「タグクラウド」等、同様の手法でモジュール化するとさらに良いでしょう。


このエントリーは「アーカイブページに「最近のコメント」「最近のトラックバック」を表示する」をリファクタリングしたものです。

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


コメント

yujiroさん、こんばんは。

先日はありがとうございました。


どちらで質問すればいいのか分からなかったので
こちらに質問させていただきます。


トップページにのみ
ブログの説明文のようなものを表示させたいんですね。

エントリーページやカテゴリーページには表示させたくないです。


その場合、

どの部分をカスタマイズすれば良いのでしょうか?

[1] Posted by 西 : December 10, 2007 6:53 PM

>西さん
こんにちは。
ご質問の件ですが、MT4であれば、「デザイン」→「インデックステンプレート」→「メインページ」の編集画面で

<div class="blog">

のすぐ下に

<div class="entry">
[書きたい内容を記述]
</div>

を追加してみてください。
それではよろしくお願い致します。

[2] Posted by yujiro logo : December 11, 2007 12:02 PM

分かりやすい解説本当にありがとうございます。

解決しました。


後ですね、


<body>
にどこにあるのでしょうか?

検索などもしたのですが
見つからないので・・。


必要ないという話も聞いたんですが
SEO対策上、どうしても気になってましてですね・・。


[3] Posted by 西 : December 11, 2007 7:01 PM

>西さん
こんにちは。
ご質問の件ですが、body 要素はテンプレートモジュールの「ヘッダー」にあります。

ちなみに「必要ない」というのは、body 要素のことでしょうか。
もしそうであれば、(X)HTMLマークアップとして body 要素は必須です。
それではよろしくお願い致します。

[4] Posted by yujiro logo : December 12, 2007 11:21 AM
コメントする
greeting

*必須

*必須(非表示)


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

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

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

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