商品インポートのCSV形式は商品登録CSVファイルフォーマットにて規定されていますが、CSVから登録の必要がない項目を外したいと思っても削除できません。列数が合わないと警告が出て怒られてしまいます。

実際のお店ではEC-CUBE標準のフォーマットで対応できることはほとんどなく、独自のフォーマットで読み込みたい!という要望は必ず出てきます。

そんな時に列が不足していても更新できるようにするカスタマイズ方法をご紹介します。

修正対象ファイル:src/Eccube/Controller/Admin/Product/CsvImportController.php

列数のチェックを無効化

次の2箇所をコメントアウトしてください。

1.ヘッダーの列数をチェックしている箇所

$columnHeaders = $data->getColumnHeaders();
   if ($keys !== $columnHeaders) {
   $this->addErrors('CSVのフォーマットが一致しません。');
   return $this->render($app, $form, $headers, $this->productTwig);
}

2.各データの列数をチェックしている箇所

if ($headerSize != count($row)) {
    $this->addErrors(($data->key() + 1) . '行目のCSVフォーマットが一致しません。');
    return $this->render($app, $form, $headers, $this->productTwig);
}

任意項目を使用しないようにするだけならこれだけで対応可能なことも多いと思います。ただ必須項目をどうにかしたい場合や項目を追加したい場合はCsvImportControllerやCsvImportServiceのカスタマイズが必要になってくるはずです。

Undefined Indexのエラーが出る場合は…

削除したい項目を繰り返しの最初あたりで初期化しておくことで対応できることがあります。ケースバイケースのためご相談ください。

if(!isset($row['規格分類1(ID)'])) {
     $row['規格分類1(ID)'] = '';
}