EC-CUBE4でCSV出力項目をカスタマイズする方法

ECサイトでデータをCSV出力したい場面は、よくあります。
もちろん、EC-CUBE4には、データをCSV出力する機能がデフォルトで備わっています。
CSVで出力する項目の表示や非表示は、管理画面の店舗設定のCSV出力項目設定から設定できます。

しかし、新しくCSV出力する項目を追加する場合は、カスタマイズが必要です。
たとえば、受注データのお問合せのデータを出力したい場合、デフォルトではお問合せのデータは出力されません。
また、Entityをカスタマイズして新しく項目を追加した場合でも、そのままではデータの出力はされません。

出力したいデータがCSV出力されないと不便なため、この記事で、「CSVの出力項目をカスタマイズする方法」について説明します。

目次

環境

EC-CUBE4.1.2
MySQL

結論

やることは以下の2つです。

  1. dtb_csvテーブルに追加したいレコードを追加する。
  2. 管理画面の設定から店舗設定のCSV出力項目設定をクリックして、出力する順番を並び替える。

例: 「受注データCSVをカスタマイズしたい。OrderEntityにサンプルテストの項目を追加した。フィールド名はsample_test。」と仮定して説明します。

dtb_csvテーブルに追加したいレコードを追加する。

migrationでもデータベース上で直接追加でもどちらの方法でもできますが、migrationの使用をおすすめします。
なぜなら、データの追加操作はmigrationで管理したほうがわかりやすいと考えるからです。
この記事では、どちらの方法も説明します。

migrationを使用して追加する場合

STEP
migrationコマンドを使用してmigrationファイルを作成します。

ターミナルを開いて以下のコマンドを入力してください。
新しいmigrationファイルが生成されます。

php bin/console doctrine:migrations:generate
STEP
新しく生成されたmigrationファイルのupメソッドを修正します。

次のコードを参考にupメソッドを修正します。
受注データCSVのカスタマイズなので、csv_type_idは3となります。

    public function up(Schema $schema): void
    {
        // this up() migration is auto-generated, please modify it to your needs
        $this->addSql("INSERT INTO dtb_csv(csv_type_id, creator_id, entity_name, field_name, reference_field_name, disp_name, sort_no, enabled, create_date, update_date, discriminator_type) VALUES(3, null, ?, 'sample_test', null, 'サンプルテスト', 72, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'csv')", ['Eccube\\\\Entity\\\\Order']);
    }
STEP
migrationコマンドを使用して、データを反映させる。
php bin/console doctrine:migrations:migrate

※upメソッドを変更して、再度コマンドを使用した時にNo migrations to execueが出る場合は、以下のコマンドを使用してから再度migrationしてください。

php bin/console doctrine:migrations:execute --down {migrationバージョン名}

例: migrationバージョンがVersion20230311002750の場合

php bin/console doctrine:migrations:execute --down 20230311002750

データベース上で直接追加する場合

phpMyAdminから、dtb_csvテーブルをクリックして、挿入をクリックします。
以下の内容を参考に、データを入力して、実行ボタンをクリックします。
レコードが追加されていれば成功です。

csv_type_id3
entity_nameEccube\Entity\Order
field_namesample_test
disp_nameサンプルテスト
sort_no72
enabled1
create_dateテーブルを追加した日
update_dateテーブルを追加した日
discriminator_typecsv

管理画面からCSV出力項目の出力する順番を並び替える。

dtb_csvにデータを追加したら、後は管理画面からCSV出力項目の順番を変更します。
店舗設定のCSV出力項目設定をクリックして、出力する順番を並び替えましょう。
並び替えたら保存して完了です。

あとは、出力したいCSVをダウンロードしてください。

CSV出力の仕組みについて

EC-CUBE4では、CSVを出力する際、dtb_csvテーブルを参照しています。
対象のEntityは、CSV.phpです。
それぞれのフィールドについて説明します。なお、idやcreate_dateのようなフィールドの説明は省きます。

csv_type_id

mtb_csv_typeを参照しています。
ここで編集したいCSVの対象を指定します。
何も編集していなければ、以下のようになっているはずです。

1 商品CSV
2 会員CSV
3 受注CSV
4 配送CSV
5 カテゴリCSV

creator_id

レコードを作成した人のIDです。
Eccube\Entity\Memberが対象のEntityです。
商品CSVとしてレコードを追加する場合に1を指定して、その他の場合はnullで大丈夫です。

entity_name

csv_type_idと関連したEntityを指定します。
たとえば、商品CSVの場合は、ProductのEntityもしくは、ProductClassのEntityを指定します。

field_name

Entityのフィールド名です。
関連したEntityを指定することもできます。
たとえば、ProductのEntityに関連しているProductImageやProductTagなどです。

reference_field_name

field_nameがEntityの場合、field_nameで指定しているEntityのフィールド名を指定します。
field_nameがProductImageの場合、file_nameを指定するといった感じです。

disp_name

画面に表示される項目名です。
わかりやすい項目名を設定することができます。

sort_no

項目を表示する順番です。
後ほど説明する注意点も合わせてご欄ください。

enabled

出力するか出力しないかを設定します。
出力する場合は1を、出力しない場合は0を指定します。

注意点

entity_nameは関連したEntityを指定すること

たとえば、商品CSVなのに、CustomerのEntityを指定してもうまくいきません。
関連したEntityを指定するようにしましょう。

sort_noは基本的には何でも良い

レコードを追加する際、この数値は基本的には何でも大丈夫です。
重複していても構いません。
なぜなら、レコードを追加したら、管理画面からCSV出力項目の並び順を操作するからです。
並び順を操作しない場合は、同じcsv_type_idの最大のsort_noにプラスして表示すればベターだと思います。

たとえば、受注CSVだとsort_noの最大が71までなので、72を指定する、といった感じです。

ちなみに、数値が重複したままだとどうなるか試してみました。
実際に試してみたところ、数値が重複していても問題なくCSV出力されました。
ただし、sort_noの意図を考えると数値順であることを想定しているはずなので、できる限り並び順は設定するようにしましょう。

まとめ

EC-CUBE4でCSVの出力項目をカスタマイズする方法について説明しました。
dtb_csvテーブルにレコードを追加すれば良いです。
仕組みさえ理解してしまえば、問題なくCSVの出力項目を追加していけると思います。

CSVの出力項目を追加する方法に悩んでいる方は、参考にしてみてください。

よかったらシェアしてね!
  • URLをコピーしました!

ご相談・お問い合わせ

まずはお気軽にご相談ください。
Webやシステムに関することはもちろん、動画や写真、
補助金のお悩み相談も承ります。

ご相談・お問い合わせはこちら

TEL 089-968-2521受付時間:平日9:00〜18:00

目次