WordPressユーザーのbaserCMS覚え書き


遷移元のページからメールフォームに値を渡して自動補完する方法

コーポレートサイトの定番ページといえば、のメールフォーム。baserCMSのサイトにメールフォームを組み込むなら、標準装備のメールフォームプラグインを使うのが鉄板ですよね。

ところで、下に示すのはECサイトの例ですが、

オレンジで囲った「この商品について問い合わせる」をクリックすると、その先のメールフォームで

商品名が自動的に挿入される、という仕掛け。サイトを作っていますと、ときおりこういう要望が制作者に寄せられることがあるかとおもいます。

PHPに慣れている方だと「『この商品について問い合わせる』のリンク先URLに商品名を含めて、受け側でURLを解析、フォームの value 値として渡せばいいのでは?」と思われるかもしれません。じっさい、baserCMSのベースになっているCakePHPには、

<?php $query = $this->request->query['q']; ?>

といったかたちでクエリー文字列にアクセスできる仕組みがあるので、メールフォーム側に組み込めばなんとか料理できそうな気がします(詳細は リクエストとレスポンスオブジェクト — CakePHP Cookbook 2.x ドキュメント にて)。私も最初はこの方法で実装しました。

ところが、baserCMSの開発ブログにシビれる仕組みが紹介されているではありませんか。

メールフォームの初期値入力方法のご紹介
http://basercms.net/develop/archives/83

次回リリース予定の3系のメールフォームでは、メールフォーム画面を開いた際の初期値の入力を、URLから行えるようになってます。 例えばこんな感じです。

以下のURLでメールフォームにアクセスします。
http://YOUR_BASERCMS3/index.php/contact/index/name_1:ほげ

すると、メールフォームの name_1 のフィールドに「ほげ」が入ります。

複数のフィールドに対して入れたい場合は「/」(スラッシュ)で区切ると良いです。

えぇ――――っ!!
それだけで初期値入ってしまうのかい?!

   ミ~ ̄ ̄ ̄\
   / ____亅
   / > ⌒ ⌒|
  |/ (・) (・)|
  (6――○-○-|
  |   つ |
  |  ___)/
   \ (_/ /
   /\__/
  /  \><∧
  / /  V||
 /_/   |||
⊂ニu\__/Lu⊃
  |  / /
  | / /
  | / /
  (ニフフ

 

開発ブログの記述にならうと、

  • メールフォームのURL……http://example.com/inquiry
  • フォームの「商品名」欄 name 属性……item_name

とした場合、遷移元のページにおける「この商品について問い合わせる」はこのように記述すればよいことになります。
(スマートURL ONの環境を想定しました)

<?php $this->BcBaser->link('この商品について問い合わせる', '/inquiry/index/item_name:' . $this->BcBaser->getContentsTitle()) ?>

[2015.3.30追記]
バージョン3.0.5.1より記述がやや変わりました。フォームに渡す値を base64UrlsafeEncode() 関数でエンコードする必要があるようです。

たとえば上記のコードの場合

<?php $this->BcBaser->link('この商品について問い合わせる', '/inquiry/index/item_name:' . base64UrlsafeEncode($this->BcBaser->getContentsTitle())) ?>

といったかたちですね。


ちなみにWordPressでは、といいますと。

国産のフォームプラグイン3兄弟(と勝手に呼んでる)

でこのような自動補完をしたいとき、下記の情報源が参考になるかとおもいます。