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_nameとfield_nameはDoctrineのエンティティ定義に合わせる- 関連エンティティの項目は「Order.Customer.name01」のようにドット区切り
- 追加した項目は管理画面で並び順を調整可能
まとめ
受注CSVのカスタマイズはdtb_csvテーブルへの項目追加で実現できます。csv_type_id=3が受注CSVなので、マイグレーションでINSERTすれば管理画面からも制御可能になります。
今回はマイグレーションを作ってデータ投入する方法をご紹介しましたが、phpMyAdminなどで直接データ登録しても問題ありません。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。
EC-CUBEゴールドパートナー