本文へジャンプ

Movable Type 7で、全てのページに新着記事を表示したい

全てのページに、新着記事を表示したい場合があるとします。
MDブログで言うと、右(PCサイズの場合)の「Recent Entries」という部分です。
※ Movable Type 7 r.5005 で検証しています。

Movable Type 7で、全てのページに新着記事を表示したい

ただコンテキストという概念(ページごとに予めフィルタリングがかかった状態)があるので、そのまま各テンプレートで<mt:Entries>と書いても同じ結果を得ることはできません。

  • インデックテンプレートであれば、サイトに所属する記事すべて
  • カテゴリアーカイブテンプレートであれば、そのカテゴリに所属する記事すべて
  • 年別アーカイブテンプレートであれば、その年に所属する記事すべて

では、全てのページに同じように表示するにはどのようにすればいいでしょうか。

コンテキストを無視する「ignore_archive_context」モディファイア

「ignore_archive_context」は、その名の通り「コンテキスト」を無視するモディファイアです。
<mt:sites>タグで使用できます。
※<mt:Websites>、<mt:Blogs>でも使用可能です。

たとえばサイトの記事を最新5件表示するコードは以下

<$mt:SiteID setvar="SET_サイトID"$>
<mt:Sites ignore_archive_context="1" include_sites="$SET_サイトID">
 <mt:Entries lastn="5" include_sites="$SET_サイトID">
  <$mt:EntryTitle$>
 </mt:Entries>
</mt:Sites>

ソース解説

<$mt:SiteID setvar="SET_サイトID"$>

まず、対象とするサイトIDを取得します。

<mt:Sites ignore_archive_context="1" include_sites="$SET_サイトID">

コンテキストを無視したいため「ignore_archive_context="1"」を指定します。
これでコンテキストをリセットした状態になりました。
「include_sites="$SET_サイトID"」を指定して自サイトのみに限定します。
指定しない場合は、全サイトが対象となります。

<mt:Entries lastn="5" include_sites="$SET_サイトID">

この部分で記事を出力します。
ここで「include_sites(site_ids)」モディファイアがないと、再構築時にエラーになります。
お忘れなく。

2022_0406_mt_image2.png

子サイトの記事も対象にする場合

親サイトの記事前提で解説してきましたが、子サイトの記事も対象としたい場合は以下となります。

<mt:Sites ignore_archive_context="1" include_sites="$SET_サイトID">
 <mt:Entries lastn="5" include_sites="children" include_parent_site="1">
  <$mt:EntryTitle$>
 </mt:Entries>
</mt:Sites>

ソース解説

<mt:Entries lastn="5" include_sites="children" include_parent_site="1">

<mt:Entries>のモディファイアとして、
「include_sites="children"」もしくは、「include_sites="siblings"」を指定します。
これで子サイトの記事が対象となります。

ただこのままだと子サイトの記事だけが対象になりますので、
「include_parent_site="1"」を追加して、親サイトの記事も対象としています。

子サイトのテンプレートに記事一覧を表示する場合

先程のソースを子サイトのテンプレートで使用する場合、
変数「SET_サイトID」が子サイトのIDが入ってしまい親サイトの記事が表示されません。
なので親サイトのサイトIDを取得します。

<mt:ParentSite>
 <mt:SiteID setvar="SET_サイトID">
</mt:ParentSite>

まとめ

今回は、Movable Type 7でコンテキストを無視して
全てのページで同じ結果を表示する方法を解説しました。

ただこのままだと再構築の際、全てのページで毎回このソースを評価することになり
再構築の負荷が高まってしまいます。

モジュールテンプレートをキャッシュするなり、php/ssiインクルードなりで再構築の負荷を減らす工夫が必要です。

関連リンク

Recent Entries
MD EVENT REPORT
What's Hot?