詳細ページ付のカレンダーを作るでイベントの詳細ページを作ったのでそこに該当イベントに対するお問い合わせまたは申込みフォームとかついてたら便利じゃね?と思っていろいろ触ってたメモ。
完成イメージ
詳細の下にお問合せ(or申込み)フォームがついてる感じ。フォームは外部フォームブロック使いました。
外部フォームブロックの説明めんどい
外部フォームブロックは説明するの難しい・・・。ので、外部フォームブロックの詳細についてはめちゃくちゃお世話になってるconcrete5.7対応 外部フォームブロックの作り方まとめを見てほしい!
外部フォームを使用するメリットとか実際に制作するためのサンプルとか載ってます。
ここでは上記のページを参考にフォームを作った際の要点だけまとめられたらな…とか思ってます。
それからとりあえずサンプルがほしい!という方は
外部フォームのサンプルプログラムを動かしてみるといいかもしれません。
準備したファイル
application/blocks/external_form/form/ex_form.php …(フォームやエラー時・または送信後のメッセージで何を表示させるかとかの見た目まわりはこちら)
application/blocks/external_form/form/controller/ex_form.php …(必須項目を管理したり宛先を指定したりフォームを動かすための設定はこちら)
application/mail/thanksmail.php …自動返信メール用のメールテンプレート
ex_form.phpっていうのは今回experienceでページ作ったりカスタムテンプレート準備したりしてるのでそれに関するフォームだよっていう自分用の覚えも兼ねてます。
詳細は参考サイトの「外部フォームに必要なファイルの構成」部分をみてほしい!
external_form/form/ex_form.phpを作る
フォーム部分の作成を見ながらexternal_form/form/ex_form.phpファイルを作成していきます。
自分用ブックマーク:How to use the form widget in concrete5 5.7
(ラジオボタンとかセレクトメニューとかのサンプルがあります)
- 送信後に「お問い合わせが完了いたしました」みたいな表示の設定をしたり
- エラー時に「入力内容に誤りがあります」みたいな表示の設定をしたり
- フォームヘルパーを使ってフォームを作ったり
ということをしてます。
あとお問い合わせのメールが「どのページからの問い合わせ(申込み)なのか」というのも必要だと思うので、ページのタイトルとURLを取得して、非表示ヘルパーを使ってフォームに入れています。
$form->hidden($name, $value, $tagAttributes);
こんな感じで見た目ではわからないけど、実際はhiddenでタイトルとページアドレスを追加しています。
external_form/form/controller/ex_form.phpを作る
コントローラーのつくり方 を見ながらexternal_form/form/controller/ex_form.phpをガシガシ作ります。
- バリデーションの設定をしたり
- メールヘッダーを設定したり
- メールの内容を取得したり
- メールテンプレートの設定をしたり
ということをしてます。
mail/thanksmail.phpを作る
自動返信メールの内容を作ります。
お名前・メールアドレス・メッセージのほか、ページタイトルや「このメールは(ページURL)より送られました」、みたいなメッセージをガシガシ入力する。
これで外部フォームブロックの作成はひとまず終了。
ページタイプの出力設定
前回体験用の投稿タイプを作ったので、「体験」ページタイプの「出力」設定で「外部フォーム」ブロックを追加しておく。
実際のイメージ
フォーム入力画面
送信後はフォームがあった場所に送信完了メッセージがでるようにしました。
ローカルなので実際に送られてくるメールは確認してないんだけど、ログみてたら送信済みになってるのが確認できた。
美容室やエステの予約とかセミナーの予約システムみたいにうまく動かせるとイイナ~。
ブックマーク
外部フォームまわりに関するブックマーク。
concrete5.7 外部フォーム(最少)を作ってみる。
concrete5 5.7〜 いつも忘れるフォームヘルパーのまとめ