レガシーフォームを複数使用する場合のメールテンプレートについて

2021年5月6日 at 22:47

お世話になっております。

「自動返信メールの実現」
http://concrete5-japan.org/community/forums/chat/post-19852/

こちらの投稿を参考にさせていただき、自動返信メールを送信することが出来ました。
(ありがとうございました。)

レガシーフォームを1つのサイトで複数利用し、各々のフォームに自動返信メール機能を
付加したいとおもいます。

レガシーフォームが1つの場合、自動返信メール機能を使用する場合は、
以下のようにファイルを追加しましたが、

/application/block/mail/controller.php
/application/mail/block_form_auto_reply.php

複数のレガシーフォームの場合は、どのようなファイル構成にすればよいか
ご教示いただけますでしょうか。
よろしくお願いいたします。

タグ:

Re: レガシーフォームを複数使用する場合のメールテンプレートについて

2021年5月10日 at 22:34
もうひとつ別のメール返信のテンプレートをblock_form_auto_reply.phpを複製して作ります。

block_form_auto_reply_new.php

と仮にします。

controller.phpで、メールのテンプレートを選択しているところがあります。

$myMailTemplate = "block_form_auto_reply"; // メールのテンプレート名

これを、それぞれブロックを入れた段階で、ブロックIDがつきますので
それによって振り分けます。
ブロックIDを先にbIDにしていたとして

if($bID == 1) {
$myMailTemplate = "block_form_auto_reply";
}else{
$myMailTemplate = "block_form_auto_reply_new";
}

とか
 

Re: Re: レガシーフォームを複数使用する場合のメールテンプレートについて

2021年5月14日 at 21:27
週間コンクリートで指摘を受けまして、block ID は変更して保存するとIDが変わってしまうので
ブロックの詳細で名前をつけて、その名前で判断したほうがいいようです。

$this->block->getBlockName();

で判断されたほうがいいようです。
 

Re: レガシーフォームを複数使用する場合のメールテンプレートについて

2021年5月15日 at 16:19
pictronさん

ありがとうございます!
ページ編集にて各ブロック名を設定し、controller.phpで判断できました!

助かりました、ありがとうございました!
 

Re: レガシーフォームを複数使用する場合のメールテンプレートについて

2021年8月18日 at 16:18
仮にページ編集にてフォームブロック→詳細でブロック名を「sampleform」とした場合、具体的にcontroller.phpでどのような記述になるのでしょうか?
スクリーンショット添付してます。
何行目に何を書いたらいいですか?
 

Re: レガシーフォームを複数使用する場合のメールテンプレートについて

2021年8月18日 at 18:50
$this->surveyName

にフォームの名前が入ってくるようですので、

@$mh->sendMail();

より前の任意の場所で


if (($this->surveyName =="sampleform"){
//ここにsampleformだった場合の処理を書きます
}

のようにしてメールの属性等を設定してあげれば良いと思います。
 

Re: レガシーフォームを複数使用する場合のメールテンプレートについて

2021年8月20日 at 13:01
ankenさんありがとうございます。

sampleformだった場合の処理を
$mh->load('block_form_submission_sample');

と書いたりして
@$mh->sendMail();

が2ヶ所あるのでどちらでも試してみたのですがうまくいきませんでした。

結局、添付画像のようにif・else ifを使って
$this->surveyName =="sampleform"

の時は
$mh->load('block_form_submission_sample');


else if は
$this->surveyName


$mh->load('block_form_submission_user');

としました。

「いやいやこうするんだよ」というのがあれば教えていただきたいです。
よろしくお願いいたします。
 

Re: レガシーフォームを複数使用する場合のメールテンプレートについて

2021年8月20日 at 14:34
上記のやり方では駄目でした。
sampleformではないフォームでもblock_form_submission_sampleのメールが送られるようです。
どうしたらいいのでしょうか…
 

Re: レガシーフォームを複数使用する場合のメールテンプレートについて

2021年8月20日 at 14:46
今環境がないので、確認できてませんが

if($this->block->getBlockName() == 'sampleform') {
$myMailTemplate = "block_form_submission_sample";
}else{
$myMailTemplate = "block_form_submission";
}


$mh->load($myMailTemplate);
@$mh->sendMail();

のように分岐してください。
 

Re: Re: レガシーフォームを複数使用する場合のメールテンプレートについて

2021年8月20日 at 15:09
pictronさんありがとうございます!
実現出来ました!

これはフォーム2種類の場合ですが、3つ以上違う返信メールで設置したい場合は
else if を使って増やせばいいですよね。
 

Re: レガシーフォームを複数使用する場合のメールテンプレートについて

2021年8月20日 at 15:22
はい、それで問題ないと思います。
 

Re: レガシーフォームを複数使用する場合のメールテンプレートについて

2021年8月27日 at 21:24
こんにちは。

あと、ブロック名 = メールテンプレート名にする方法もあります。

きちんと正しいブロック名をいれないといけなく、間違うとエラーになっちゃうので危険ですが・・・

$emailTemplate = $this->block->getBlockName();
// 管理者向け
$mh->load($emailTemplate);
// ユーザー向け
$mh->load($emailTemplate."_reply");

として、
applicaiton/mail/sampleform.php
applicaiton/mail/sampleform_reply.php
のメールテンプレートを使うようにするということもできます。

こうすると、メールのテンプレートを増やすだけで controller.php の改修をしなくて済みます。

パターンが多い場合はこちらがいいかもです。
 

Re: レガシーフォームを複数使用する場合のメールテンプレートについて

2021年8月30日 at 10:05
Katz Uenoさん
ありがとうございます。
それぞれ違うブロック名をつけた2つのレガシーフォームを設置しテストしたところうまくいきました。

(↓分からない人のために)
Katzさんの「標準のメールフォームに確認メール送信機能とCSVを Shift JIS に変換する機能を追加する」
http://github.com/katzueno/c5-form-support-Japanese-style
を使わせていただき、そのレガシーフォームのcontroller.phpに

$emailTemplate = $this->block->getBlockName();
を足して
$mh->load('block_form_submission_user'); を $mh->load($emailTemplate."_reply"); に変更
※↑このcontroller.phpの変更済みスクリーンショットを添付してます。

applicaiton/mail/sampleform_reply.php
を設置し、該当のレガシーフォームのブロック名をsampleformにする。

applicaiton/mail/exampleform_reply.php
を設置し、先ほどとは別のレガシーフォームのブロック名をexampleformにする。


ただ、Katzさんがおっしゃるように正しいブロック名を入れないとエラーになるし、ブロック名を入れずにレガシーフォームを設置すればそれもエラーになりますね。