サイト制作に関するメモ書き

HOME > CMS > Movable Type > Movable Typeで複数のサイトの記事をまとめて一覧表示する

Movable Typeで複数のサイトの記事をまとめて一覧表示する

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を単体でしか指定できないようなので、複数サイトのコンテンツタイプ をまとめて表示は実装が難しいかもしれません。
 

【参考サイト】

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

▲PAGE TOP