Zen Cartハイエンド版のモジュール:product_csvで商品データの一括インポート・一括エクスポートをする

Zen Cartで商品の一括インポートやエクスポートをする際には Easypopulate というモジュールを利用する方法が一般的です。

Easypopulate の弱点として、一括インポート登録時に Easypopulate の形式に合うように整形してからアップロードする必要がある、という点が挙げられます。商品重量など「うちのショップには必要ないけれど...」と思いつつ空欄の列を用意することになるわけです。

商品データの管理をZen Cart内で完結している場合はよいですが、別のシステムなどから抽出した商品データをZen Cartへインポートする際に Easypopulate 形式に合わせる必要がある、というのはやや手間に感じることが多いものです。

Zen Cartハイエンド版のモジュール「product_csv」では、このインポート・エクスポートの形式の指定ができます。

▲「商品マスタ」の現在設定されているフォーマットの一覧
(※図版はクリックで拡大します)

商品CSVのタイプ

product_csvで インポート・エクスポートができるタイプとしては、Easypopulate と同じく「商品マスタ」「カテゴリマスタ」「オプションマスタ」の3種類があります。

「商品マスタ」タイプのインポート・エクスポート形式を複数用意することもできます。例えば、「在庫同期用」として 「商品型番,在庫,表示非表示フラグ」だけのCSV形式 をインポート・エクスポートしたい、といった使い方も可能です。

インポート・エクスポートする時は、タイプを指定して該当CSVのダウンロード・アップロードをします。

▲商品CSVのダウンロードを「在庫同期用」にした状態
(※図版はクリックで拡大します)

定義方法

「在庫同期用」として「商品型番,在庫,表示非表示フラグ」だけのCSV形式をあらかじめ作っておいたけど、これに対して 価格も変更できるようにしたい とします。そのような場合は、「在庫同期用」のCSV定義を変更することで対応できます。

↓このような形式になっているので
商品タイプ,在庫数,型番,表示非表示フラグ,無視

↓このように型番の後ろに「価格」を追加してみました
商品タイプ,在庫数,型番,価格,表示非表示フラグ,無視

これで、商品エクスポートの際に「在庫同期用」を指定してダウンロードしてみると、ちゃんと価格がダウンロードできるようになっています。また、同様にインポートも可能になります。

商品データのカスタマイズをproduct_csvに反映させるには

ちょっと複雑な要件のECサイトでは、Zen Cartの商品カラムにはない項目を追加する場合があります。

例えば、 書籍販売サイトで、商品の「ISBN」を、productsテーブルに「products_isbn」として追加したとします。
上記の定義方法のステップ1、ステップ2のやり方で、ISBNを追加したCSVをアップロードしてもプルダウンには「ISBN」という項目がありません。

このプルダウンを管理している設定ファイルにISBNを追加する必要があります。

includes/addon_modules/product_csv/languages/japanese.php より、

$GLOBALS['MODULE_PRODUCT_CSV_COLUMNS'] = array(
  array('type_id'=>'1',
    'column_id'=>'1001',
    'name'=>'商品タイプ',
    'validate'=>'validateProductTypeExists',
    'dbtable'=>'product_types',
    'dbcolumn'=>'type_handler'),
  array('type_id'=>'1',
    'column_id'=>'1002',
    'name'=>'在庫数',
    'validate'=>'validateIsSignedFloat',
    'dbtable'=>'products',
    'dbcolumn'=>'products_quantity'),

:(略)

  array('type_id'=>'1',                // ←タイプ
    'column_id'=>'1025',               // ←カラムID(他と被らないこと)
    'name'=>'ISBN',                    // ←インポート・エクスポート時の表示名
    'validate'=>'validateIsSignedInt', // ←インポート時の入力チェック
    'dbtable'=>'products',             // ←テーブル名
    'dbcolumn'=>'products_isbn'),      // ←カラム名

※記述後に追加モジュールの管理からproduct_csvの再インストールが必要です。

これにより、商品カラムに追加したISBNもプルダウンから選択してインポート・エクスポートできるようになります。

▲ISBNがプルダウンから選択できるようになった。
(※図版はクリックで拡大します)