エンジニ屋.com(エンジニヤドットコム)

分かりやすくを意識して情報発信!

【カスタマイズ】商品CSV登録に項目の追加方法【Eccube4】

商品CSVインポートの項目を追加

イメージ画像

商品CSV登録画面

前提

商品登録にオリジナルの項目としてJanコードを追加している状態です。

もし商品登録にオリジナルの項目の追加方法を知りたい方は、こちらをご確認ください。 enginiya.com

雛形ファイルにヘッダーを追加

商品管理→商品CSV登録ページを開くと雛形ファイルダウンロードとある。 こちらをクリックすると登録できる項目のヘッダーが自動的に出力される。先ずはこちらを追加していきます。 src\Eccube\Controller\Admin\Product\CsvImportController.phpをコピーして、 app\Customize\Controller\Admin\Product\CsvImportController.phpを作成します。 こちらのControllerで商品CSVの操作関連が定義されています。 *コピーしたら14行目のnamespaceはCustomizeに変更してください。 1373行目あたりに商品CSVヘッダー定義とコメントアウトされている箇所があります。ここに下記のように追加で記載することで、ヘッダーが追加できます。funcitonのgetProductCsvHeader()の中であれば、どこに記載しても良いですが、Janコードを追加したいので、product_codeに下に追加したいと思います。

// 1460:
trans('admin.product.product_csv.product_code_col') => [
                'id' => 'product_code',
                'description' => 'admin.product.product_csv.product_code_description',
                'required' => false,
            ],
            // JANコード 追加
            trans('admin.product.product_csv.jan_code_col') => [
                'id' => 'jan_code',
                'description' => 'admin.product.product_csv.jan_code_description',
                'required' => false,
            ],

これで、雛形のダウンロードでヘッダーの追加ができました。それと同時に管理画面の項目も追加されています。

項目名を設定

app\Customize\Resource\locale\Eccube\messages.ja.yamlに下記を追記します。

admin.product.product_csv.jan_code_col: JANコード
admin.product.product_csv.jan_code_description: ''

もし入力値の説明を表示させたい場合は、descriptionのあとに文字列を入力してください。こちらでは、空で表示させています。

CSVファイルの値の取込

これだけでは、雛形にヘッダーを表示させただけで、値は保存されます。 function csvProductの中の267行目あたりに下記コードを追加します。

if (StringUtil::isNotBlank($row[$headerByKey['jan_code']])) {
                            $Product->setJanCode(StringUtil::trimAll($row[$headerByKey['jan_code']]));
                        } else {
                            $Product->setJanCode(null);
                        }

コードの説明をするとcsvファイ内のヘッダーがjan_codeの値が空でなかったら、入力された値を保存する為、セットします。 もし値が空であれば、nullをセットしています。

以上となります。これで、csvから商品登録をする際にオリジナルの項目janコードも一緒に追加出来るように出来ました。

Have a nice developmentday!!!