iFrame版のFacebookページは、読み込み元で自由にプログラムを仕込めるので、「いいね!」されているかどうかでコンテンツの表示を分けることができます。
PHPでのやり方については、藤本さんが記事を書かれています。
- iframe版Facebookページで「いいね」されているかどうかで表示を変える – The blog of H.Fujimoto
- signed_requestの署名を確認する – The blog of H.Fujimoto
読み込み元のページをCMSで管理している場合も可能ですが、a-blog cmsはテーマ内に直接PHPを書くことができません。
a-blog cmsの山本さんにアドバイスをいただいて、いいね!されていないときだけ囲まれている内容を出力する「Touch_NotFbLike」モジュールを作成したので公開します。
1. 拡張ファイルを作成する
以下のコードを全てテキストエディタにコピー・ペーストして、
「NotFbLike.php」というファイル名で保存してください。
<?php require_once ACMS_LIB_DIR.'GET.php'; class ACMS_GET_Touch_NotFbLike extends ACMS_GET { function get() { $data = false; if (isset($_POST['signed_request'])) { list($encoded_sig, $payload) = explode('.', $_POST['signed_request'], 2); $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); } if ($data && $data['page']['liked']) { return false; } else { return $this->tpl; } } } ?>
2. a-blog cmsのコアに投げ込む
a-blog cmsを導入しているサイト内の、/php/acms/get/touch/ディレクトリ内に、作成したPHPファイルをアップロードします。
3. 処理したい場所をモジュールタグで囲む
アップロード後は、すぐにモジュールを利用できます。
テーマ内の「いいね!」されていないときだけ出したい箇所を、以下のようにモジュールで囲んでください。
<!-- BEGIN_MODULE Touch_NotFbLike --> <p>いいね!してください</p> <!-- END_MODULE Touch_NotFbLike -->
注意点
-
自作のPHP拡張は、キャッシュを有効にしていると動作しません(バージョン1.4時点)。メインサイトではキャッシュを取りたいという場合は、Facebookページ用にルールを定義して、キャッシュが無効になるよう設定してください。
-
いいね!判定が有効になるのは、IFrameを最初に表示したときだけです。IFrame内にナビゲーションを作って2ページ目以降の処理をする場合は、$data変数の内容をセッション等に保持しなければなりません。
技術的な解説
スクリプト内の8行目までが拡張機能の宣言、9行目から21行目が、具体的な処理となります。3行目のGET.phpの読み込みは必須です。
require_once ACMS_LIB_DIR.'GET.php';
5行目のクラス宣言は、そのまま/php/以降のa-blog cms内のパスとなります。
内容の出力のみの場合はget、さらに判定関連の拡張はtouchに分類されます。
(自作拡張の場合はGET直下でも構いません)
ACMS_GET_Touch_NotFbLike
クラスの最後で「$this->tpl;」を返すと、囲んでいる内容を出力することになり、「false」を返すと表示しません。
なので、サンプルとは逆に「いいね!されているとき」だけ表示するモジュールを追加したい場合は、全く同じ内容のPHPファイルを複製し、最後の処理を反転します。
if ($data && $data['page']['liked']) { return $this->tpl; } else { return false; }