LoginSignup
0
0

【EC-CUBE】商品CSV登録で新規追加したカラムを登録する

Posted at

概要

EC-CUBEの案件で、旧サイトから改装したサイトに商品情報を移す際

新しく追加したカラムが登録されなかったというバグがあったので、

その解決方法をシェアします。

今回解説では、商品に材料(material)カラムを追加した想定で説明します。

EC-CUBEの基礎を理解されている方向けです。

目次

  1. CSVファイルフォーマットに新しく追加したカラムを追加する

  2. CSV登録の際新しく追加したカラムの情報も登録される様にする

1.CSVファイルフォーマットに新しく追加したカラムを追加する

image.png
管理者画面の商品管理、商品CSV登録にあるCSVファイルフォーマットに新しく追加したカラムを追加します。

src/Customize/Controller/Admin/Product/CsvImportController.phpを編集
(私はappにコピーしてからそれを編集しています。)

CsvImportController.php
    /**
     * 商品登録CSVヘッダー定義
     *
     * @return array
     */
    protected function getProductCsvHeader()
    {
        return [
            trans('admin.product.product_csv.product_id_col') => [
                'id' => 'id',
                'description' => 'admin.product.product_csv.product_id_description',
                'required' => false,
            ],

                                   {# 省略 #} 

            trans('admin.product.product_csv.product_class_visible_flag_col') => [
                'id' => 'product_class_visible_flg',
                'description' => 'admin.product.product_csv.product_class_visible_flag_description',
                'required' => false,
            ],

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 追加カラム ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ここから ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

            trans('admin.product.product_csv.material_col') => [
                'id' => 'material',
                'description' => 'admin.product.product_csv.material_description',
                'required' => false,
            ],

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ここまで ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        ];
    }

※一様今回は見本に倣ってmessages.ja.yamlから文字列を持ってくる様にしたので、

src/Eccube/Resource/locale/messages.ja.yamlも編集します
(こちらもappにコピーしそれを編集したほうが良いと思います。)

messages.ja.yaml
# どこか適当なところに...
admin.product.product_csv.material_col: 材料
admin.product.product_csv.material_description: ''

image.png
このように新しい項目が追加されます。

2.CSV登録の際新しく追加したカラムの情報も登録される様にする

image.png
CSVファイルをアップロードから新しいカラムの情報を含むCSVファイルを登録したときに、

データベースに登録される様に処理を追加します。

実際にcsvアップロードの処理は先ほどと同じCsvImportController.php

csvProductメソッドで行っています。

CsvImportController.phpの350行目あたりにこのコードを追加します。

CsvImportController.php
if (isset($row[$headerByKey['material']])) {
    if (StringUtil::isNotBlank($row[$headerByKey['material']])) {
        $Product->setMaterial(StringUtil::trimAll($row[$headerByKey['material']]));
    } else {
        $Product->setMaterial(null);
    }
}

これで完了!

まとめ

EC-CUBEはもともと作り込まれたシステムにカスタマイズする形なので、

コメントアウトも多く、コピペすればなんとなくできてしまいました。。。

コードリーディングさえできれば初心者でも取っ掛かりやすいですね!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0