バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

開発について

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ss764020
投稿日時: 2019/3/8 19:05
対応状況: −−−
新米
登録日: 2019/3/4
居住地:
投稿: 3
Re: Mail/xxx.twig へのフック
こちらの件、先日ご提案いただいた方向性で無事実装完了いたしました。

本当にありがとうございました!
umebius
投稿日時: 2019/3/7 17:23
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: Mail/xxx.twig へのフック
そうですね、私もポイントプラグインの方式が現状では良いのかなと思っています。
また何かございましたらご投稿お願い致します。
ss764020
投稿日時: 2019/3/7 14:04
対応状況: −−−
新米
登録日: 2019/3/4
居住地:
投稿: 3
Re: Mail/xxx.twig へのフック
確認、ご返信遅くなり申し訳ございません。

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


ありがとうございます!



例に挙げていただいた

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


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




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

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


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



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


取り急ぎご報告までに。
umebius
投稿日時: 2019/3/4 21:45
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: Mail/xxx.twig へのフック
Twigを置き換えるというよりはメールオブジェクトの本文を置き換えるという考えの方が良いかもしれません。

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

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


---------

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


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

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ファイルを読み込ませる


といったことができればと思うのですが、
何かよい考えやノウハウなどお持ちの方おられませんでしょうか。
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,288名です
総投稿数は109,688件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

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

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