> プラグイン > プラグインで画面割り込みについて |
プラグイン
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
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以降ですね。
|
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: プラグインで画面割り込みについて
でどうでしょうか。
|
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |