質問 > 管理機能 > ■受注CSVへの項目追加 |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
tetsurou |
投稿日時: 2019/6/13 17:01
対応状況: 開発中
|
半人前 登録日: 2019/1/15 居住地: 投稿: 30 |
■受注CSVへの項目追加 ▼テンプレート
[EC-CUBE] 3.0.17 [レンタルサーバ] AWS [OS] Windows10 [PHP] 7.2.11 [データベース] MySQL 5.7.24 [WEBサーバ] Apache 2.4.34 [ブラウザ] Chrome最新 [教えてほしい点] 現在、受注CSVへの出力項目追加の開発を行っております。 追加したい項目は【カテゴリID】と【カテゴリ名】になります。 様々なサイトを確認しながら、CSVの項目に上の2つを追加する事はできましたが、値がCSVに出力されません。 ちなみにdtb_csvに登録している情報は下記となります。 ■カテゴリIDの登録情報 csv_id:200 csv_type:3 creator_id:1 entity_name:Eccube\Entity\Product field_name:ProductCategories reference_field_name:category_id disp_name:商品カテゴリ(ID) rank:22 ■カテゴリ名の登録情報 csv_id:201 csv_type:3 creator_id:1 entity_name:Eccube\Entity\Product field_name:ProductCategories reference_field_name:Category disp_name:商品カテゴリ(名称) rank:23 商品情報の行をコピーして作成したのですが、動作をしません。 値を取得する方法についてご教授頂けますと幸いです。 何卒よろしくお願いいたします。 |
tao_s |
投稿日時: 2019/6/14 9:59
対応状況: −−−
|
仙人 登録日: 2008/8/20 居住地: 東京 投稿: 799 |
Re: ■受注CSVへの項目追加 dtb_csvいじるだけだとダメだった気がします。OrderRepositoryが返すクエリビルダにカテゴリ周りの取得を追加しないといけなかったと思います
|
468 |
投稿日時: 2019/6/14 11:04
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: ■受注CSVへの項目追加 CSV出力の仕組みですが、コントローラー側の処理で準備されたデータ(Entity)に対して、
どの項目を出力するかという事をdtb_csvで指定しています。 受注CSV出力は、 /src/Eccube/Controller/Admin/Order/OrderController.php function exportOrder() で実行されており、 function内の以下のsetData()の記述で対象のデータ(Entity)を渡しています。
ソースを見ると分かりますが、$Orderと$OrderDetailは渡していますが、 $Productは渡していません。 その為、dtb_csv.entity_nameで指定したEccube\Entity\Productは見つからないと判断されて、値が空のまま出力されています。 dtb_csvのcsv_type:3の他のレコードを確認いただくと分かりますが、 entity_nameには「Eccube\Entity\Order」「Eccube\Entity\OrderDetail」が格納されていると思います。 デフォルトでは$Orderと$OrderDetailしか利用していないからです。 内部的には、[dtb_csv.entity_name]->get[dtb_csv.field_name]() を実行して値を取り出す仕様となります。 reference_field_nameを指定すれば、 [dtb_csv.entity_name]->get[dtb_csv.field_name]()->get[reference_field_name]() とさらに子Entityの値を取り出してくれます。 (dtb_csv.field_nameの結果が配列でもきちんと処理してくれます) 前置きが長くなりましたが、本題のカテゴリの値の取得ですが、 上記コントローラーの記述の下に
を追記して、受注明細から商品Entityを渡せば、カテゴリ情報を取り出せるのではないかと思います。 先程、仕様について簡単に説明しましたが、 dtb_csvで指定できる範囲がリレーションで子段階までなので データを渡す側に情報を追加する必要があるかと思います。 最初から利用している$OrderDetailからカテゴリの方法までたどり着くには $OrderDetail->getProduct()->getProductCategories()[0]->getCategoryId() のように孫段階までのアクセスが必要となり、 デフォルトではそこまで対応していないと思われますので。
|
tetsurou |
投稿日時: 2019/6/14 11:55
対応状況: 開発中
|
半人前 登録日: 2019/1/15 居住地: 投稿: 30 |
Re: ■受注CSVへの項目追加 ご教授頂きありがとうございます。
おっしゃる通り、dtb_csv以外も設定が必要なようです。 OrderRepositoryについて確認してみます。 |
tetsurou |
投稿日時: 2019/6/14 12:34
対応状況: 解決済
|
半人前 登録日: 2019/1/15 居住地: 投稿: 30 |
Re: ■受注CSVへの項目追加 丁寧にご解説頂きありがとうございます。
こんなに細かく書いて頂き、お時間を大分取って頂いた事と存じます。 内容がとても分かりやすく、あまり知識が無い私でも無事に実装する事が出来ました。 どうもありがとうございました。 また何かありましたらご教授頂けますと幸いです。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |