規格あり商品をコピーして、規格なし商品を作成するということでよろしいでしょうか?
いろいろ手法はあると思いますが、ポイントになりそうな箇所を記載します。
/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
/**
* DBから商品データを取得する
*
* @param integer $product_id 商品ID
* @return array 商品データ配列
*/
public function lfGetProductData_FromDB($product_id)
{
$objQuery =& SC_Query_Ex::getSingletonInstance();
$arrProduct = array();
// 商品データ取得
$col = '*';
$table = <<< __EOF__
dtb_products AS T1
LEFT JOIN (
SELECT product_id AS product_id_sub,
product_code,
price01,
price02,
deliv_fee,
stock,
stock_unlimited,
sale_limit,
point_rate,
product_type_id,
down_filename,
down_realfilename
FROM dtb_products_class
) AS T2
ON T1.product_id = T2.product_id_sub
__EOF__;
$where = 'product_id = ?';
$objQuery->setLimit('1');
$arrProduct = $objQuery->select($col, $table, $where, array($product_id));
// カテゴリID取得
$col = 'category_id';
$table = 'dtb_product_categories';
$where = 'product_id = ?';
$objQuery->setOption('');
$arrProduct[0]['category_id'] = $objQuery->getCol($col, $table, $where, array($product_id));
// 規格情報ありなしフラグ取得
$objDb = new SC_Helper_DB_Ex();
$arrProduct[0]['has_product_class'] = $objDb->sfHasProductClass($product_id);
$arrProduct[0]['has_product_class'] = false; //←この行を追加
// 規格が登録されていなければ規格ID取得
if ($arrProduct[0]['has_product_class'] == false) {
$arrProduct[0]['product_class_id'] = SC_Utils_Ex::sfGetProductClassId($product_id,'0','0');
}
// 商品ステータス取得
$objProduct = new SC_Product_Ex();
$productStatus = $objProduct->getProductStatus(array($product_id));
$arrProduct[0]['product_status'] = $productStatus[$product_id];
// 関連商品データ取得
$arrRecommend = $this->lfGetRecommendProductsData_FromDB($product_id);
$arrProduct[0] = array_merge($arrProduct[0], $arrRecommend);
return $arrProduct[0];
}
/**
* 規格データをコピーする
*
* @param array $arrList フォーム入力パラメーター配列
* @param object $objQuery SC_Queryインスタンス
* @return boolean エラーフラグ
*/
public function lfCopyProductClass($arrList, &$objQuery)
{
// 複製元のdtb_products_classを取得(規格なしのため、1件のみの取得)
$col = '*';
$table = 'dtb_products_class';
$where = 'product_id = ?';
$where .= ' AND classcategory_id1 = 0'; //←この行を追加
$where .= ' AND classcategory_id2 = 0'; //←この行を追加
$arrProductClass = $objQuery->select($col, $table, $where, array($arrList['copy_product_id']));
//トランザクション開始
$objQuery->begin();
$err_flag = false;
//非編集項目は複製、編集項目は上書きして登録
foreach ($arrProductClass as $records) {
foreach ($records as $key => $value) {
if (isset($arrList[$key])) {
switch ($key) {
case 'stock_unlimited':
$records[$key] = (int) $arrList[$key];
break;
default:
$records[$key] = $arrList[$key];
break;
}
}
}
$records['del_flg'] = 0; //←この行を追加
$records['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id');
$records['update_date'] = 'CURRENT_TIMESTAMP';
$records['create_date'] = 'CURRENT_TIMESTAMP';
$objQuery->insert($table, $records);
//エラー発生時は中断
if ($objQuery->isError()) {
$err_flag = true;
continue;
}
}
//トランザクション終了
if ($err_flag) {
$objQuery->rollback();
} else {
$objQuery->commit();
}
return !$err_flag;
}
このままでは編集時などにも影響してしまいますので、
上記の追加した行の部分がコピー時のみ通るようになれば良さそうに思います。
なお、classcategory_id1 = 0 AND classcategory_id2 = 0 のデータが存在する前提です。
(※Ver.2.13.2で試していますが、お使いのバージョンでも同じだと思います)
ご参考になりましたら幸いです。