質問 > その他 > プラグインのイベント処理でデータをtwigに渡したい |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
bigslope |
投稿日時: 2017/2/28 23:15
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2016/12/9 居住地: 投稿: 44 |
プラグインのイベント処理でデータをtwigに渡したい プラグインのイベント処理でデータをtwigに渡したい
あるプラグインのイベント処理関数で、twig側にデータを返したいのですが、どのようにすればよいでしょうか? プラグインのイベント処理関数 public function hogehoge(EventArgs $event) { $parameters = $event->getArgument('pagination'); $parameters["test"] = "テスト"; $event->setArgument($parameters); } では、ダメでした。 |
umebius |
投稿日時: 2017/2/28 23:26
対応状況: −−−
|
神 ![]() ![]() 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: プラグインのイベント処理でデータをtwigに渡したい twig側にデータを渡すには、「Product/list.twig」のようなテンプレートイベントに対してevent.ymlでフックして、$event->setArgument($parameters);すれば良いかと思います。
|
bigslope |
投稿日時: 2017/3/1 1:21
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2016/12/9 居住地: 投稿: 44 |
Re: プラグインのイベント処理でデータをtwigに渡したい 「Product/list.twig」だと、イベントの型が、TemplateEvent $eventなので、
$parameters = $event->getParameters(); $event->setParameters($parameters); とすれば、うまくいきますが、 イベントの型が、EventArgs $eventだと、 $pagination = $event->getArgument('pagination'); $event->setArgument($pagination); でエラーになり、うまくいきません。 $event->setArgument($parameters); の箇所で、エラーが発生しているようです。 |
umebius |
投稿日時: 2017/3/1 1:29
対応状況: −−−
|
神 ![]() ![]() 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: プラグインのイベント処理でデータをtwigに渡したい あ、申し訳ございません。確かに読み返してみたら間違いが。
twigのTemplateEventに変数渡すのは$event->setParameters($parameters);ですね。 引用:
引数が1つしかないからでは? $pagination = $event->getArgument('pagination'); あと、これは値取れているのでしょうか? EventArgsにpaginationは渡されてなかったように記憶していますが。
|
bigslope |
投稿日時: 2017/3/1 8:45
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2016/12/9 居住地: 投稿: 44 |
Re: プラグインのイベント処理でデータをtwigに渡したい >$pagination = $event->getArgument('pagination');
>あと、これは値取れているのでしょうか? はい、取れています。 呼び出し元は、 $event = new EventArgs( array( 'pagination' => $arrRecommendProduct, ), null ); $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_RECOMMEND_LIST, $event); なので、'pagination' という名前で、データを渡しています。 >twigのTemplateEventに変数渡すのは$event->setParameters($parameters);ですね。 呼び出される側のプラグイン側のイベント関数の、パラメータのデータ型が、 EventArgs $event となっているので、TemplateEventではなく、EventArgs ですよね? なので、getArgument() でデータを取得しています。 また、setParameters()が使えません。 tiwgにデータを渡すのは、setParameters()でないと渡せないのでしょうか? すみません、この辺りがよく理解できていないのですが、教えていただければ幸いです。 |
468 |
投稿日時: 2017/3/1 15:08
対応状況: −−−
|
神 ![]() ![]() 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: プラグインのイベント処理でデータをtwigに渡したい 横から失礼します。
今までいくつかプラグインを開発していますが、 個別フックポイント内の処理でtwigに対して、 新しい変数を追加して渡した事が無いのですが、出来ないのでは無いでしょうか? umebiusさんがおっしゃられるようにテンプレートフックポイントであれば、 $event->setParameters($parameters); で渡せると思うのですが・・・。 もしくは、共通フックポイントのresponseイベントでもTwigに値を渡せると思います。
|
bigslope |
投稿日時: 2017/3/1 15:36
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2016/12/9 居住地: 投稿: 44 |
Re: プラグインのイベント処理でデータをtwigに渡したい ポイントプラグインのフックポイント内で、
データは、$event->getArgument('pagination')で取得して、 $event->setArgument("point",$tmp) でポイント数を設定すると、 フックポイントの呼び出し側(おすすめ商品管理プラグイン)で、 $event = new EventArgs( array( 'pagination' => $arrRecommendProduct, ), null ); $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_RECOMMEND_LIST, $event); $point = $event->getArgument('point'); return $app->render('Block/recommend_product_block.twig', array( 'recommend_products' => $arrRecommendProduct, 'forms' => $forms, 'point' => $point, )); とすると、 おすすめ商品管理プラグイン内から、ポイントプラグインをフックポイントで呼び出して、商品ごとのポイント数を取得し、twigで表示させることが出来ました。 |
umebius |
投稿日時: 2017/3/1 15:39
対応状況: −−−
|
神 ![]() ![]() 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: プラグインのイベント処理でデータをtwigに渡したい そういった目的だったのですね。
解決して良かったです!
|
bigslope |
投稿日時: 2017/3/1 17:02
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2016/12/9 居住地: 投稿: 44 |
Re: プラグインのイベント処理でデータをtwigに渡したい ありがとうございました。
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |