baserCMSの複数設置可能な便利メールフォームは、その着弾メールの件名に、任意のフィールドの値を入れ込むことができます。
想定している対象者
- baserCMSでウェブサイトを制作をしている方
発生状況
- 通知メールの件名に、公開側のフォームで入力・選択した値を設定したい場面
環境
- baserCMS 3.0.9
設定の仕方
メールフォーム設定画面(例: /admin/mail/mail_contents/edit/ID)で設定できる自動返信メールの「件名」に、以下の形式でフィールド名を入力する。
{$name}
上記の例は、フィールド一覧画面(/admin/mail/mail_fields/index/ID)にフィールド名「name」が存在する場合の例です。
フィールドタイプ別に確認してみた結果
- [OK] テキスト
- [OK] ラジオボタン
- [OK] セレクトボックス
- [NG] マルチチェックボックス
気になったのでソース探索。
/lib/Baser/Plugin/Mail/Controller/MailController.php の _sendEmail() に以下があった。
配列形式のフィールドは未対応だと判りました。
// 件名にフィールドの値を埋め込む
// 和暦など配列の場合は無視
if (!is_array($value)) {
if ($mailField['MailField']['type'] == 'radio' ||
$mailField['MailField']['type'] == 'select') {
$source = explode('|', $mailField['MailField']['source']);
$mailContent['subject_user'] = str_replace('{$' . $field . '}', $source[$value-1], $mailContent['subject_user']);
$mailContent['subject_admin'] = str_replace('{$' . $field . '}', $source[$value-1], $mailContent['subject_admin']);
} else {
$mailContent['subject_user'] = str_replace('{$' . $field . '}', $value, $mailContent['subject_user']);
$mailContent['subject_admin'] = str_replace('{$' . $field . '}', $value, $mailContent['subject_admin']);
}
}