全てのページに、新着記事を表示したい場合があるとします。
MDブログで言うと、右(PCサイズの場合)の「Recent Entries」という部分です。
※ Movable Type 7 r.5005 で検証しています。
ただコンテキストという概念(ページごとに予めフィルタリングがかかった状態)があるので、そのまま各テンプレートで<mt:Entries>と書いても同じ結果を得ることはできません。
では、全てのページに同じように表示するにはどのようにすればいいでしょうか。
「ignore_archive_context」は、その名の通り「コンテキスト」を無視するモディファイアです。
<mt:sites>タグで使用できます。
※<mt:Websites>、<mt:Blogs>でも使用可能です。
<$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)」モディファイアがないと、再構築時にエラーになります。
お忘れなく。
親サイトの記事前提で解説してきましたが、子サイトの記事も対象としたい場合は以下となります。
<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インクルードなりで再構築の負荷を減らす工夫が必要です。