EC-CUBEの受注CSVエクスポート機能に独自の項目を追加する方法を解説します。src/Eccube/Service/CsvExportService.phpの仕組みを理解し、正しくカスタマイズしましょう。

CSV出力の仕組み

EC-CUBEのCSV出力はdtb_csvテーブルで項目を管理しています。CsvExportService::initCsvType()メソッドで、csv_type_idに応じた項目を取得します。

// src/Eccube/Service/CsvExportService.php:231-246
public function initCsvType($CsvType)
{
    if ($CsvType instanceof CsvType) {
        $this->CsvType = $CsvType;
    } else {
        $this->CsvType = $this->csvTypeRepository->find($CsvType);
    }

    $criteria = [
        "CsvType" => $CsvType,
        "enabled" => true,
    ];
    $orderBy = [
        "sort_no" => "ASC",
    ];
    $this->Csvs = $this->csvRepository->findBy($criteria, $orderBy);
}

CsvType定数

src/Eccube/Entity/Master/CsvType.phpで定義されています。

// src/Eccube/Entity/Master/CsvType.php
public const CSV_TYPE_PRODUCT = 1;   // 商品CSV
public const CSV_TYPE_CUSTOMER = 2;  // 会員CSV
public const CSV_TYPE_ORDER = 3;     // 受注CSV
public const CSV_TYPE_SHIPPING = 4;  // 配送CSV
public const CSV_TYPE_CATEGORY = 5;  // カテゴリCSV

項目追加の実装方法

マイグレーションでdtb_csvに項目追加(開発時)

phpMyAdminなどで直接データ登録しても問題ないですが、開発者は基本的にマイグレーションを使います。

<?php
// app/Customize/Doctrine/Migrations/VersionXXXX.php

namespace Customize\Doctrine\Migrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

class VersionXXXX extends AbstractMigration
{
    public function up(Schema $schema): void
    {
        // 受注CSV(csv_type_id = 3)に会員メモを追加
        // entity_nameはドット区切りで関連エンティティを指定
        $this->addSql("
            INSERT INTO dtb_csv 
            (csv_type_id, entity_name, field_name, disp_name, sort_no, enabled, create_date, update_date, discriminator_type) 
            VALUES 
            (3, 'Eccube\\\\Entity\\\\Order', Customer.note, '会員メモ', 200, 1, NOW(), NOW(), 'csv')
        ");
    }
}

dtb_csvテーブルの構造

カラム 説明
csv_type_id CSV種別(1:商品, 2:会員, 3:受注…)
entity_name エンティティのFQCN
field_name フィールド名(関連は.区切り)
disp_name ヘッダー表示名
sort_no 表示順
enabled 有効/無効

管理画面からの設定

マイグレーション実行後、管理画面 → 設定 → CSV出力項目設定 で項目の並び順や有効/無効を変更できます。

注意点

  • entity_namefield_nameはDoctrineのエンティティ定義に合わせる
  • 関連エンティティの項目は「Order.Customer.name01」のようにドット区切り
  • 追加した項目は管理画面で並び順を調整可能

まとめ

受注CSVのカスタマイズはdtb_csvテーブルへの項目追加で実現できます。csv_type_id=3が受注CSVなので、マイグレーションでINSERTすれば管理画面からも制御可能になります。

今回はマイグレーションを作ってデータ投入する方法をご紹介しましたが、phpMyAdminなどで直接データ登録しても問題ありません。

日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

EC-CUBEに関するお問い合わせ


    [重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。

    EC-CUBEバージョンアップ