質問 > 管理機能 > Repositoryへの独自関数追加方法が分かりません(プラグイン) |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
Goosuke |
投稿日時: 2021/11/5 11:40
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2021/6/9 居住地: 投稿: 11 |
Repositoryへの独自関数追加方法が分かりません(プラグイン) [EC-CUBE] 4.0.5-p1
[レンタルサーバ] ローカルxampp [OS] Windows10 [PHP] 7.4.19 [データベース] MySQL 10.4.19-MariaDB [WEBサーバ] Apache/2.4.47 (Win64) OpenSSL/1.1.1k PHP/7.4.19 [ブラウザ] Chorome [導入プラグインの有無] 無し [カスタマイズの有無] 無し dtb_order_itemを拡張して独自データを利用するプラグインを作成しています。具体的には、出荷csv出力を行った時、csv出力したOrderItemに、その日時を記録する等の処理を追加するプラグインを作成しています。 下記、①②まで記述済みで、twigから {% set csvlist = repository('Eccube\\Entity\\OrderItem').ccGetHtml_CsvExportHistory() %} で、htmlブロックを取得したいのですが全く機能しません。 ①Plugin\Entity\OrderItemTrait.php プラグイン有効化で、dtb_order_itemに目的のフィールドは追加されます。 ②Plugin\Repository\OrderItemRepository.php ------------------------------------------------------------ namespace Plugin\xxxx\Repository; use Eccube\Repository\OrderItemRepository as BaseOrderItemRepository; ・ ・ ・ class OrderItemRepository extends BaseOrderItemRepository { /** * @param array $param * @return string */ public function ccGetHtml_CsvExportHistory( array $param = null ): string { return '<p>TEST</p>'; } } ------------------------------------------------------------ 現状、実行時に、 ------------------------------------------------------------ An exception has been thrown during the rendering of a template ("Undefined method 'ccGetHtml_CsvExportHistory'. The method name must start with either findBy, findOneBy or countBy!"). ------------------------------------------------------------ とエラーが出ます。 ①②以外に何か記述が必要でしょうか? yamlとか? |
468 |
投稿日時: 2021/11/6 8:07
対応状況: −−−
|
神 ![]() ![]() 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: Repositoryへの独自関数追加方法が分かりません(プラグイン) 試した事がないので確証はないのですが、既存のRepositoryクラスにプラグインからメソッドを追加する事はできないのではないでしょうか?
>出荷csv出力を行った時、csv出力したOrderItemに、その日時を記録する等の処理を追加するプラグインを作成しています。 CSV出力時にEccubeEvents::ADMIN_ORDER_CSV_EXPORT_ORDERというフックポイントが存在していますので そのフックポイントを使う形が良いのではないかと思うのですがいかがでしょうか? twigだと正確なCSV出力時のタイミングは判定できないのではないかと思いました。
|
Goosuke |
投稿日時: 2021/11/6 8:36
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2021/6/9 居住地: 投稿: 11 |
Re: Repositoryへの独自関数追加方法が分かりません(プラグイン) ご回答ありがとうございます。
csv出力時にdtb_order_itemに日時を追加する処理・タイミングは、なんとかなりそうなのですが、今回教えていただきたいのは、csv出力時に日時を追加した後、後日、「何月何日の何時何分何秒に何件csv出力したのか」という集計を取得したいのです。 その集計結果を表示するtwigから、htmlブロックを生成する独自関数を呼び出したい、その関数をリポジトリに追加したい(メソッドとして)、という事なのです。 そもそも「リポジトリのメンバとする」というアプローチが誤ってますでしょうか? twigで再利用できる「DBを集計した結果のhtmlブロック」を作成したいという場合、リポジトリのメンバとする以外に、もっと適切な方法があるんでしょうか? この辺りの参考となるネット記事も、「カスタマイズ」なら、少数ですがあるようですが、「プラグイン」となると、全く見つけられません。 |
Goosuke |
投稿日時: 2021/11/6 8:53
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2021/6/9 居住地: 投稿: 11 |
Re: Repositoryへの独自関数追加方法が分かりません(プラグイン) 「service」の作り方が全く分かっていないのですが、こういった処理は、serviceで実装するのが正解だったり?でしょうか?
|
468 |
投稿日時: 2021/11/8 10:52
対応状況: −−−
|
神 ![]() ![]() 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: Repositoryへの独自関数追加方法が分かりません(プラグイン) >twigで再利用できる「DBを集計した結果のhtmlブロック」を作成したいという場合、リポジトリのメンバとする以外に、もっと適切な方法があるんでしょうか?
データを取り出す処理については、リポジトリにメソッドを持たせる形が適切かと思います。 リポジトリを拡張する方法に以下のような手順があるようです。 https://takelg.com/ec-cube4_customize_repository/ 過去の投稿にプラグインでリポジトリを拡張したい。という旨の投稿がありましたので 参考になるかもしれません。 https://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=26004&forum=10&move=prev&topic_time=1626761334
|
Goosuke |
投稿日時: 2021/11/8 15:16
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2021/6/9 居住地: 投稿: 11 |
Re: Repositoryへの独自関数追加方法が分かりません(プラグイン) ありがとうございました!うまく行きました!
https://takelg.com/ec-cube4_customize_repository/ につきましては、以前試してみましたが、プラグイン有効化時に、良く分からないエラー(控えていません)が出て、有効化できなかったのですが、その時のコード(services.yaml)に、エラー時に記述していなかった「autowire: true」を追加すると、スルッとインストールでき、メソッドもちゃんと呼ばれています! この辺りの仕組みに関するドキュメントなどは整備されていないのでしょうかね? しかし、、トホホな事に、追加したメソッドでは、 @return string としておりますが、htmlタグが(しっかりと)サニタイズされて戻ってきます。 @return html のような、htmlタグを返すという宣言?はできないのでしょうか? また、戻り値として定義できる型の一覧などは、ドキュメントのどの辺りに記載されているのでしょうか? ドキュメントを隅々まで読んでいる訳じゃないので「全部読め!」なのかもしれませんが・・・。 twigで{{変数}}と表示していた事が原因のようです。 {{変数|raw}}で、タグをタグとして表示できるようです。 ec-cubeは難しい・・ 少しつまずくと解決方法が皆目わからない・・ |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |