ECCUBEの問い合わせフォームに任意の値を引数として渡す方法
2017/03/12
ECCUBEの問い合わせフォームに値を渡す方法の解説
問い合わせフォームに値を渡す
ECCUBEで、上記の画面のイメージのように、お問い合わせフォームに値を渡せるようにする方法を解説します。
この記事では商品一覧ページから商品情報を引数に問い合わせをする想定にしていますが、ボタンが設置できれば引き渡すものは商品情報に限らずなんでも OKです。
また、この記事は、ECCUBE 2.13.3で確認を行いました。
2.12系では試していませんが、大きく違わなさそうなので動くんじゃないかと思います。
テンプレートファイルの修正箇所
「お問い合わせへ」のボタンの設置
最初に「お問い合わせへ」のボタンを設置です。
最初の画像のように商品一覧の場合は下記のファイルになります。
/data/smarty/templates/default/products/list.tpl
ボタンを設置したい場所に下記のコードを追加します。
ただし、これを設置する場所は、商品情報のページなどに編集する場合は、商品情報の <form> …… </form>の間ではないところに編集する必要があります。
1 2 3 4 5 6 |
<form method="POST" action="<!--{$smarty.const.HTTPS_URL}-->contact/<!--{$smarty.const.DIR_INDEX_PATH}-->"> <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" /> <input type="hidden" name="mode" value="inquiry"> <input type="hidden" name="shohin" value="<!--{$arrProduct.name|h}-->"> <input type="submit" name="submit" value="この商品をお問い合わせ"> </form> |
「mode=inquiry」の時に「shohin」に商品情報を入れて POSTするという処理になります。
5行目の「shohin」の valueの値には「商品名($arrProduct.name)」を編集する処理になっていますが、違う値を編集する場合はここを変更してください。
<form> …… </form>の間に編集したい場合は、JavaScriptで POSTする方法を採る必要があります。
入力フォームのテンプレートに表示の追加
お問い合わせフォームの入力テンプレートに、送られてきた情報を編集する箇所を追加します。
対象ファイルは下記のファイルになります。
/data/smarty/templates/default/contact/index.tpl
以下が送られてきた情報を表示させる箇所です。テキストを表示させたい場所に追加をします。
if文で送られてきた値があるときだけ表示を行います。
1 2 3 4 |
<!--{if $arrForm.shohin.value}--> ■お問い合わせ商品: <!--{$arrForm.shohin.value|default:$arrData.shohin|h}--> <!--{/if}--> |
下記は、送られてきた情報を hiddenで保持するための設定です。
34行目あたりの「<input type=”hidden” name=”mode” value=”confirm” />」の次の行に編集するといいでしょう。
1 |
<input type="hidden" name="shohin" value="<!--{$arrForm.shohin.value|default:$arrData.shohin|h}-->" /> |
入力確認画面のテンプレートに表示の追加
お問い合わせフォームの入力確認ページに編集する箇所を追加します。
対象ファイルは下記のファイルになります。
/data/smarty/templates/default/contact/confirm.tpl
フォームの入力画面と同じく、テキストを表示させたい場所に追加をします。
1 2 3 4 |
<!--{if $arrForm.shohin.value}--> ■お問い合わせ商品: <!--{$arrForm.shohin.value|default:$arrData.shohin|h}--> <!--{/if}--> |
確認メールのテンプレートに表示の追加
入力完了後に送信される確認メールのメールテンプレートにも情報を編集する箇所を追加します。
対象ファイルは下記のファイルになります。
/data/smarty/templates/default/mail_templates/contact_mail.tpl
入力画面と同じく、テキストを表示させたい場所に追加をします。
1 2 3 |
<!--{if $arrForm.shohin.value}--> ■問い合わせ商品:<!--{$arrForm.shohin.value}--> <!--{/if}--> |
プログラムファイルの修正箇所
実際の処理をするプログラムの追加
最後に、実際に処理を行うプログラムファイルの変更を行います。
対象ファイルは下記のファイルになります。
/data/class/pages/contact/lc_page_contact.php
126行目あたりの「default:」の上あたりに編集をします。(82行目辺りにある「switch ($this->getMode()) {」の処理の分岐の一つとして、追加します。)
1 2 3 4 5 6 |
case 'inquiry': $this->lfInitParam2($objFormParam); $objFormParam->setParam($_POST); $this->arrErr = $objFormParam->checkError(); $this->arrForm = $objFormParam->getFormParamList(); break; |
最初のボタンの追加のところで説明した、「mode=inquiry」の時に「shohin」に商品情報が送られてくるため、それを受け取る処理になります。
3行目の「$_POST」で送信されてきた情報を受け取りますが、入っているのは「shohin」のみにします。
続けて、155行目辺りに下記を追加します。(「function lfInitParam(&$objFormParam)」の中の 1項目として追加します。)
1 |
$objFormParam->addParam('商品名', 'shohin', STEXT_LEN, 'KVa', array('SPTAB_CHECK', 'MAX_LENGTH_CHECK')); |
157行目辺りに下記を追加します。(「function lfInitParam(&$objFormParam)」の次の関数として追加をします。)
1 2 3 4 |
public function lfInitParam2(&$objFormParam) { $objFormParam->addParam('商品名', 'shohin', SMTEXT_LEN, 'KVa', array('EXIST_CHECK', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK')); } |
関数「lfInitParam2」として、商品情報が送られてきた状態でお問い合わせに来る場合の関数として想定していますので、「EXIST_CHECK」を入れていますが、ない場合も想定する場合は「EXIST_CHECK」は外してください。
155行目に追加する方の行には、商品に関連しないお問い合わせの場合もあるため「EXIST_CHECK」は入れていません。(この場合は、「case ‘inquiry’:」を通らず、「default」の処理の方を通ります。)
以上の対応で、お問い合わせフォームに情報を引数で渡して、確認メールにもその情報を送れるようになります。
思っていたよりは簡単に出来ましたね。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
ECCUBEの商品一覧ページのSEO対策!rel=”next” rel=”prev”を設定
Googleは関連あるページはその旨明示するよう求めています。ECCUBEの商品一覧ページでその求めに応じるための「rel=”next”」「rel=”prev”」について解説します。
-
-
Smartyの修飾子regex_replaceで正規表現の後方参照・PHPではpreg_replace
ECCUBEで使われているSmartyで文字列を正規表現で置換し後方参照で値を利用する装飾子regex_replaceの解説です。細かな条件がありますので注意が必要です。
-
-
AdminerはphpMyAdmin代替のデータベース管理ツール
AdminerはphpMyAdminとほぼ同機能のデータベース管理ツール。PHP 1ファイルのため設置が非常に簡単で軽快に動作し、phpMyAdminの置き換えで使うのも問題なし。
-
-
PHPのスクレイピングライブラリ「PHP Simple HTML DOM Parser」の使い方
PHPのスクレイピングライブラリ「PHP Simple HTML DOM Parser」の使い方を解説。要素を取得する方法、そこから属性を取得する方法を解説。また、マニュアルにはない注意点なども解説。
-
-
サーバ移転、PHPバージョンアップでPHPのソースコードが表示される・ショートタグのPHPが動かない
PHPでショートタグを使うのは危険。サーバ移転やバージョンアップで動かなくなる!ソースが丸見え、設定情報流出のリスクが!php.iniのshort_open_tagの設定を再確認。
-
-
ECCUBEの新規追加ページがInternal Server Error・Not Foundに
ECCUBEで新規追加したページがInternal Server Errorに!原因はファイルのパーミッションの場合が多くその対処方法とプログラムの修正ポイントを解説。Not Foundも解説。
-
-
Smartyのテンプレート内の処理で計算、加工をする方法
Smartyのテンプレート上で変数を計算する、加工する方法を解説します。
-
-
ob_start、ob_get_contents関数でPHPの標準出力をバッファリング・変数に代入
標準出力をバッファリングし変数に代入することができるob_start()関数の解説。include()の処理をバッファリングすることで自由な場所に処理を記述することが可能。
-
-
PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較
PHPからWebサイトにアクセスしてHTMLを取得、APIにアクセスして情報を取得する場合は、cURLがオススメ。file_get_contentsでも可能だがエラー制御に難がありトラブルのもとになる。
-
-
GMOペイメントゲートウェイのjava.io.IOExceptionのエラー
ECCUBEの決済でGMOペイメントゲートウェイのモジュールを使ってテスト決済を行った場合の不具合、java.io.IOExceptionと言うエラーの原因と対策方法の解説です。