Movable Typeで複数のサイトのブログやコンテンツデータをまとめて表示する方法を調べてみました。
Movable Type r.4208を使用しています。
サンプルコード
例として、以下のような子サイトとブログ記事を作成します。
-
子サイトA(ブログID:1)
- タイトル:子サイトAの記事3 公開日:2019.2.15
- タイトル:子サイトAの記事2 公開日:2019.2.6
- タイトル:子サイトAの記事1 公開日:2019.2.2
-
子サイトB(ブログID:2)
- タイトル:子サイトBの記事3 公開日:2019.2.20
- タイトル:子サイトBの記事2 公開日:2019.2.14
- タイトル:子サイトBの記事1 公開日:2019.2.5
それぞれの記事一覧を親サイトで表示したい場合、以下のようにinclude_blogsでブログIDを指定すれば表示できます。
<ul> <h3>子サイトAの記事</h3> <mt:Entries include_blogs="1"> <li><mt:EntryTitle>(<mt:EntryDate format="%Y.%m.%d">)</li> </mt:Entries> </ul> <h3>子サイトBの記事</h3> <ul> <mt:Entries include_blogs="2"> <li><mt:EntryTitle>(<mt:EntryDate format="%Y.%m.%d">)</li> </mt:Entries> </ul>
以下のように出力されました。
<h3>子サイトA</h3> <ul> <li>子サイトAの記事3(2019.02.15)</li> <li>子サイトAの記事2(2019.02.06)</li> <li>子サイトAの記事1(2019.02.02)</li> </ul> <h3>子サイトB</h3> <ul> <li>子サイトBの記事3(2019.02.20)</li> <li>子サイトBの記事2(2019.02.14)</li> <li>子サイトBの記事1(2019.02.05)</li> </ul>
複数のサイトのブログを混ぜて表示したい場合、include_blogsにカンマ区切りでブログIDを指定すればいいようです。
<h3>子サイトAとBの記事</h3> <ul> <mt:Entries include_blogs="1,2"> <li><mt:EntryTitle>(<mt:EntryDate format="%Y.%m.%d">)</li> </mt:Entries> </ul>
これで意図した形で表示できました。
<h3>子サイトAとBの記事</h3> <ul> <li>子サイトBの記事3(2019.02.20)</li> <li>子サイトAの記事3(2019.02.15)</li> <li>子サイトBの記事2(2019.02.14)</li> <li>子サイトAの記事2(2019.02.06)</li> <li>子サイトBの記事1(2019.02.05)</li> <li>子サイトAの記事1(2019.02.02)</li> </ul>
次にコンテンツタイプ を試して見ます。
先ほどの各子サイトに、以下のようなコンテンツタイプとデータを登録します。
-
子サイトA(ブログID:1) > 子サイトAのコンテンツタイプ
- タイトル:子サイトAのデータ3 公開日:2019.2.15
- タイトル:子サイトAのデータ2 公開日:2019.2.6
- タイトル:子サイトAのデータ1 公開日:2019.2.2
-
子サイトB(ブログID:2) > 子サイトBのコンテンツタイプ
- タイトル:子サイトBのデータ3 公開日:2019.2.20
- タイトル:子サイトBのデータ2 公開日:2019.2.14
- タイトル:子サイトBのデータ1 公開日:2019.2.5
子サイトのコンテンツタイプのデータを親サイトで一覧表示したい場合、以下のようにsite_idsでブログID、content_typeでコンテンツタイプ 名を指定すれば表示できました。
<h3>子サイトA</h3> <ul> <mt:Contents site_ids="1" content_type="子サイトAのコンテンツタイプ"> <li><mt:ContentLabel>(<mt:ContentDate format="%Y.%m.%d">)</li> </mt:Contents> </ul> <h3>子サイトB</h3> <ul> <mt:Contents site_ids="2" content_type="子サイトBのコンテンツタイプ"> <li><mt:ContentLabel>(<mt:ContentDate format="%Y.%m.%d">)</li> </mt:Contents> </ul>
再構築を行うと、以下のように出力されました。
<h3>子サイトA</h3> <ul> <li>子サイトAのデータ3(2019.02.15)</li> <li>子サイトAのデータ2(2019.02.06)</li> <li>子サイトAのデータ1(2019.02.02)</li> </ul> <h3>子サイトB</h3> <ul> <li>子サイトBのデータ3(2019.02.20)</li> <li>子サイトBのデータ2(2019.02.14)</li> <li>子サイトBのデータ1(2019.02.05)</li> </ul>
複数のサイトのコンテンツタイプ をまとめて表示したい場合、site_idsにカンマ区切りでブログIDを指定すればいいようです。
<h3>子サイトAとBのデータ</h3> <ul> <mt:Contents site_ids="1,2"> <li><mt:ContentLabel>(<mt:ContentDate format="%Y.%m.%d">)</li> </mt:Contents> </ul>
以下のように生成することができました。
<h3>子サイトAとBのデータ</h3> <ul> <li>子サイトBのデータ3(2019.02.20)</li> <li>子サイトAのデータ3(2019.02.15)</li> <li>子サイトBのデータ2(2019.02.14)</li> <li>子サイトAのデータ2(2019.02.06)</li> <li>子サイトBのデータ1(2019.02.05)</li> <li>子サイトAのデータ1(2019.02.02)</li> </ul>
注意点する点として、コンテンツタイプ 名は複数選択できないようなので、子サイト内にコンテンツタイプ が複数あった場合、すべてのコンテンツタイプ のデータが表示の対象になります。
あと、今回はMovable Type r.4208で試しているのですが、Movable Type r.4502以降のバージョンではsite_idのみ利用可能となっているようです。
site_idはidを単体でしか指定できないようなので、複数サイトのコンテンツタイプ をまとめて表示は実装が難しいかもしれません。
【参考サイト】
- MTEntries – テンプレートタグリファレンス | CMSプラットフォーム Movable Type ドキュメントサイト
- MTContents – テンプレートタグリファレンス | CMSプラットフォーム Movable Type ドキュメントサイト
- マルチサイト機能が利用できるテンプレートタグとモディファイア | CMSプラットフォーム Movable Type ドキュメントサイト
コメントが承認されるまで時間がかかります。