バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

 > プラグイン > プラグインで画面割り込みについて

プラグイン

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kozimon
投稿日時: 2016/6/7 17:03
対応状況: −−−
半人前
登録日: 2016/5/26
居住地:
投稿: 23
プラグインで画面割り込みについて
既出だったら申し訳ありません。

特定のフックポイントからプラグインで作成したページに代わりに遷移させる。

具体的に言うと、ショッピングカートに入れる際に新規で作成した確認画面ページへ遷移させ、必要項目を入力。確認ボタンが押されると正規のルートへ回帰する。といった処理を実装したいです。

ここでショッピングカートに追加するフックポイントに絡めて、中のメソッドでどのような記述をすれば、作成したページへ割り込み遷移させることができるでしょうか?

ご教示お願い致します。
tacky
投稿日時: 2016/6/7 22:48
対応状況: −−−
長老
登録日: 2015/10/3
居住地: Tokyo
投稿: 277
Re: プラグインで画面割り込みについて
ショッピングカートに入れるタイミングでしたら
src/Eccube/Controller/ProductController.phpの
EccubeEvents::FRONT_PRODUCT_DETAIL_COMPLETEが適当かなと思います。

上記タイミングでredirectでご自身のページへ飛ばしてしまえばよいかと思います。
kozimon
投稿日時: 2016/6/8 9:59
対応状況: −−−
半人前
登録日: 2016/5/26
居住地:
投稿: 23
Re: プラグインで画面割り込みについて
割り込みタイミングは確かにご指摘のとおりでした。
しかし、そのタイミングのEvent.phpのメソッドの中で
public function onXXXXAfter(EventArgs $event){
$app = $this->app;
return $app->refirect($app->url('aaaaa'));
}
としても遷移を確認することが出来ませんでした。
なにか別の記述の仕方があるのでしょうか?

urlはデフォルトのcartなどにして試しましたがやはりだめでした。
tacky
投稿日時: 2016/6/8 10:28
対応状況: −−−
長老
登録日: 2015/10/3
居住地: Tokyo
投稿: 277
Re: プラグインで画面割り込みについて
event.ymlにはイベントを定義していますか?

そもそも処理が呼ばれていないのかもしれないので、下記の様にdumpしてみれば処理が呼ばれているか確認できます。
public function onXXXXAfter(EventArgs $event){
dump('hoge');
}
kozimon
投稿日時: 2016/6/8 10:57
対応状況: −−−
半人前
登録日: 2016/5/26
居住地:
投稿: 23
Re: プラグインで画面割り込みについて
dumpでhogeが出ることは確認できましたが、
redirectがスルーされている感じです。

ちなみに
dump('hoge');
return $app->redirect($app->url('cart'));
dump('piyo');
とすると、当然のようにpiyoは出力されません。
tacky
投稿日時: 2016/6/8 11:08
対応状況: −−−
長老
登録日: 2015/10/3
居住地: Tokyo
投稿: 277
Re: プラグインで画面割り込みについて
return $app->redirect($app->url('cart'));

$response = $app->redirect($app->url('cart'));
$response->setContent(null);
$response->send();
exit;
にしてみてください。

これで出来ると思います。
kozimon
投稿日時: 2016/6/8 11:14
対応状況: −−−
半人前
登録日: 2016/5/26
居住地:
投稿: 23
Re: プラグインで画面割り込みについて
ありがとうございました!

無事に割り込み遷移することが出来ました。

以下
public function onXXXXXCompleteAfter(EventArgs $event){
$app = $this->app;
$response = $event->getResponse();

$response = $app->redirect($app->url('cart'));
$response->setContent(null);
$response->send();
exit;
}
DELIGHT
投稿日時: 2016/6/8 11:16
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: プラグインで画面割り込みについて
3.0.9以降であれば、EventArgsにResponseをセットすればイベント後にそれを返してくれる機能が追加されました。

https://github.com/EC-CUBE/ec-cube/blob/3.0.9/src/Eccube/Controller/ProductController.php#L284

但しこれは全てのイベントに用意されている訳ではないので、他のイベントで同様の機能を利用したい場合はコントローラを都度確認して下さい。
イベント中にexitするのはプラグインとしてはお行儀が悪いので、これが利用できるのであれば極力利用した方がいいと思います。

追記:
3.0.9以降であれば、というよりEventArgsがそもそも3.0.9で追加されたクラスなので3.0.9以降ですね。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

kozimon
投稿日時: 2016/6/8 13:31
対応状況: 開発中
半人前
登録日: 2016/5/26
居住地:
投稿: 23
Re: プラグインで画面割り込みについて
event.phpの中で
$event->setResponse
するのが正規法ということでしょうか。

その場合、
if ($event->hasResponse()) {
return $event->getResponse();
}
の中で
return $app->redirect($app->url('cart');
とするには、event.phpの中でどのように記述すればよろしいのでしょうか。

public function onXXXXXXCompleteAfter(EventArgs $event){
$app = $this->app;
$response = $event->getResponse();
//$app->redirect($app->url('cart')をsetしたい。
$event->setResponse($response);
}
DELIGHT
投稿日時: 2016/6/8 13:37
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: プラグインで画面割り込みについて
$event->setResponse($app->redirect($app->url('cart')));

でどうでしょうか。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1295
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.