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); }
ファイル設置後に公開側のフォームからお問い合わせをしてみると,
管理者に送信されるメールのみ、
お問い合わせ内容が詰めて出力されるようになった。