スマートフォンとPCの表示の振り分け方法

ユーザーエージェントによる振り分け


a-blog cms では、スマートフォン専用プラグインなどのプログラムはなく、このルール機能によって、ブラウザの名前(USER-AGENT)をチェックし設定を切り換えて表示します。


ルールを新規作成

ルールを新規作成


ルールの設定は 管理ページ>ルール から行います。


「スマートフォンの場合」のルール

「スマートフォンの場合」のルール


このルールの設定を行った後に、一覧のコンフィグのリンクから、スマートフォンの時のコンフィグについて設定を行います。最低限、テーマの設定を変更する事になります。
この場合、PCとスマートフォンでは同じURLで違ったテーマを表示させる事ができるようになります。a-blog cms で標準搭載のキャッシュ機能も、ルールによって個別に処理されます。


ルール別にコンフィグを設定します

ルール別にコンフィグを設定します


ルール名がついたコンフィグ管理画面

ルール名がついたコンフィグ管理画面


スマートフォン上で、PC・スマートフォンそれぞれの表示を可能にしたい場合


a-blog cms では、PC用とスマートフォン用のテーマをそれぞれ作成・適用できますが、スマートフォンでの表示の場合、スマートフォン用だけでなく、PC用の表示を見たいという場合があります。

ここでは、スマートフォン用テーマでの「PCモードに切り替える」ボタン、PC用テーマでの「スマートフォンモードに切り替える」ボタンの作成について解説します。

サンプルコード(スマートフォン用テーマの任意の場所に追加)

<form action="" method="post" id="switch_theme">
    <input type="hidden" name="cookie[]" value="acms_http_header_User-Agent" />
    <input type="hidden" name="acms_http_header_User-Agent" value="pc browser" />
    <input type="submit" name="ACMS_POST_Cookie" value="PCモードに切り替える" />
</form>

<script>
$('#switch_theme').submit(function(){
    $.cookie("js-switch_theme","on");
    return true;
 });
</script>

サンプルコード(PC用テーマの任意の場所に追加)

<form action="" method="post" id="switch_theme" style="display:none;">
    <input type="hidden" name="cookie[]" value="acms_http_header_User-Agent" />
    <input type="hidden" name="acms_http_header_User-Agent" value="Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_3 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7E18 Safari/528.16" />
    <input type="submit" name="ACMS_POST_Cookie" value="スマートフォンモードに切り替える"  />
</form>
 
<script>
$(function() {
    if ( 'on' == $.cookie('js-switch_theme') ) {
        $('#switch_theme').show();
    }
});
</script>

解説

基本的に、PC、スマートフォンとも、移行先のユーザーエージェントの内容を渡して再度同じページの読み込みをしているものになります。

上記のPC用テーマに追加するコード中では、移行先となるユーザーエージェントの内容はiPhoneのものになっていますので、必要に応じて変更してください。また、スマートフォン用テーマに追加するコード内では、移行先となるPCのユーザーエージェントとして仮に「pc browser」としてあります。こちらも必要に応じて変更してください。

PC用テーマのscript部分は、スマートフォンでの表示時のみ切り替えボタンを表示するためのものです。

フォームに reCAPTCHA を導入しよう


ウェブサイトにアクセスを試みるボットを遮断するために設置されているreCAPTCHAですが一度はどこかで体験したことがあると思います。webのフォームは一番攻撃されやすい箇所になります。reCAPTHAを導入して、ロボットによるスパム投稿を防ぎましょう。


ロボットでないことを証明する

ロボットでないことを証明する


下準備

まずreCAPTCHAを導入するために、reCAPTCHA にアクセスして、必要な情報を取得します。

「Domains」の項目はご利用のサイトのドメインを指定してください。


(スクリーンショット)

サイトのドメイン登録


(スクリーンショット)

Site key と Secret key の取得


サイトを登録し、以下2つのキーを使用しますのでメモしておいてください。

  • Site key
  • Secret key

クライアント実装

下準備ができましたので、まずはクライアントサイドを実装します。

JavaScript

以下コードを ご利用のテーマのフォームの head要素内に読み込んでください。

