Express フォームで確認メール (自動返信メール) を送るパッチ

いろいろ要望のあった、
Express フォームでも、確認メールを送れるようにするパッチを作りました。
9.0.1 のローカルで試して、送ることができるのを確認しました。

インストール方法は、英語&最低限しか書けてないですが、
以下となります。

このままだと英語になっちゃうので、

管理画面 → システムと設定 → 多言語 → サイトインターフェースを翻訳

で、指示に従って application/languages/site ディレクトリを作成して書き込み可能に設定して文字列を読み込むと、ユーザー向けの確認メールの翻訳を追加することができます。

日本語オンリーなサイトだったら、メールテンプレート PHP に直接日本語を書いてあげてもいいかと思います。

[2022/1/27 追記] YouTube にて簡単な導入動画を作成しました

GitHub での日本語の説明はあとで追加します。

1 Like

ありがとうございます。
待望の自動返信メール。
8.5.7のサイトですが、早速使わせていただいてテストしてみました。
無事にメールが届いたのですが、入力項目の全てが記載されていませんでした。
具体的には、
名前やメールアドレスなどの文字を入力してもらったりチェックボックスにチェックを入れてもらったりして、画像添付してアソシエーションの項目にチェックを入れて送信
というフォームなのですが、画像添付から下がフォーム投稿者へのメールには記載されていませんでした。
そして管理者へのメールには画像はありましたが、最後のアソシエーションの項目は記載されていませんでした。
前のメールを見返すと、アソシエーションの項目は以前からメールに記載されていなかったようです。

1 Like

@tomoyuki320 こんにちは。

あー、アソシエーションは、そもそもオリジナルの Express フォームで、管理者向けに送られるメールにも対応していないと思います。

新しい機能要望になりますし、
ちょっと複雑になりそうですね・・・。

@katz515
こんにちは。
そうなのですね。
じゃ、とりあえずこのまま運用してみます。

さきほど YouTube にインストール方法・使い方動画をアップいたしました。

最初のコメントにも追加しています。

いつもお世話になっております。
こちらに返信する事ではないかもしれないのですがConcreteCMS 8.5.7のレガシーフォームでは自動返信メールを使用していますが9.0.1のExpress フォームの作成方法などがわかりません。
勉強不足で申し訳ありませんがレガシーフォームとExpress フォームの違いやExpress フォームを使うメリットやダッシュボードのブロック追加のExpress「一覧」と「詳細」しかありません。
先日の動画(Express フォームの自動返信メールパッチ - Concrete CMS Tips - YouTube)も拝見しましたがファイルのコピーは理解しましたが設定方法がわかりませんでした。
お手数をおかけして申し訳ありませんが、よろしくお願いいたします。

@dsds こんにちは。

勉強不足で申し訳ありませんがレガシーフォームとExpress フォームの違いやExpress フォームを使うメリットやダッシュボードのブロック追加のExpress「一覧」と「詳細」しかありません。

いえいえ。

めちゃくちゃざっくり書くと、

レガシーフォームは、ユーザーから一度だけ情報を収集するだけを目的で使えます。

Express フォームは、Express を使いたい時 and/or 収集した情報を Concrete 内で何か再利用したい場合により有効的です。

そして、Express とは、ざっくりいうと Concrete の中に任意のデータベースを構築できるシステムです。

話が段々と外れます・・・ orz

参考までに、勉強会用の Express の仕組みを理解するサンプルとして、コンクリでカレー専用食べログサイトを作れるサンプルデータを公開しています。

(ちょっとコンクリのバージョンが古いですが)

Express は、ページやファイルといったもの以外の何かデータの集合体、前述のサンプルではカレー屋さんの情報をまとめるために、自分でデータの種類を定義して、データごとに関係性(前述のサンプルの場合は、カレー屋さんと、メニューのデータ)を持たせるといった仕組みを、比較的簡単に設計ができます。

SaaS サービスの、Kintone のコンクリ版のようなものと考えてもらったらいいと思います。Express 一覧 & 詳細ブロックは集めたデータを表示するものです。

あと、自社事例で申し訳ないですが、
ドキュメントデータベースなども作ってます。

話を戻すと・・・。

メリット・デメリットですが、ウェブサイトでユーザーからの一回きりのお問い合わせフォームとして使うのであれば、両者とも正直大きな違いはありません。

レガシーフォームは、簡単にフォームが作れ、情報を収集でき、仕組みもシンプルです。デメリットはシンプルすぎることです。

Express フォームは、情報を収集 or インポートしてからいろいろデータを使えることが利点ですが、そもそも「データベース」なので、使いこなそうと思うとちょっとしたデータベース構築の知識が必要です。

