SOY CMSのユーザから下記のようなお問い合わせがありました。
/*************************************************/
SOY Inquiryで設置したフォームで、お問い合わせがあった際に管理者に自動で送信されるメールで、お問い合わせ内容をコンパクトにして出力したい
/*************************************************/
上記の内容が何を言わんとしているのか?というと、
初期設定のフォームであれば、管理者に自動送信されるお問い合わせ内容は

のように見やすいけれども
件名や本文の個所に注目してもらうと、
項目名から:(コロン)までスペースが入っている。
例えば、項目名が「とても長い項目名をここに入れる」というものだった場合、

このように一番長い項目に合わせて、内容全体が整形されてしまう。
管理者に送信されるメールでは、
小さなスマホでも確認できるようにスペースを詰めて出力するにはどうすれば良いか?
というのが今回のテーマになります。
SOY Inquiryでは、要PHPではあるけれども、
フォームごとにメール文面を拡張できる機能があります。
SOY Inquiryでお問い合わせがあった場合にチャットワークに通知したいで管理者の他にチャットワークの方にも送信する際に使用したmail.admin.phpを今回も活用してみる。
defaultテンプレートを例に話を進めると、
cms
└── app
└── webapp
└── inquiry
└── src
└── template
├── _sample
├── default
│ ├── complete.php
│ ├── confirm.php
│ ├── form.php
│ ├── mail.admin.php
│ └── style.php
├── mobile
└── responsive
defaultディレクトリ以下にmail.admin.phpを配置する。
配置したmail.admin.phpの記述は下記のようにする。
<?php
/**
* 使用できる変数
* $columns 各フォームのオブジェクト(入力内容も含む)
* $this->form フォームの設定
* $inquiryMailBody 出力されたお問い合わせ内容
*
* 拡張方法
* echo "追加したい文字列";でメールのコンテンツ末尾に追加されます。
* $mailBody[0]の値を上書きすると出力内容が変わります。
*/
//お問い合わせ内容をコンパクトにして出力するサンプルコード
$lines = explode("\n", $mailBody[0]);
if(count($lines)){
$contents = array();
foreach($lines as $line){
//内容が空の場合はスルー
$c = trim(substr($line, strpos($line, ":") + 1));
if(!strlen($c)) continue;
//お問い合わせへのリンクの出力前にbreak
if(strpos($line, "--") === 0) break;
$line = trim(str_replace(array(" ", " "), "", $line));
$contents[] = $line;
}
$mailBody[0] = implode("\n", $contents);
}
ファイル設置後に公開側のフォームからお問い合わせをしてみると,

管理者に送信されるメールのみ、
お問い合わせ内容が詰めて出力されるようになった。





