質問 > 管理機能 > ■受注CSVへの項目追加 |
管理機能
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
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() のように孫段階までのアクセスが必要となり、 デフォルトではそこまで対応していないと思われますので。
|
フラット表示 | 前のトピック | 次のトピック |
題名 | 投稿者 | 日時 |
---|---|---|
■受注CSVへの項目追加 | tetsurou | 2019/6/13 17:01 |
Re: ■受注CSVへの項目追加 | tao_s | 2019/6/14 9:59 |
Re: ■受注CSVへの項目追加 | tetsurou | 2019/6/14 11:55 |
» Re: ■受注CSVへの項目追加 | 468 | 2019/6/14 11:04 |
Re: ■受注CSVへの項目追加 | tetsurou | 2019/6/14 12:34 |