例えば、simple2016テーマなら themes/simple2016/contact/index.html です。

<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<script>
  function validateRecaptcha ( code ) {
    if ( !!code ) {
      var form = document.querySelector(".recaptcha");
      form.removeAttribute('disabled');
    }
  }
</script>

HTML

次に送信フォームを少し修正します。simple2016テーマなら themes/simple2016/contact/form/main.html を開きます。

以下コードを送信フォーム内に挿入します。ここで、{Site key} は 下準備で取得した Site keyに置き換えてください。

<div class="g-recaptcha" data-callback="validateRecaptcha" data-sitekey="{Site key}"></div>

次に、送信ボタンに recaptcha クラスをふり、 disabled にしておきます。

<input type="submit" name="ACMS_POST_Form_Submit" value="送信する" id="btnSubmit" class="recaptcha btn-attention-block-large" disabled />

完成例

例として themes/simple2016/contact/form/main.html を編集しています。

<!-- BEGIN step#confirm -->
...

<form action="thanks.html" method="post" class="form-btn form-btn-send" enctype="multipart/form-data">

    <div class="g-recaptcha" data-callback="validateRecaptcha" data-sitekey="xxxxxxxxxxxxxxxxxxxxxx"></div>

    <input type="hidden" name="To[]" value="{email}" />
    <input type="hidden" name="AdminReply-To[]" value="{email}" />
    <input type="hidden" name="AdminFrom[]" value="{email}" />
    <input type="hidden" name="step" value="result" />
    <input type="hidden" name="takeover" value="{takeover}" />
    <input type="hidden" name="id" value="contactForm" />
    <input type="submit" name="ACMS_POST_Form_Submit" value="送信する" id="btnSubmit" class="recaptcha btn-attention-block-large" disabled />
</form>

クライアントサイドは完成です。実際に動かしてみましょう。フォームの確認画面まで行くと、reCAPTCHAが表示され、送信ボタンが押せないようになっているかと思います。reCAPTCHAで承認が通ると送信ボタンが押せるようになります。


(スクリーンショット)

チェックするまで送信ボタンが押せない


サーバーサイド実装

クライアントサイドの実装ができると、一見動いていそうに見えますが、このままだと送信ボタンの disabled を開発者ツールなどで削除してしまえば、送信できるようになってしまいます。そこで、サーバーサイドで認証を行いましょう。

認証の仕組み

ユーザーがreCAPTCHAの認証を通ると、ランダムな文字列のコードが生成され、フォーム送信時に一緒に送信されます。 このコードを使って、サーバーサイドでreCAPTCHAのapiにリクエストを投げ、正しいコードかチェックを行うことにより、正常な手段でフォームが送信されたことを確認することができます。

実装

実装にはHook機能を使います。php/ACMS/User/Hook.phpbeforePostFire に以下のコードを追加しましょう。

config.server.phpのHOOK_ENABLEを 1 にしておきましょう。

public function beforePostFire($thisModule)
{
    $moduleName = get_class($thisModule);

    if ( $moduleName === 'ACMS_POST_Form_Submit' ) {
        $secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx';
        $response = $thisModule->Post->get('g-recaptcha-response');
        $api = "https://www.google.com/recaptcha/api/siteverify?secret=${secret}&response=${response}";

        $valid = false;
        if ( $res = @file_get_contents($api) ) {
            $check = json_decode($res);
            if ( $check->success === true ) {
                $valid = true;
            }
        }

        if ( !$valid ) {
            $Field  = $thisModule->extract('field');
            $Field->setMethod('g-recaptcha-response', 'check', false);
            $thisModule->Post->set('step', 'forbidden');
        }
    }
}

ここで、 $secret を、下準備で用意した Secret key で置き換えます。これで実装は完了です。

確認

では実際に、サーバーサイドで認証ができているかチェックしてみましょう。フォームで確認画面まで移動して、 disabled になっている送信ボタンを、開発者ツールで disabled を外して送信してみましょう。


不正なアクセスとして処理される

不正なアクセスとして処理される


これでハンズオンは完了ですが、余力のある方は、reCAPTCHAの色々なオプションを試してみてください。お疲れ様でした!

時期バージョンの Ver. 2.8 では拡張アプリになり、簡単にreCAPTCHAが導入できるようになる予定です。お楽しみに!

CPI シェアードプラン ACE01 CMSインストーラー の利用手順

株式会社KDDIウェブコミュニケーションズが運営するレンタルサーバサービス CPI の共有サーバサービス ACE01 のCMSインストーラーを利用したインストール手順をお知らせしてみます。


まずは、メールで連絡があったユーザーポータルのログイン画面にアクセスします。

Zoho CRMとの連携機能


Zoho CRM とはオンラインの顧客管理システムです。a-blog cmsのフォームと連携することによってお客様が入力した情報をZoho CRM 上に蓄積することができます。

カスタマイズ

今回のハンズオンではsimple2017テーマで、拡張アプリ「Zoho」を使って、お問い合わせ内容を「見込み客(Leads)」に新規に登録することが目標です。

下準備

以下の3つのステップでa-blog cmsとzohoを連携します。

  1. Zoho CRMの登録
  2. 認証トークンの取得
  3. a-blog cmsの拡張アプリ zoho に認証トークンを登録

1. Zoho CRMの登録

まずはZoho CRM に登録します。機能は制限されますが、無料版がありますのでアカウントがない人はまずは無料版を使ってみましょう。

2. 認証トークンの取得と登録

https://crm.zoho.com/crm/ShowSetup.do?tab=devSpace&subTab=api&action=developerapiにて認証トークンを作成します。下の画像の歯車アイコンをクリックすると認証トークンを作成という項目が出てきます。


その項目をクリックすると、「認証トークン」作成用のモーダルウィンドウが出現しますので、そこに任意のアプリケーション名を入力し、作成ボタンを押すことで認証トークンが取得できます。ただしアプリケーション名は英語にしてください。 この認証トークンをあとで使いますので覚えておいてください。



3. a-blog cmsの拡張アプリ zoho に認証トークンを登録

管理ページ > 拡張アプリ より「拡張アプリ管理」のページに移動します。そのページより下の図のようにZohoをインストールします。


インストール完了後は、管理ページ > ZohoよりZohoの管理ページに移動します。その後、「認証トークンの設定」という項目がありますので、その項目に先ほど覚えておいた認証トークンを入力します。 これでa-blog cmsとZohoを連携させる準備は整いました。

注意

config.server.phpでHOOKを有効にしておく必要があります。

define('HOOK_ENABLE', 1);

拡張アプリ Zohoの使い方

  1. Formの権限設定
  2. Zohoのカスタムフィールドの設定

1. Formの権限設定

フォームIDごとに、Zohoのどのスコープに対してInsert(データの挿入)及びUpdate(データの更新)ができるかを設定できます。例えば、下の画像の場合、フォームIDがcontactFormのフォームは、Leads及び、Potentialsのスコープに対してInsert権限があり、Contacts及びLeadsの項目に対してはUpdate権限があることになります。 一方で、この場合 submitFormにはLeadsのスコープに対してInsert権限があります。


2. Zohoのカスタムフィールドの設定

次は、カスタムフィールドの設定です。ここではa-blog cmsのフォーム側の変数とZoho側のカスタムフィールドの紐付けを行います。例えば、一番最初の列では、twitterの項目はzoho側のLeadsとContactsのスコープのTwitterに対応しています。


課題

simple2017のお問い合わせフォームを使って、入力された内容をZOHO CRMに見込み客(Leads)として登録しましょう。 そのとき、メールアドレス(Email)名前(First Name)苗字(Last Name)会社(Company)郵便番号(Zip Code)電話番号(Phone)が登録されるものとします。

a-blog cms で どこどこ.jpを使用してみる


IPから地域を判別して表示するコンテンツを制御してみる

今回は、どこどこ.jpというサービスを使い、アクセスしている地域により表示するコンテンツを制御してみたいと思います。

例えば、制作会社一覧ページにアクセスした時にアクセスしている県で絞り込んで表示しています。

制作者会社一覧