CMSでFacebookページを管理する・その5(Movable Type 5編第3回)

地震関係で10日ほど間が開きましたが、「CMSでFacebookページを管理する」の続きを書きたいと思います。
今日は、Movable Type 5にプラグインを組み合わせて、「いいね」されているかどうかで表示を分ける方法を紹介します。

1.プラグインのインストール

「いいね」されているかどうかの判断は、プラグイン(によって追加されるテンプレートタグ)で行います。
プラグインは以下からダウンロードすることができます。

FBPageHelper_1_00.zip

ダウンロードしたZipファイルを解凍すると、「plugins」というフォルダができます。
このフォルダを、Movable Type 5のインストール先ディレクトリにアップロードします。

2.出力ファイルをPHPにする

このプラグインでは、静的に再構築したファイルに、PHPのコードを埋め込んで、「いいね」されているかどうかを判断するようにしています。
したがって、出力されたファイルがPHPとして動作することが必要です。
たいていのレンタルサーバーなら、出力ファイルの拡張子を「.php」に変えます。

また、出力ファイルの拡張子を変えるのに伴って、Facebookのアプリケーションの設定の「タブのURL」のアドレスも、変更後の出力先アドレスに変える必要があります。

3.追加されるテンプレートタグ

このプラグインをインストールすると、以下のテンプレートタグが追加されます。

3-1.MTFBPageInit

MTFBPageInitタグは、PHPのコードの初期化をするためのファンクションタグです。
以下のように、secretモディファイアを使って、アプリケーションのシークレットキーを指定します。
「シークレットキー」の部分は、ご自分のアプリケーションのシークレットキーに置き換えます。

<$mt:FBPageInit secret="シークレットキー"$>

また、MTFBPageInitタグは、テンプレートの中で、このプラグインの他のテンプレートタグを使うよりも前の位置に入れておく必要があります。
通常は、Facebookページ用に使うテンプレートの先頭に追加しておくと良いです。

3-2.MTFBPageLiked

「いいね」されている時だけ表示したい部分を、MTFBPageLikedタグのブロックで囲みます。
なお、MTFBPageLikedタグのブロックの中でMTElseタグを使うと、MTElseタグの後の部分は、「いいね」されていない時だけ表示されます。

3-3.MTFBPageNotLiked

「いいね」されていない時だけ表示したい部分を、MTFBPageNotLikedタグのブロックで囲みます。
なお、MTFBPageNotLikedタグのブロックの中でMTElseタグを使うと、MTElseタグの後の部分は、「いいね」されている時だけ表示されます。

3-4.MTFBPageInIFrame

Facebookのiframe内にあるときだけ表示したい部分を、MTFBPageInIFrameタグのブロックで囲みます。
なお、MTFBPageInIFrameタグのブロックの中でMTElseタグを使うと、MTElseタグの後の部分は、iframe内にない(=直接にページにアクセスされている)時だけ表示されます。

3-5.FBPageNotInIFrame

Facebookのiframe内にない(=直接にページにアクセスされている)ときだけ表示したい部分を、MTFBPageNotInIFrameタグのブロックで囲みます。
なお、MTFBPageNotInIFrameタグのブロックの中でMTElseタグを使うと、MTElseタグの後の部分は、iframe内にある時だけ表示されます。

4.タグの組み合わせ方

Facebook用ページのテンプレートを書き換えて、「いいね」されているかどうかで表示内容を変えたい場合、上記のテンプレートタグを組み合わせて、基本的には以下のようにテンプレートを組むようにします。

<$mt:FBPageInit secret="シークレットキー"$>
<mt:FBPageInIFrame>
  <mt:FBPageLiked>
    「いいね」されているときに表示したい内容
  <mt:Else>
    「いいね」されていないときに表示したい内容
  </mt:FBPageLiked>
<mt:Else>
  iframe内に表示されていない(=直接にアクセスされている)ときに表示したい内容
</mt:FBPageInIFrame>

また、クラシックブログのメインページのテンプレートをベースに、上のように書き換えたサンプルをご用意しました。
テンプレートの1行目のMTFBPageInitタグで、secretモディファイアの部分を、ご自分のFacebookページのシークレットキーに置き換えてください。

5.注意事項

このプラグインで追加されるテンプレートタグは、すべてPHPのコードを出力するようになっています。
「いいね」等の状況に応じて表示を切り替えるのは、再構築の時点ではなく、ページにアクセスがあった時点になります。
再構築の時点で、「いいね」等の状況に応じて出力を切り替えることはできません。

例えば、以下のようにテンプレートを組んだとします。
「いいね」されていれば1、されていなければ0を出力することを想定したテンプレートです。

<mt:FBPageLiked>
  <$mt:SetVar name="liked" value="1"$>
<mt:Else>
  <$mt:SetVar name="liked" value="0"$>
</mt:FBPageLiked>
<$mt:GetVar name="liked"$>

しかし、この書き方では、想定した通りの結果にはなりません。
MTFBPageLikedタグとMTElseタグはPHPのコードに置き換わり、再構築時点では以下のように処理されています。

<?php いいねされているかどうかを判断するif文 ?>
  変数likedに1を代入
<?php else : ?>
  変数likedに0を代入
<?php endif; ?>
変数likedの値を出力

PHPの部分は、ページにアクセスがあった時点で動作します。
そのため、再構築が終わった時点では、「変数likedに1を代入」→「変数likedに0を代入」→「変数likedの値を出力」の順で処理した結果が、ファイルに出力されています。
結果として、上記のテンプレートの書き方だと、ページにアクセスした時には、「いいね」されているかどうかに関係なく、常に0が表示されることになります。