バージョン選択

フォーラム

メニュー

オンライン状況

71 人のユーザが現在オンラインです。 (51 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 71
もっと...

サイト内検索

プラグイン > 開発について > Mail/xxx.twig へのフック

開発について

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ss764020
投稿日時: 2019/3/4 20:50
対応状況: 解決済
新米
登録日: 2019/3/4
居住地:
投稿: 3
Mail/xxx.twig へのフック
[EC-CUBE] 3.0.16
[サーバ] ローカル環境:windows XAMPP, 構築環境:AWS EC2 amazon linux
[PHP] PHP 7.2.10
[データベース] mysql Ver 15.1 Distrib 10.1.36-MariaDB
[WEBサーバ] Apache/2.4.34
[ブラウザ] Firefox (latest)
[導入プラグインの有無] 独自プラグイン
[カスタマイズの有無] 該当プラグインを導入

[現象]

(1)
独自プラグインを開発しているのですが、一点問題が発生しまして、ご意見やアイデアなどあればと思い投稿させていただきます。

(2)
要件としては
パスワードリセットメールの内容を、条件ごとに変更したい
という状況です。

(3)
まず最初に、下記のようにtwig呼び出しにフックして文字列置換しようと思いました。



event.yml
にて、
Mail/forgot_mail.twig:
    - [onMail_forgot_mail_twig, NORMAL]



xxxEvent.php
にて、
public function onMail_forgot_mail_twig(TemplateEvent $event)
{
    $search   = 'hoge';
    $addHtml = 'fuga';
    $newHtml  = $search . $addHtml;
    $dispHtml = str_replace($search, $newHtml, $baseHtml);
    $dispHtml = str_replace($search, $newHtml, $baseHtml);
    return;
}



(4)
ところが、
Mail/forgot_mail.twig
へのフックというのはどうやら動作しないようです。


(5)
Mail/forgot_mail.twig
でフックできるであろう
というのは、下記の記事を参考にしました。
http://blog.zamuu.net/2017/0302/eccube3_about_hooks/


(6)
どうやらうまくフックできていないのでは?と思い、下記の記事を見つけました。
https://github.com/EC-CUBE/ec-cube/issues/543

twig呼び出しがrender()で実装されている箇所に関してはフックされるが、renderView()で実装されている箇所に関してはフックされないということのようです。

/src/Eccube/Service/MailService.php

にて、該当箇所がrenderView()で実装されていることを確認しましたので、おそらくこれが原因であるということになるかと思います。
(※ためしに該当箇所のrenderView()をrender()に書き換えたところ、メールの内容が「HTTP/1.0 200 OK」といったものとなってしまうのですが、フックによる文字列置換はうまくいくことを確認しました)


(7)
どうにかうまくフックさせて文字列置換を実行する

もしくは、

条件により別のtwigファイルを読み込ませる


といったことができればと思うのですが、
何かよい考えやノウハウなどお持ちの方おられませんでしょうか。
umebius
投稿日時: 2019/3/4 21:45
対応状況: −−−
登録日: 2016/7/22
居住地: 東京日本橋
投稿: 1296
Re: Mail/xxx.twig へのフック
Twigを置き換えるというよりはメールオブジェクトの本文を置き換えるという考えの方が良いかもしれません。

例えばポイントプラグインは'mail.order'イベントを使用して本文にポイントのデータを挿入しています。

受注メールはユーザー自身が書き換えることが多いのでうまくやらないと変なメールになることが多いですが...


---------

あとはプラグインの有効化時にMail/order.twigをファイルごと置き換えてしまうプラグインや$app['eccube.service.mail']を自身のクラスで置き換えてしまうプラグインもありますが、全体の拡張性が犠牲になるのでおすすめはできません。


----------------
EC-CUBE3系4系 カスタマイズ ECのプロがシステム特急案件承ります。
公式インテグレートパートナー (株)U-Mebius

ss764020
投稿日時: 2019/3/7 14:04
対応状況: −−−
新米
登録日: 2019/3/4
居住地:
投稿: 3
Re: Mail/xxx.twig へのフック
確認、ご返信遅くなり申し訳ございません。

(実は本コミュニティで始めての投稿でして、自分が立てたスレッドであれば、返信があった際に通知メールがくるものと思っていて、メールが来ていなかったので返信されていないものかと思っていました。今気づきましたけど、スレッドにオプションで通知設定があるのですね。)


ありがとうございます!



例に挙げていただいた

引用:
ポイントプラグイン


のソースを確認しましたが、こちらのソースを参考に、かなり理想に近いかたちで実装ができそうです。




本日中にうまい方法が見つからなければ

引用:
$app['eccube.service.mail']を自身のクラスで置き換えてしまう


という方向性で実装を進めようかと考えていたところでして、本当にありがたいご意見です。



では、一度こちらの方法で実装進めてみます。


取り急ぎご報告までに。
umebius
投稿日時: 2019/3/7 17:23
対応状況: −−−
登録日: 2016/7/22
居住地: 東京日本橋
投稿: 1296
Re: Mail/xxx.twig へのフック
そうですね、私もポイントプラグインの方式が現状では良いのかなと思っています。
また何かございましたらご投稿お願い致します。
ss764020
投稿日時: 2019/3/8 19:05
対応状況: −−−
新米
登録日: 2019/3/4
居住地:
投稿: 3
Re: Mail/xxx.twig へのフック
こちらの件、先日ご提案いただいた方向性で無事実装完了いたしました。

本当にありがとうございました!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

ec-cube.co

統計情報

総メンバー数は49,643名です
総投稿数は93,194件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
nanasess
1968
4
468
1818
5
yuh
1602
6
red
1343
7
umebius
1296
8
fukap
907
9
h_tanaka
907
10
tsuji
856
11
shutta
835
12 ramrun 789
13
tao_s
774
14 karin 656
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
483
20 tonton 436


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.