また、表示部分についても、データベースのデザインは千差万別なので、自分でHTML, CSS, PHP でブロックテンプレートを作成して表示させないといけないです。

その代わり、それを覚えてしまえば、前述のなんちゃって食べログサイトみたいに、簡単なウェブアプリケーションの構築が、データベースをコードなどで準備することを省ける分、簡単にできてしまいます。

すみません。具体的な設定方法は、また動画などでお教えします。

@tomoyuki320

こんにちは。

本日、9.1.1 がリリースされ、新機能として、アソシエーションの情報がフォームにも渡されるようになりました。

(まだ確認していません)

これで、自動返信メールのカスタマイズも変更が必要になるかもです。

取り急ぎ、連絡まで。

1 Like

@katz515
こんにちは。
取り急ぎのご報告なのですが、エラーになりますね。
メールも届きません。
でもデータベースに受信は出来ているし、画像の2重登録もなくなっています。

あと日付選択属性でカレンダーが表示されなかったりしました。

1 Like

@tomoyuki320 ありがとうございます。

じゃあ、コードが変わっていると思うので、パッチを修正しないとですね。

無茶振りですが、パッチをあててみますか?:grin:
であれば、やり方をお教えします。

もしくは、
週刊 Concrete CMS の配信をお休みして修正するとか、
次に時間を作って修正します

はい、やり方を教えていただければテストやります。

差分の取り方ってわかりますか?
あと、 Git や GitHub の操作方法、わかりますか?

@katz515
差分は、Visual Studio Code で表示できます。
GitHub はちゃんとさわったことがありません。

1 Like

@tomoyuki320 ちょっと時間を作って詳細のご指示をと思ったんですが、
ちょいと今週はフォーラムの数が多くなってしまったので、
まず、ざっくり説明をいたします。

Concrete CMS 9.0.2 のコアファイル
/concrete/blocks/form/controller.php
9.0.2 の時にオーバーライドしたファイル
/application/blocks/form/controller.php

この2つの Diff を確認してください。

そうしてその Diff をベースに
Concrete CMS 9.1.1 のコアファイル
/concrete/blocks/form/controller.php
から
/application/blocks/form/controller.php
に DIFF の部分を再適用するのが基本です。

ただ、9.1.1 になってコードが大幅に変わっているかもです。

まずはざっくりですいません。
わからないところがあれば、順番にお教えてします。

取り急ぎすみません、それはレガシーフォームブロックだと思うのですが、このトピックはエクスプレスフォームの自動返信メールですよね?

@tomoyuki320 ああ、すいません。間違えました。
express_form ですね。

Concrete CMS 9.0.2 のコアファイル
/concrete/express_form/form/controller.php
9.0.2 の時にオーバーライドしたファイル
/application/express_form/form/controller.php

この2つのファイルから「public function getNotifications()」 の部分の Diff を確認してください。

そうしてその Diff をベースに
Concrete CMS 9.1.1 のコアファイル
/concrete/express_form/form/controller.php
から
/application/express_form/form/controller.php
に DIFF の部分を再適用するのが基本です。

あと
/concrete/src/Express/Entry/Notifier/Notification

/application/src/Express/Entry/Notifier/Notification
の見比べもお願いします。

public function notify(Entry $entry, $updateType)

の関数の括弧内だけを見てもらえれば良いです。

それから、違うところの範囲を見ていきます。

変更箇所が多いと、それ以外の範囲に広げないといけませんが、ひとまず、ここからです。

@katz515
/express_form/form/controller.php の「public function getNotifications」の中は、相違点ありませんでした。
src/Express/Entry/Notifier/Notification/FormBlockSubmissionEmailNotification.php は sendMail の所をコピペしたりしてテストしてみましたが、ページに設置したエクスプレスフォームを送信するとエラーになります。
(エラー画面添付します)

/application/src/Express/Entry/Notifier/Notification/ の中にはもちろん「FormBlockSubmissionEmailNotification.php」をアップロードしています。

それと、ログインした状態だと datepicker のカレンダーが出るのですが、ログインしていない状態だとカレンダーが出ません。

1 Like

ちょっとお待ちください。
今週、8.5.8 & 8.5.9 リリースでドタバタしてます。

1 Like

@tomoyuki320 めちゃくちゃ遅れてしまってすいません。

ただ、
検証することができました。

Concrete CMS 9.1.1で Express Form を試し、
無事にユーザーメールも送れることを確認しました。

エラーの内容から、
もしかすると、application/bootstrap/autoload.php のオーバーライドはきちんと適用してもらえましたか気になりました。

めっちゃ遅れてすいません。

1 Like