プラグインでdtb_csvとdtb_categoryに項目を追加した後、カテゴリをCSVで登録しようとした際に、
既存のカテゴリの上書きの場合には追加項目も登録されますが、新規項目の場合は標準で設定されている項目のみしか登録されません。
LC_Page_Admin_Products_UploadCSVCategory.phpのlfRegistCategory()にて新規カテゴリの場合は、登録しか行われないのが原因のようです。
以下の様に修正して対応させてみました。
function lfRegistCategory($objQuery, $line, &$objFormParam) {
// 登録データ対象取得
$arrList = $objFormParam->getHashArray();
// 登録時間を生成(DBのCURRENT_TIMESTAMPだとcommitした際、すべて同一の時間になってしまう)
$arrList['update_date'] = $this->lfGetDbFormatTimeWithLine($line);
// 登録情報を生成する。
// テーブルのカラムに存在しているもののうち、Form投入設定されていないデータは上書きしない。
$sqlval = SC_Utils_Ex::sfArrayIntersectKeys($arrList, $this->arrRegistColumn);
// 必須入力では無い項目だが、空文字では問題のある特殊なカラム値の初期値設定
$sqlval = $this->lfSetCategoryDefaultData($sqlval);
$where = 'category_id = ?';
if ($sqlval['category_id'] != '') {
// 同じidが存在すればupdate存在しなければinsert
$category_exists = $objQuery->exists('dtb_category', $where, array($sqlval['category_id']));
if (!$category_exists) {
$sqlval['create_date'] = $arrList['update_date'];
// 新規登録
$category_id = $this->registerCategory($sqlval['parent_category_id'],
$sqlval['category_name'],
$_SESSION['member_id'],
$sqlval['category_id']);
}
$category_id = $sqlval['category_id'];
// TODO: 削除時処理
} else {
// 新規登録
$category_id = $this->registerCategory($sqlval['parent_category_id'],
$sqlval['category_name'],
$_SESSION['member_id']);
}
// UPDATEの実行
$objQuery->update('dtb_category', $sqlval, $where, array($category_id));
return $category_id;
}
バグではなく、プラグイン側で対応するのが正解なのかもしれませんが、既存カテゴリの場合はdtb_csvで指定されたカラムを全て登録する動作になっていましたので、本体側を修正し対応しました。