ECCUBE

ECCUBEで規格のある商品を商品登録CSVで登録する方法

  • このエントリーをはてなブックマークに追加

ECサイト(ネットショップ)を作成する上でとても便利なECCUBEですが、やはり完璧とは言えません。
ただ、完璧ではないと言って諦める必要はありません。だってオープンソースだから。

というわけで、標準のECCUBEではできない「商品規格のある商品をCSVで登録する方法」をみていきましょう。

phpMyadminでデータベース編集

dtb_csvを編集します。一つ一つ編集することもできますが、ここは便利なSQL文を使いましょう。

UPDATE dtb_csv SET col = "classcategory_id1", disp_name = "規格分類ID1", rw_flg = 1 WHERE no = 3;
UPDATE dtb_csv SET col = "classcategory_id2", disp_name = "規格分類ID2", rw_flg = 1 WHERE no = 4;

コピペして実行してあげてください。

ECCUBEのファイルを編集

次は今回の修正で重要になるファイルたちの修正です。

1つ目のファイル

data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php

上記ファイルのlfCheckErrorDetail($item, $arrErr){}に次のコードを追加します。

        // 規格分類ID1の存在チェック
        if (!$this->lfIsDbRecordMulti('dtb_classcategory', 'classcategory_id', 'classcategory_id1', $item, ',')) {
            $arrErr['classcategory_id1'] = '※ 指定の規格分類ID1は、登録されていません。';
        }   
        // 規格分類ID2の存在チェック
        if (!$this->lfIsDbRecordMulti('dtb_classcategory', 'classcategory_id', 'classcategory_id2', $item, ',')) {
            $arrErr['classcategory_id2'] = '※ 指定の規格分類ID2は、登録されていません。';
        }   
        // 商品ID、規格分類ID1、規格分類ID2の組合せチェック
        if ($item['product_class_id'] == '') {
            if ($this->objDb->sfIsRecord('dtb_products_class', 'product_id, classcategory_id1, classcategory_id2'
                    , array($item['product_id'], $item['classcategory_id1'], $item['classcategory_id2']))
            ) { 
                $arrErr['classcategory_id'] = '※ 指定の商品ID、規格分類ID1、規格分類ID2の組合せは既に登録されています。';
            }   
        } 

少し長いコードなので入れ子構造に注意してください。

2つ目のファイル

data/Smarty/templates/admin/products/classcategory.tpl

管理画面で規格分類IDの確認をするために、下記のように変更を加えます。

<!--{* 規格名 *}--><!--{$arrClassCat[cnt].name|h}-->
   ↓変更↓
<!--{* 規格分類ID *}--><!--{$arrClassCat[cnt].classcategory_id|h}-->: <!--{* 規格名 *}--><!--{$arrClassCat[cnt].name|h}-->

テーブルを空にするためにSQL文を実行

DELETE FROM dtb_products;
DELETE FROM dtb_products_class;
UPDATE dtb_products_class_product_class_id_seq SET sequence = 0;
ALTER TABLE dtb_products_class_product_class_id_seq AUTO_INCREMENT = 1;
UPDATE dtb_products_product_id_seq SET sequence = 0;
ALTER TABLE dtb_products_product_id_seq AUTO_INCREMENT = 1;
DELETE FROM dtb_product_categories;
DELETE FROM dtb_product_status;

商品登録CSVを作成・アップロード

使用するCSVは管理画面よりダウンロードしてください。
項目の順序などがアップロードに影響を与えるためです。

重要な項目

商品ID規格違いの商品は同じ、かつ既存商品と重複しない
商品規格ID新規登録時は空、更新時は必須
規格分類ID1規格なしの時は「0」、ありの時は下記参照
規格分類ID2規格なしの時は「0」、ありの時は下記参照
商品名規格違いの商品は同じ
表示ステータス(公開・非公開)規格違いの商品は同じにする(1:公開 or 2:非公開)
一覧-メインコメント規格違いの商品は同じ
詳細-メインコメント規格違いの商品は同じ
削除フラグ規格毎に指定、下表参照
販売価格規格毎に指定
カテゴリID規格違いの商品は同じ

基本的には規格違いだけの商品は同じであることが分かるように設定してあげる必要があります。
で、今回重要なのは規格分類IDですね。例を見て理解しましょう。

規格なしの場合

規格分類ID1:0 規格分類ID2:0 削除フラグ:0

上記の登録のみでOKです。そもそも規格がなければ今回の設定はいらないんですが・・(笑)
商品によりけりってことで載せておきます!

規格ありの場合

規格分類ID1:0 規格分類ID2:0 削除フラグ:1
規格分類ID1:1 規格分類ID2:4 削除フラグ:0
規格分類ID1:1 規格分類ID2:5 削除フラグ:0
規格分類ID1:1 規格分類ID2:6 削除フラグ:0

これは一例ですが、この登録で、

  • バニラ×Lサイズ
  • バニラ×Mサイズ
  • バニラ×Sサイズ
の3つが登録されます。
1行目が気になるかもしれませんが、これは万が一規格を消すことがあるときのための設定です。
1行目がなくても登録はできますが、いざ商品の規格を削除するタイミングがきたときに、商品表示にエラーがでてしまうので、念のため登録しておくことをおすすめします。

  • このエントリーをはてなブックマークに追加

  関連記事

コメントを残す

*