2015年8月13日木曜日

【ECCUBE3】複数の規格がある商品をcsvで登録する。

ECCUBE2系の頃から規格が複数ある商品をcsvで登録するにはカスタマイズが必要でした。
EC CUBE3系も同様なので、商品登録csvの「規格分類1(ID)」セルにカンマ区切りで規格分類IDを入力すると登録できる仕様にしてみましょう。
※「規格分類2(ID)」には手を加えないので、「規格分類1(ID)」を使用する場合のみのカスタマイズになります。
※規格を複数登録する際、商品コード、値段はcsvに入力した値になります。規格毎に商品コードや値段を別々にしたい場合は考慮してませんのであしからず。

では、カスタマイズしていきましょう。カスタマイズ自体はほんの数行加えるだけです。
下記、csv登録のコントローラーを開きます。
/src/Eccube/Controller/Admin/Product/CsvImportController.php


174行目付近
// 商品規格が存在しなければ新規登録
$ProductClasses = $Product->getProductClasses();
if ($ProductClasses->count() < 1) {
// 規格分類1(ID)がセットされていると規格なし商品、規格あり商品を作成
$ProductClassOrg = $this->createProductClass($row, $Product, $app, $data);

を下記の様に追加します。
// 商品規格が存在しなければ新規登録
$ProductClasses = $Product->getProductClasses();
if ($ProductClasses->count() < 1) {
  //複数規格登録の追加
  $classcategory_id1 = $row['規格分類1(ID)'];
  $c_list = explode(",",$classcategory_id1);
  foreach ($c_list as $row['規格分類1(ID)'])
  {
// 規格分類1(ID)がセットされていると規格なし商品、規格あり商品を作成
$ProductClassOrg = $this->createProductClass($row, $Product, $app, $data);


233行目付近
} else {
  if ($row['規格分類2(ID)'] != '') {
   $this->addErrors(($data->key() + 1) . '行目の規格分類1(ID)が存在しません。');
  }
}
を下記の様に最後に「}」追加します。
} else {
  if ($row['規格分類2(ID)'] != '') {
   $this->addErrors(($data->key() + 1) . '行目の規格分類1(ID)が存在しません。');
  }
}
}

内容としては、規格分類1(ID)の中身を「,」で分割し、分割した分だけ規格の登録を行っています。

これで、csvで複数の規格が一回で登録可能になります。




0 コメント:

コメントを投稿