SOY CMS / SOY Shop

ブログトップ

SOY Inquiryから自動送信されるメールをオブジェクトから組み立てる

2015年06月09日

前回のSOY Inquiryから自動送信されるメールのお問い合わせ内容を変更したいと記事を投稿した後、

SOY Inquiryから自動送信されるメールのお問い合わせ内容の表示の修正


下記の様なメッセージがありました。


/***********************************/

ブログ記事のコードをコピーしmail.user.phpを編集してテストしたところ、住所入力部分以外はうまくいったのですが、住所入力部分は最初から前後が空行で挟まれているようでおかしな表示になってしまいます。

/***********************************/


確かに先日のmailbodyを取得して、文字列操作で書き換えだと、途中に改行コードがあるだけでおかしくなってしまいます。


今回は前回の手抜きではなく、配列に含まれているお問い合わせのオブジェクトからお問い合わせ内容の組み立て方を紹介します。




<?php
/**
 * 使用できる変数
 * $columns 各フォームのオブジェクト(入力内容も含む)
 * $this->form フォームの設定
 * $inquiryMailBody 出力されたお問い合わせ内容
 * 
 * 拡張方法
 * echo "追加したい文字列";でメールのコンテンツ末尾に追加されます。
 * $mailBody[1]の値を上書きすると出力内容が変わります。
 */
foreach($columns as $column){
	var_dump($column);
}
?>

用意されているファイルのコメント欄を見てみると、$columnsに入力内容を含むオブジェクトが含まれていると記載されていました。

このコメントを書いたのは私ですが、$columnsが使えることは忘れていました。


で、この$columnsをforeachで配列の各値を調べてみると、


object(SOYInquiry_Column)#88 (10) {
  ["id":"SOYInquiry_Column":private]=>
  string(1) "5"
  ["formId":"SOYInquiry_Column":private]=>
  string(1) "1"
  ["columnId":"SOYInquiry_Column":private]=>
  string(8) "column_1"
  ["label":"SOYInquiry_Column":private]=>
  string(6) "住所"
  ["type":"SOYInquiry_Column":private]=>
  string(7) "Address"
  ["config":"SOYInquiry_Column":private]=>
  NULL
  ["order":"SOYInquiry_Column":private]=>
  string(2) "10"
  ["require":"SOYInquiry_Column":private]=>
  string(1) "0"
  ["value":"SOYInquiry_Column":private]=>
  array(6) {
    ["zip1"]=>
    string(3) "606"
    ["zip2"]=>
    string(4) "8107"
    ["prefecture"]=>
    string(9) "京都府"
    ["address1"]=>
    string(18) "京都市左京区"
    ["address2"]=>
    string(15) "高野お豆町"
    ["address3"]=>
    string(4) "SOYビル2F"
  }
}

上記の様な値が入っています。


各オブジェクトで$column->getLabel();で項目名、

$column->getContent();でvalueの値をお問い合わせ内容用に組み立てたものを取得できます。


この仕様を利用して、


<?php
/**
 * 使用できる変数
 * $columns 各フォームのオブジェクト(入力内容も含む)
 * $this->form フォームの設定
 * $inquiryMailBody 出力されたお問い合わせ内容
 * 
 * 拡張方法
 * echo "追加したい文字列";でメールのコンテンツ末尾に追加されます。
 * $mailBody[1]の値を上書きすると出力内容が変わります。
 */

$body = "";
foreach($columns as $column){
	$body .= "■" . $column->getLabel() . "\n";
	$body .= $column->getContent() . "\n\n";
}

$mailBody[1] = trim($body);
?>

上記の様に修正して、お問い合わせをしてみると


まめくらまめぞう様

今回は○○にお問い合わせありがとうござます。
近日中に返答いたします。

■お名前
まめくらまめぞう

■メールアドレス
mamekura@omameshoji.com

■住所
606-8107
京都府京都市左京区高野お豆町
SOYビル2F

■問い合わせ内容
テストのお問い合わせです


株式会社○○
TEL:XXX-XXX-XXX
住所:東京都千代田区

上記の様なメール文面で送信される様になりました。




補足

今回のカスタマイズで問い合わせ番号と時間を表示する場合はどうすれば良い?という質問がありました。

お問い合わせ番号と時間は$inquiryMailBody内にあり、文字列操作で取得します。


<?php
/**
 * 使用できる変数
 * $columns 各フォームのオブジェクト(入力内容も含む)
 * $this->form フォームの設定
 * $inquiryMailBody 出力されたお問い合わせ内容
 * 
 * 拡張方法
 * echo "追加したい文字列";でメールのコンテンツ末尾に追加されます。
 * $mailBody[1]の値を上書きすると出力内容が変わります。
 */
$body = "";

//問い合わせ番号と時間を取得
$array = explode("\n", $inquiryMailBody);
$t_num = $array[0];	//0番には必ず問い合わせ番号が格納されている
$t_date = $array[1]; //1番には必ず問い合わせ時間が格納されている

//必要に応じてメール文面を整形してください
$body .= $t_num . "\n";
$body .= $t_date . "\n\n\n";

foreach($columns as $column){
	$body .= "■" . $column->getLabel() . "\n";
	$body .= $column->getContent() . "\n\n";
}

$mailBody[1] = trim($body);
?>

この状態でお問い合わせをしてみると、


まめくらまめぞう様

今回は○○にお問い合わせありがとうござます。
近日中に返答いたします。

問い合わせ番号: 1-5982-6558
問い合わせ日時: 2015-06-09 11:27:27

■お名前
まめくらまめぞう

■メールアドレス
mamekura@omameshoji.com

■住所
606-8107
京都府京都市左京区高野お豆町
SOYビル2F

■問い合わせ内容
テストのお問い合わせです


株式会社○○
TEL:XXX-XXX-XXX
住所:東京都千代田区