バージョン選択

フォーラム

メニュー

オンライン状況

27 人のユーザが現在オンラインです。 (16 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 27
もっと...

サイト内検索

質問 > 管理機能 > ■受注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
居住地: 東京
投稿: 774
Re: ■受注CSVへの項目追加
dtb_csvいじるだけだとダメだった気がします。OrderRepositoryが返すクエリビルダにカテゴリ周りの取得を追加しないといけなかったと思います


----------------
EC-CUBEカスタマイズ相談してください。
緊急のEC-CUBEの障害対応
EC-CUBEカスタマイズブログ

468
投稿日時: 2019/6/14 11:04
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 1860
Re: ■受注CSVへの項目追加
CSV出力の仕組みですが、コントローラー側の処理で準備されたデータ(Entity)に対して、
どの項目を出力するかという事をdtb_csvで指定しています。

受注CSV出力は、
/src/Eccube/Controller/Admin/Order/OrderController.php function exportOrder()
で実行されており、
function内の以下のsetData()の記述で対象のデータ(Entity)を渡しています。

// 受注データを検索.
$ExportCsvRow->setData($csvService->getData($Csv, $Order));
if ($ExportCsvRow->isDataNull()) {
    // 受注データにない場合は, 受注明細を検索.
    $ExportCsvRow->setData($csvService->getData($Csv, $OrderDetail));
}


ソースを見ると分かりますが、$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の結果が配列でもきちんと処理してくれます)

前置きが長くなりましたが、本題のカテゴリの値の取得ですが、
上記コントローラーの記述の下に
if ($ExportCsvRow->isDataNull()) {
    $ExportCsvRow->setData($csvService->getData($Csv, $OrderDetail->getProduct()));
}

を追記して、受注明細から商品Entityを渡せば、カテゴリ情報を取り出せるのではないかと思います。

先程、仕様について簡単に説明しましたが、
dtb_csvで指定できる範囲がリレーションで子段階までなので
データを渡す側に情報を追加する必要があるかと思います。

最初から利用している$OrderDetailからカテゴリの方法までたどり着くには
$OrderDetail->getProduct()->getProductCategories()[0]->getCategoryId()
のように孫段階までのアクセスが必要となり、
デフォルトではそこまで対応していないと思われますので。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

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への項目追加
丁寧にご解説頂きありがとうございます。
こんなに細かく書いて頂き、お時間を大分取って頂いた事と存じます。
内容がとても分かりやすく、あまり知識が無い私でも無事に実装する事が出来ました。
どうもありがとうございました。

また何かありましたらご教授頂けますと幸いです。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

ec-cube.co

統計情報

総メンバー数は51,044名です
総投稿数は93,521件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
nanasess
1984
4
468
1860
5
yuh
1604
6
red
1353
7
umebius
1296
8
h_tanaka
924
9
fukap
907
10
tsuji
856
11
shutta
835
12 ramrun 789
13
tao_s
774
14 karin 656
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
483
20 tonton 436


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.