標準のメールフォームに確認メール送信機能とCSVを Shift JIS に変換する機能を追加する
concrete5 に標準で同梱されているフォームブロックに、フォームの送信者へも確認メールを送ることができるようにするカスタマイズと、[管理画面] - [レポート] でできる CSV 出力が元々 UTF8 エンコーディングで、MS Excel で開くと文字化けしてしまうので Shift JIS の文字コードに変換して出力するカスタマイズのコードと実装の仕方を紹介します。
※ 尚、フォーム送信者へのメール通知機能は、次期バージョンで、標準機能として本体へ取り込まれるかもしれません。
内容
- Replyto: オプションをつけたメールアドレスに確認メールを送るカスタマイズ
- CSV ダウンロードを、UTF8 ではなくて Shift JIS + CRLF 改行で行うためのカスタマイズ
免責 & License
サーバーが UTF8 の設定をしている UNIX 系のサーバーで設定する前提です。この実装による損害をうけても、一切の責任を負わないことに同意した方のみが使用してください。
動作は 5.7.5.3 で確認しました。
セットアップ方法
こちらの GitHub にあるファイルをダウンロード。
そして各ファイルを concrete5 の application
フォルダ内の同じ階層に保存してください。
他にファイルをオーバーライドしている人は、間違って、既存の application
ファイルやフォルダを削除しないようにしてください。
尚 /application/mail/block_form_submission_user.php
が、ユーザーに送られる確認メールのテンプレートです。英語のままになっているので、日本語にする必要があれば、適宜、変更してください。
技術的な説明
確認メール
確認メール送信実装部分のカスタマイズ例 (GitHub上の Diff)
- メールアドレス入力項目で replyto の設定があるメールアドレスにも確認メールを送る判定を追加
- 管理者にメールを送信した後に、フォーム送信者へ確認メールを送る処理を追加
- フォーム送信者用のメールテンプレートを追加
CSV を Shift JIS に変換するカスタマイズ例
Windows ユーザーは、Excel で CSV データを開くとき、Shift JIS でないと文字化けしてしまいます。concrete5 は UTF8 をデフォルトで使っているため、Shift JIS に変換する必要があります。
CSV の文字コード変換のカスタマイズ例 (GitHub上の Diff)
- 管理画面のシングルページの view に、encoding パラメーターを Shift JIS として埋め込み (管理画面から変更不可)
- 本当は、文字コードを選べるようにしようとも考えましたが、標準のブロックでは元々から POST でデータのやり取りがされていなく、それを実現するには、構造を変えてテストする時間が必要だったので、今回は URL パラメーターとしてShift JIS 指定を埋め込むのみにしました。
- 管理画面のシングルページの controller の form.php は基本的に csv() 関数のカスタマイズのみをカスタマイズしています。
- encoding パラメーターがあった場合に新規の処理を、encoding パラメーターがない場合は従来の処理 (UTF-8) で CSV を出力するよう分岐
- 各パラメーターを、URL で指定があった場合にエンコーディング変換するように設定
- Shift JIS の時だけ、改行コードを UNIX 系の LF から、Windows の CRLF に変換するスクリプトを分岐実行
コード
実際のコードは GitHub 上で公開しています。
https://github.com/katzueno/c5-form-support-Japanese-style
以上