> プラグイン > フロント側で商品取得している処理へ、プラグインから介入する方法 |
プラグイン
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ya50 |
投稿日時: 2017/1/19 20:23
対応状況: −−−
|
半人前 登録日: 2016/12/26 居住地: 投稿: 13 |
フロント側で商品取得している処理へ、プラグインから介入する方法 バージョン:eccube-3.0.12-p1
フロント側の商品取得処理、 ProductRepository.getQueryBuilderBySearchData()の中に、 プラグイン側から ・結合するテーブルの追加 ・where条件を追加 するような方法はありますでしょうか。 結合したいテーブルも、whereで使用する項目も、プラグインで追加したものとなります。 可能なのか分かりませんが、 ?標準のProductRepositoryをプラグイン側へコピー(とリネーム)して必要な改修を加える ?プラグインのServiceProviderで、既存の$app['eccube.repository.product']を、?のファイルで上書きする という方法を考えましたが、そのようなことは可能そうでしょうか。 試してみればよいのですが、あまり時間が取れなく、まず質問という形になってしまいました。 そもそも不能、可能だが邪道である(リスクがある)、もっといい方法がある、 など、なんでもいいのでアドバイス頂けるとありがたいです。 よろしくお願いします。 |
468 |
投稿日時: 2017/1/19 21:18
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: フロント側で商品取得している処理へ、プラグインから介入する方法 ProductRepository.getQueryBuilderBySearchData()の結果を格納した$qbが個別プラグインに渡されていると思います。
プラグイン側で、その$qbを取り出して、 QueryBuilderクラスのresetDQLPart()メソッドやgetDQLPart()メソッドを使って、部分的にDQLを組み直したりしています。 resetDQLPart()やgetDQLPart()で検索していただくと、利用方法が出てくると思います。
|
ya50 |
投稿日時: 2017/1/20 11:16
対応状況: −−−
|
半人前 登録日: 2016/12/26 居住地: 投稿: 13 |
Re: フロント側で商品取得している処理へ、プラグインから介入する方法 468様いつもご回答ありがとうございます。
フックポイントへの根本的な理解が足りてなかったのですが、 ?$app['eccube.event.dispatcher']->dispatch(EccubeEvents::フックポイント名, $event); などと記載されている箇所は、event.yml定義でプラグイン側で拾うことができる ?$event = new EventArgs()で設定している内容が参照、編集できる ということで認識はあっていますでしょうか。 重ね重ねの質問で申し訳ありません。 |
468 |
投稿日時: 2017/1/20 15:41
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: フロント側で商品取得している処理へ、プラグインから介入する方法 そうです。
>?$app['eccube.event.dispatcher']->dispatch(EccubeEvents::フックポイント名, $event); は、プラグイン仕様書で、個別フックポイントと呼ばれているフックポイントになります。 第2引数に渡しているEventArgs $eventをプラグイン側で参照する事ができます。 (プラグイン側の参照例) $qb = $event->getArgument('qb'); $eventの中身は、$event = new EventArgs()で設定している情報になりますので、 >?$event = new EventArgs()で設定している内容が参照、編集できる の認識で間違いないと思います。 プラグイン側で、$eventから取り出した情報に上書きしてあげれば、 その後のコントローラー側で利用する値にも反映されますので、 プラグイン側で変更を加える事が出来ます。
|
ya50 |
投稿日時: 2017/1/20 16:13
対応状況: 解決済
|
半人前 登録日: 2016/12/26 居住地: 投稿: 13 |
Re: フロント側で商品取得している処理へ、プラグインから介入する方法 あらかじめ検索条件をカスタマイズするための仕込みがされているんですね。
あやうく逸脱した修正を行ってしまうところでした。。。 ご教授頂いた方法で対応できるかと思いますので、 解決済みとさせて頂きます。 ご回答、ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |