「Novius OS の問い合わせフォームで、リファラーを取得して送信できないか?」ということで調べてみました。(Novius OS は、FuelPHP, wijmo を活用した CMS です。)
Novius OS のフォームには、隠しフィールドを設定することができます。隠しフィールドは、フォームを入力する人には表示しないけれども、内部ではデータを保持しており、フォーム送信時に隠しフィールドのデータも一緒に送信されます。
ひとまず「一行テキスト」を選択します。
「一行テキスト」を「隠しフィールド」に変更します。生成元と変数名が指定できるようになります。生成元は、Get, Post, Request, Global, Session から選択できます。リファラーはサーバー変数なので、直接設定する事はできないようです。
なので、セッション変数にリファラーを格納しておき、フォームの隠しフィールドではセッション変数を取得する、という実装を考えました。FuelPHP の機能を使えば、セッション変数にリファラーを格納することが簡単だからです。
/** * Copyright Fumito MIZUNO 2013 * MIT License http://opensource.org/licenses/MIT */ Event::register_function('front.start', function() { $ref = Input::referrer(); if (filter_var($ref, FILTER_VALIDATE_URL)) { Session::set('referrer',$ref); } });
FuelPHP を使って実装
FuelPHP の機能にイベントがあります。Novius OS では、各所にイベントが設定されています。今回はフロント画面表示時に処理を追加したいので front.start を使用しています。
リファラーは、$_SERVER['HTTP_REFERER']
を直接読み込む方法もありますが、FuelPHP の Input クラスにある referrer メソッドを使用します。リファラーはユーザーが改変できるので、妥当な URL かどうかを確認してからセッション変数に格納します。セッション変数への格納は、Session クラスの set メソッドを使えば OK です。
ということで、FuelPHP の機能を使って、セッション変数にリファラーを格納することができました。フレームワークを使うと楽ですね。リファラー以外のデータをフォームで取得したい、という場合も、同様にセッション変数にセットしておけば良いです。
FuelPHP のプロファイラーで確認する
では、本当にセッション変数にリファラーを格納することができたのか、確認してみましょう。FuelPHP のプロファイラー機能を利用すると、セッション変数の値を確認することができます。(Novius OS では、開発環境(Fuel::DEVELOPMENT) ではプロファイリングがデフォルトで有効になります。)
実際にセッション変数 referrer に URL が入っていることが確認できます。
以上、FuelPHP フレームワークを使う事で、カスタマイズがしやすい、というお話でした。