複数のウェブサイト(ブログ)でウェブページを共有する

以下のような質問を受けました。

Movable Typeで、1つの会社の複数のブランドのウェブサイトを管理しています。

ここで、各ブランドに共通なウェブページ(会社案内等)は1つのウェブサイトだけに入力して、他のウェブサイトでも共有できるようにしたいです。

最低限の共有さえできれば良いのであれば、カスタムフィールドとテンプレートを工夫することで可能です。
その方法を紹介します。

1.カスタムフィールドの作成

まず、あるウェブサイト(ブログ)に作ったウェブページを他のウェブサイト(ブログ)でも共有できるようにするために、カスタムフィールドを作ります。
ここでは、以下のような状況だと仮定します。

  • ウェブサイトはA/B/Cの3つあります。
  • ウェブサイトAに入力したウェブページを、ウェブサイトB/Cで共有します。

この場合、ウェブサイトBとCに、以下のような内容のカスタムフィールドを作ります。

項目設定値
システムオブジェクトウェブページ
名前共有ウェブページID
種類テキスト
必須チェックをオフ
テンプレートタグCommonPageID

なお、説明/ベースネームの各欄の設定は任意です。

2.共有するウェブページのIDを確認

ウェブサイトAでウェブページを作り、それをウェブサイトB/Cで共有するには、まずウェブサイトAでそのウェブページのIDを確認します。

ウェブサイトAの管理画面で「ウェブページ」→「一覧」を選び、ウェブページの一覧を表示します。
そして、表示オプションの「ID」のチェックをオンにすれば、それぞれのウェブページのIDを見ることができます。

3.ウェブサイトB/Cでウェブページを作成

次に、ウェブサイトB/Cにウェブページを作成し、「共有ウェブページID」のカスタムフィールドに、手順2で調べたウェブページのIDを入力します。

例えば、ウェブサイトAに「会社案内」のウェブページがあり、そのIDが1番だとします。
そして、このウェブページをウェブサイトB/Cで共有したいとします。

この場合、ウェブサイトB/Cそれぞれにウェブページを作り、「共有ウェブページID」のカスタムフィールドに「1」を入力します。

なお、ウェブサイトB/Cに、ウェブサイトAとは共有しないウェブページを作りたい場合もあります。
その時は、「共有ウェブページID」のカスタムフィールドには値を入力しないようにします。

4.ウェブページアーカイブテンプレートの書き換え

次に、ウェブサイトB/Cのウェブページアーカイブテンプレートで、ウェブページの情報を出力する部分を、以下のように書き換えます。
「ウェブサイトAのID」は、実際のIDに置き換えます。
例えば、ウェブサイトAのIDが1番の場合、「include_blogs="1"」とします。

<mt:If tag="CommonPageID">
  <$mt:CommonPageID setvar="common_page_id"$>
  <mt:Pages include_blogs="ウェブサイトAのID" id="$common_page_id">
    ウェブページの内容を出力するテンプレートタグ等
  </mt:Pages>
<mt:Else>            
    ウェブページの内容を出力するテンプレートタグ等
</mt:If>

MTPagesタグには「id」というモディファイアがあり、特定のIDのウェブページを読み込むことができます。
これとinclude_blogsモディファイアを組み合わせて、ウェブサイトAのウェブページを読み込みます。

1行目のMTIfタグでMTCommonPageIDタグ(=「共有ウェブページID」のカスタムフィールドの値)を調べます。
共有ウェブページIDに値があれば、2行目以降が処理されて、ウェブサイトAからウェブページを読み込んで、その内容を出力します。
一方、共有ウェブページIDに値がなければ、7行目以降に進んで、ウェブサイトB(またはC)のウェブページに入力した内容が出力されます。

5.あくまで最低限

ここまでで解説した方法は、あくまでも最低限の共有方法です。
以下のような問題点があり、それを解決するには、プラグインを作ることが必要になります。

5-1.手動での再構築

ウェブサイトAでウェブページの内容を更新した時には、ウェブサイトB/Cの対応するウェブページを、手動で再構築する必要があります。

5-2.サーバー移転時の問題

Movable Typeのバックアップと復元の機能でサーバーを移転した場合、ウェブページのIDが変わります。
しかし、「共有ウェブページID」のカスタムフィールドに入力した値は、自動的には変わりません。
サーバー移転後に、ウェブサイトAの各ウェブページのIDを調べなおして、ウェブサイトB/Cの各ウェブページの「共有ウェブページID」のカスタムフィールドに入力しなおす必要があります。