フォームブロックから送られてくるメールの件名をカスタマイズしたい

2018年5月16日 at 12:09

フォームブロックから送られてくるメールの件名をカスタマイズしようと思っているのですが、
現在使用しているバージョン8.3.2は、blocks\form\controller.php内にある記述を修正しても反映されないようです。

フォームブロックは、カスタムテンプレートもblocks\form\は読み込まず、
blocks\express_formの方を読み込んでいるので、
blocks\express_form内にあるcontroller.phpを見てみたのですが、
該当しそうな箇所がみあたりません。

どなたか修正方法をご教授いただければ幸いです。

タグ:

Re: フォームブロックから送られてくるメールの件名をカスタマイズしたい

2018年5月17日 at 11:52
以前、express_formをいじって挫折しましたが、
参考になれば・・・と思い、共有します。

たぶん、該当のコア側のソースの箇所は、
src/Express/Entry/Notifier/Notification/FormBlockSubmissionEmailNotification.php
であるかと思われます。

参考になれば幸いです。
 

Re: フォームブロックから送られてくるメールの件名をカスタマイズしたい

2018年5月18日 at 13:16
返信ありがとうございます。

教えて頂いたコアファイルをコピーし
以下の場所に修正してたファイルを置いたのですが反映されないようです。
application\src\Express\Entry\Notifier\Notification

FormBlockSubmissionEmailNotification.phpのnamespaceの記述の仕方に問題があるような気がするのですが、違ってますか?
namespace Application\Src\Express\Entry\Notifier\Notification;
 

Re: フォームブロックから送られてくるメールの件名をカスタマイズしたい

2018年5月18日 at 15:51
> 教えて頂いたコアファイルをコピーし
> 以下の場所に修正してたファイルを置いたのですが反映されないようです。
> application\src\Express\Entry\Notifier\Notification

これだけでは、反映されないです。

concrete/blocks/express_form/controller.php
に、 concrete フォルダの方を読みにいくように設定されているので、
こちらの controller.php の指定部分も変更しないといけないです。


追加で修正が必要です。

簡単な方法では、
concrete/blocks/express_form/controller.php

application/blocks/express_form/controller.php
にコピーして、 namespace を「namespace Concrete\Block\ExpressForm;」から「namespace Application\Block\ExpressForm;」に変更。

「use Concrete\Core\Express\Entry\Notifier\Notification\FormBlockSubmissionEmailNotification;」を「use Application\Src\Express\Entry\Notifier\Notification\FormBlockSubmissionEmailNotification;」に変更。

これで行けると思います。


本当であれば、必要なメソッドだけを抽出して concrete5 をバージョンアップするときに調整が必要な工数を最低限にしたいですが・・・。取り急ぎ。

しかし、タイトル部分は簡単に変更できるようにはしたいかもですね。
 

Re: フォームブロックから送られてくるメールの件名をカスタマイズしたい

2018年5月22日 at 11:01
返信ありがとうございます。

教えて頂いたように
application\blocks\express_form\controller.php
の記述を2か所変更してフォームを送信してみたのですが、
以下のエラーが出て、送信できませんでした。
Class 'Application\Src\Express\Entry\Notifier\Notification\FormBlockSubmissionEmailNotification' not found

他に修正する場所が必要ですか?
 

Re: フォームブロックから送られてくるメールの件名をカスタマイズしたい

2018年5月22日 at 11:58
> 以下のエラーが出て、送信できませんでした。
> Class 'Application\Src\Express\Entry\Notifier\Notification\FormBlockSubmissionEmailNotification' not found

Class (ファイル) みつからないというエラーなので、ファイルの設置場所、大文字・小文字が気になります。

application/src/

のフォルダ名で試していただけますか?
 

Re: フォームブロックから送られてくるメールの件名をカスタマイズしたい

2018年5月23日 at 8:50
controller.phpのフォルダ名を小文字にしても、以下のような同様のエラーが出てしまいます。
Class 'application\src\Express\Entry\Notifier\Notification\FormBlockSubmissionEmailNotification' not found

コアファイルと同じように、application以下に同じ階層で設置し、大文字・小文字も同じようにしていますが、エラーが出てしまいます。

concrete\blocks\express_form\controller.php ⇒
application\blocks\express_form\controller.php

concrete\src\Express\Entry\Notifier\Notification\FormBlockSubmissionEmailNotification.php ⇒
application\src\Express\Entry\Notifier\Notification\FormBlockSubmissionEmailNotification.php

スペルもチェックしましたが、問題はなさそうです…
 

Re: フォームブロックから送られてくるメールの件名をカスタマイズしたい

2018年5月27日 at 3:54
私の方で試したところ、メールの件名を変える方法が見つかりましたので、その手順を共有いたします。

1つ前のスレッドでやりとりされている下記エラーが発生する件も含めて手順を記載します。
Class 'application\src\Express\Entry\Notifier\Notification\FormBlockSubmissionEmailNotification' not found

