私のFacebookページでも使っています

iFrame版のFacebookページは、読み込み元で自由にプログラムを仕込めるので、「いいね!」されているかどうかでコンテンツの表示を分けることができます。
PHPでのやり方については、藤本さんが記事を書かれています。

読み込み元のページを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;
}

この記事を書いた人

うぇびん

愛知県豊橋市に住んでいる、荒ぶるウェブおばさん。WordPressをはじめとした各種CMSを研究するのが好き。札幌のIT企業のビットスター株式会社に所属しています。