<手順>
1. 下記のcoreソースをapplicationディレクトリにコピーします。

(コピー元)
・concrete/src/Express/Entry/Notifier/Notification/FormBlockSubmissionEmailNotification.php
・concrete/src/Express/Entry/Notifier/Notification/FormBlockSubmissionNotification.php
・concrete/src/Express/Entry/Notifier/Notification/AbstractFormBlockSubmissionNotification.php
・concrete/blocks/express_form/controller.php

(コピー先)
・application/src/Concrete/Express/Entry/Notifier/Notification/FormBlockSubmissionEmailNotification.php
・application/src/Concrete/Express/Entry/Notifier/Notification/FormBlockSubmissionNotification.php
・application/src/Concrete/Express/Entry/Notifier/Notification/AbstractFormBlockSubmissionNotification.php
・application/blocks/express_form/controller.php


2. それぞれのソースを以下のように変更します。

2-1. application/src/Concrete/Express/Entry/Notifier/Notification/FormBlockSubmissionEmailNotification.phpの変更

2-1-1. 2行目のnamespaceを以下のように変更します
namespace Concrete\Core\Express\Entry\Notifier\Notification;

namespace Application\Concrete\Express\Entry\Notifier\Notification;

2-1-2. 73行目のnotifyメソッドの内容を変更します。
本当はexpressフォームの設定画面などから指定できればいいと思いますが、取り急ぎベタで直す方法です。

この部分でメール件名を設定しておりますので、変えたい内容に変更します。
$mh->setSubject(t('Website Form Submission – %s', $this->getFormName($entry)));

$mh->setSubject(t('件名を変更 – %s', $this->getFormName($entry)));


2-2. application/src/Concrete/Express/Entry/Notifier/Notification/FormBlockSubmissionNotification.phpの変更

2-2-1. 2行目のnamespaceを以下のように変更します
namespace Concrete\Core\Express\Entry\Notifier\Notification;

namespace Application\Concrete\Express\Entry\Notifier\Notification;

2-2-2. 7行目を以下のように変更します。
use Concrete\Block\ExpressForm\Controller as ExpressFormBlockController;

use Application\Block\ExpressForm\Controller as ExpressFormBlockController;

2-2-3. 15行目を以下のように変更します。
$subject = new EntrySubject($entry);

$subject = new \Concrete\Core\Express\Entry\Notifier\Notification\EntrySubject($entry)


2-3. application/src/Concrete/Express/Entry/Notifier/Notification/AbstractFormBlockSubmissionNotification.phpの変更

2-3-1. 2行目のnamespaceを以下のように変更します
namespace Concrete\Core\Express\Entry\Notifier\Notification;

namespace Application\Concrete\Express\Entry\Notifier\Notification;

2-3-2. 6行目を以下のように変更します。
use Concrete\Block\ExpressForm\Controller as ExpressFormBlockController;

use Application\Block\ExpressForm\Controller as ExpressFormBlockController;


2-4. application/blocks/express_form/controller.phpの変更

2-4-1. 2行目のnamespaceを以下のように変更します
namespace Concrete\Block\ExpressForm;

namespace Application\Block\ExpressForm;

2-4-2. 19行目を以下のように変更します。
use Concrete\Core\Express\Entry\Notifier\Notification\FormBlockSubmissionEmailNotification;

use Application\Concrete\Express\Entry\Notifier\Notification\FormBlockSubmissionEmailNotification;

2-4-3. 20行目を以下のように変更します。
use Concrete\Core\Express\Entry\Notifier\Notification\FormBlockSubmissionNotification;

use Application\Concrete\Express\Entry\Notifier\Notification\FormBlockSubmissionNotification;


<補足>
・application/src以下にConcreteフォルダを作成することで、concrete5のclass autoload処理で読み込みされるようになります。
参考情報:https://documentation.concrete5.org/developers/extending-concrete5-with-custom-code/extending-core-classes-in-the-application-directory

・最初に出ていた
Class 'application\src\Express\Entry\Notifier\Notification\FormBlockSubmissionEmailNotification' not foundのエラーを解消した後に発生するエラーとして、オブジェクト型が合わない、他のクラスが参照できない、といったものが発生し、それらについても対応が必要で、結果として上記のようになりました。
 

Re: フォームブロックから送られてくるメールの件名をカスタマイズしたい

2018年5月28日 at 13:35
tarojiroro さん、ありがとうございます!

私の回答は
5.7 の方法と v8 の方法がごっちゃになってました。

失礼いたしました。
 

Re: フォームブロックから送られてくるメールの件名をカスタマイズしたい

2018年7月10日 at 8:10
フォーム件名をメールテンプレートだけでカスタマイズできるように修正し、取り入れられました。
http://github.com/concrete5/concrete5/pull/6838

次期バージョン (8.4.X 以降) から、メールテンプレート内に $subject を定義するだけで、件名を変えられるようになります。

もしも、Express フォームのオーバーライドをされている場合は、オーバーライドファイルを削除して運用してください。