/** * 保存组合商品类型相关数据 * * @param array $product * @return boolean */ public static function save(&$product) { //先创建商品数据ID if (empty($product['id'])) { $pdata = array('create_time' => time()); $product['id'] = ProductService::get_instance()->add($pdata); } $product['pdt_category_additional_id'] = isset($product['pdt_category_additional_id']) ? implode(',', $product['pdt_category_additional_id']) : ''; // 将商品类型设置为 0 简单商品处理 if (!empty($product['pdt_goods'])) { $attroptrs = array(); $product['store'] = 0; $product['on_sale'] = 0; $product['default_goods'] = 0; foreach ($product['pdt_goods'] as $index => $good) { $good['type'] = ProductService::PRODUCT_TYPE_GOODS; $good['product_id'] = $product['id']; $good['classify_id'] = $product['classify_id']; $good['brand_id'] = $product['brand_id']; $good['category_id'] = $product['category_id']; $good['is_wholesale'] = $product['is_wholesale']; $good['category_ids'] = $product['pdt_category_additional_id']; $good['unit'] = $product['unit']; $good['name_manage'] = $product['name_manage']; $good['uri_name'] = $product['uri_name'] . $index; $good['meta_title'] = $product['meta_title']; $good['meta_keywords'] = $product['meta_keywords']; $good['meta_description'] = $product['meta_description']; $good['brief'] = $product['brief']; $good['made_date'] = $product['made_date']; $good['quality_date'] = $product['quality_date']; $good['quality_percent'] = $product['quality_percent']; isset($good['default_goods']) || ($good['default_goods'] = 0); isset($good['front_visible']) || ($good['front_visible'] = 0); isset($good['on_sale']) || ($good['on_sale'] = 0); empty($good['sku']) and $good['sku'] = product::create_good_sku($product['sku']); empty($good['title']) and $good['title'] = product::create_good_title($product['title'], $good['attroptrs']); $good['attribute_struct'] = array('items' => array_keys($good['attroptrs'])); $good['attribute_struct_default'] = array('items' => $good['attroptrs']); // 获取商品与规格值的关联 foreach ($good['attroptrs'] as $aid => $oid) { $aid = (string) $aid; $oid = (string) $oid; isset($attroptrs[$aid]) or $attroptrs[$aid] = array(); in_array($oid, $attroptrs[$aid]) or $attroptrs[$aid][] = $oid; } // 商品价格等信息从默认货品获取 if ($good['default_goods'] == 1) { $product['price'] = $good['price']; $product['market_price'] = $good['market_price']; $product['cost'] = $good['cost']; $product['weight'] = $good['weight']; } // 判断商品的上下架 if ($product['on_sale'] == 0 && $good['on_sale'] == 1) { $product['on_sale'] = 1; } // 计算商品的库存 if ($good['store'] > 0) { $product['store'] += $good['store']; } // 处理货品的关联商品图片 if (!empty($good['picrels'])) { is_array($good['picrels']) or $good['picrels'] = explode(',', $good['picrels']); /*foreach ($good['picrels'] as $i => $picrel) { if (!isset($product['pictures'][$picrel])) { unset($good['picrels'][$i]); } }*/ if (!empty($good['picrels'])) { $good['goods_productpic_relation_struct'] = array('items' => $good['picrels']); } } else { $good['goods_productpic_relation_struct'] = array(); } $product['pdt_goods'][$index] = $good; } // 商品价格等信息从默认货品获取 if (!isset($product['price']) || $product['price'] == 0) { $product['price'] = $product['pdt_goods'][$index]['price']; $product['market_price'] = $product['pdt_goods'][$index]['market_price']; $product['cost'] = $product['pdt_goods'][$index]['cost']; $product['weight'] = $product['pdt_goods'][$index]['weight']; } //dump($product['pdt_goods']); //删除组合商品、所有被关联的简单商品旧属性,然后保存新的属性 ORM::factory('product_attributeoption_relation')->where('product_id', $product['id'])->delete_all(); ORM::factory('product_attributeoption_relation')->where('assembly_id', $product['id'])->delete_all(); foreach ($attroptrs as $aid => $oids) { foreach ($oids as $oid) { Product_attributeoption_relationService::get_instance()->add(array('apply' => AttributeService::ATTRIBUTE_SPEC, 'product_id' => $product['id'], 'attribute_id' => $aid, 'attributeoption_id' => $oid)); } } $product['attribute_struct'] = array('items' => array_keys($attroptrs)); $product['attribute_struct_default'] = array('items' => $attroptrs); //获取原有货品ID $old_gids = array(); $old_goods = ProductService::get_instance()->index(array('where' => array('product_id' => $product['id']))); foreach ($old_goods as $good) { $old_gids[$good['id']] = TRUE; } // 保存货品、货品与规格值关联、货品与商品图片关联 foreach ($product['pdt_goods'] as $index => $good) { $good = coding::encode_good($good); if (isset($good['id'])) { unset($old_gids[$good['id']]); $good['update_time'] = time(); ProductService::get_instance()->update($good); } else { $good['create_time'] = time(); $good['id'] = ProductService::get_instance()->add($good); } //记录简单商品的所有规格信息 foreach ($good['attroptrs'] as $aid => $oid) { Product_attributeoption_relationService::get_instance()->add(array('apply' => AttributeService::ATTRIBUTE_SPEC, 'assembly_id' => $product['id'], 'product_id' => $good['id'], 'attribute_id' => $aid, 'attributeoption_id' => $oid)); } $product['pdt_goods'][$index] = $good; } if (!empty($old_gids)) { ORM::factory('product')->in('id', array_keys($old_gids))->delete_all(); } } else { //处理默认货品 //ORM::factory('product_attributeoption_productpic_relation')->where('product_id', $product['id'])->delete_all(); ORM::factory('product_attributeoption_relation')->where('product_id', $product['id'])->delete_all(); ORM::factory('product_attributeoption_relation')->where('assembly_id', $product['id'])->delete_all(); ORM::factory('product')->where('product_id', $product['id'])->delete_all(); $product['default_goods'] = 1; } //更新商品数据 $data = array('front_visible' => 1, 'id' => $product['id'], 'type' => ProductService::PRODUCT_TYPE_ASSEMBLY, 'default_goods' => $product['default_goods'], 'classify_id' => $product['classify_id'], 'is_wholesale' => $product['is_wholesale'], 'brand_id' => $product['brand_id'], 'category_id' => $product['category_id'], 'category_ids' => $product['pdt_category_additional_id'], 'title' => $product['title'], 'name_manage' => $product['name_manage'], 'uri_name' => $product['uri_name'], 'sku' => $product['sku'], 'unit' => $product['unit'], 'price' => $product['price'], 'market_price' => $product['market_price'], 'cost' => $product['cost'], 'weight' => $product['weight'], 'store' => $product['store'], 'on_sale' => $product['on_sale'], 'meta_title' => $product['meta_title'], 'meta_keywords' => $product['meta_keywords'], 'meta_description' => $product['meta_description'], 'brief' => $product['brief'], 'attribute_struct' => isset($product['attribute_struct']) ? json_encode($product['attribute_struct']) : '', 'attribute_struct_default' => isset($product['attribute_struct_default']) ? json_encode($product['attribute_struct_default']) : '', 'made_date' => $product['made_date'], 'quality_date' => $product['quality_date'], 'quality_percent' => $product['quality_percent']); ProductService::get_instance()->update($data); }
/** * 保存可配置商品类型相关数据 * * @param array $product * @return boolean */ public static function save(&$product) { //先创建商品数据ID if (empty($product['id'])) { $pdata = array('create_time' => time()); $product['id'] = ProductService::get_instance()->add($pdata); } $product['pdt_category_additional_id'] = isset($product['pdt_category_additional_id']) ? implode(',', $product['pdt_category_additional_id']) : ''; //简单商品处理 if (!empty($product['pdt_goods'])) { $attroptrs = array(); $is_default = false; $product['price'] = 0; $product['store'] = 0; $product['on_sale'] = 0; $product['default_goods'] = 0; foreach ($product['pdt_goods'] as $index => $good) { //简单商品基本信息初始从可配置商品中获得 if (empty($good['id'])) { $good['type'] = ProductService::PRODUCT_TYPE_GOODS; $good['classify_id'] = $product['classify_id']; $good['brand_id'] = $product['brand_id']; $good['category_id'] = $product['category_id']; $good['is_wholesale'] = $product['is_wholesale']; $good['category_ids'] = $product['pdt_category_additional_id']; $good['unit'] = $product['unit']; $good['name_manage'] = $product['name_manage']; $good['uri_name'] = $product['uri_name'] . $index; $good['meta_title'] = $product['meta_title']; $good['meta_keywords'] = $product['meta_keywords']; $good['meta_description'] = $product['meta_description']; $good['brief'] = $product['brief']; } else { if ($good['id'] > 0) { //更新简单商品一部分基本信息 $good_org = ProductService::get_instance()->get($good['id']); $good_org['is_wholesale'] == 0 && ($good['is_wholesale'] = $product['is_wholesale']); empty($good_org['category_ids']) && ($good['category_ids'] = $product['pdt_category_additional_id']); empty($good_org['meta_title']) && ($good['meta_title'] = $product['meta_title']); empty($good_org['meta_keywords']) && ($good['meta_keywords'] = $product['meta_keywords']); empty($good_org['meta_description']) && ($good['meta_description'] = $product['meta_description']); empty($good_org['brief']) && ($good['brief'] = $product['brief']); unset($good_org); } } isset($good['default_goods']) || ($good['default_goods'] = 0); isset($good['front_visible']) || ($good['front_visible'] = 0); isset($good['on_sale']) || ($good['on_sale'] = 0); empty($good['sku']) && ($good['sku'] = product::create_good_sku($product['sku'])); empty($good['title']) && ($good['title'] = product::create_good_title($product['title'], $good['attroptrs'])); $g_attroptrs = array(); foreach ($good['attroptrs'] as $aid => $avid) { $g_attroptrs[$aid] = array($avid); } $good['attribute_struct'] = array('items' => array_keys($good['attroptrs'])); $good['attribute_struct_default'] = array('items' => $g_attroptrs); unset($g_attroptrs); // 获取商品与规格值的关联 foreach ($good['attroptrs'] as $aid => $oid) { $aid = (string) $aid; $oid = (string) $oid; isset($attroptrs[$aid]) or $attroptrs[$aid] = array(); in_array($oid, $attroptrs[$aid]) or $attroptrs[$aid][] = $oid; } // 商品价格等信息从默认货品获取 if ($good['default_goods'] == 1) { $product['price'] = $good['price']; $product['market_price'] = $good['market_price']; $product['cost'] = $good['cost']; $product['weight'] = $good['weight']; $is_default = true; } // 判断商品的上下架 if ($product['on_sale'] == 0 && $good['on_sale'] == 1) { $product['on_sale'] = 1; } // 计算商品的库存 if ($good['store'] > 0) { $product['store'] += $good['store']; } // 处理货品的关联商品图片 if (!empty($good['picrels'])) { is_array($good['picrels']) or $good['picrels'] = explode(',', $good['picrels']); /*foreach ($good['picrels'] as $i => $picrel) { if (!isset($product['pictures'][$picrel])) { unset($good['picrels'][$i]); } }*/ if (!empty($good['picrels'])) { $good['goods_productpic_relation_struct'] = array('items' => $good['picrels']); } } else { $good['goods_productpic_relation_struct'] = array(); } $product['pdt_goods'][$index] = $good; } //没有设置默认货品,商品价格等信息从最后的货品获取 if ($is_default == false || $product['price'] == 0) { //$product['pdt_goods'][$index]['default_goods'] = 1; $product['price'] = $product['pdt_goods'][$index]['price']; $product['market_price'] = $product['pdt_goods'][$index]['market_price']; $product['cost'] = $product['pdt_goods'][$index]['cost']; $product['weight'] = $product['pdt_goods'][$index]['weight']; } //删除可配置商品、所有被关联的简单商品旧属性,然后保存新的属性 ORM::factory('product_attributeoption_relation')->where('product_id', $product['id'])->delete_all(); ORM::factory('product_attributeoption_relation')->where('configurable_id', $product['id'])->delete_all(); foreach ($attroptrs as $aid => $oids) { foreach ($oids as $oid) { Product_attributeoption_relationService::get_instance()->add(array('apply' => AttributeService::ATTRIBUTE_SPEC, 'product_id' => $product['id'], 'attribute_id' => $aid, 'attributeoption_id' => $oid)); } } $product['attribute_struct'] = array('items' => array_keys($attroptrs)); $product['attribute_struct_default'] = array('items' => $attroptrs); //删除可配置商品与简单商品的关联关系 ORM::factory('product_assembly')->where('assembly_id', $product['id'])->delete_all(); //保存简单商品、简单商品与规格值关联、简单商品与可配置商品关联 foreach ($product['pdt_goods'] as $index => $good) { $good = coding::encode_good($good); if (isset($good['id'])) { $good['update_time'] = time(); ProductService::get_instance()->update($good); } else { $good['create_time'] = time(); $good['id'] = ProductService::get_instance()->add($good); } //记录简单商品的所有规格信息 foreach ($good['attroptrs'] as $aid => $oid) { Product_attributeoption_relationService::get_instance()->add(array('apply' => AttributeService::ATTRIBUTE_SPEC, 'configurable_id' => $product['id'], 'product_id' => $good['id'], 'attribute_id' => $aid, 'attributeoption_id' => $oid)); } //建立可配置商品与货品的关联关系 Product_assemblyService::get_instance()->add(array('is_default' => $good['default_goods'], 'assembly_type' => ProductService::PRODUCT_TYPE_CONFIGURABLE, 'assembly_id' => $product['id'], 'product_id' => $good['id'])); $product['pdt_goods'][$index] = $good; } } else { //处理默认货品 //ORM::factory('product_attributeoption_productpic_relation')->where('product_id', $product['id'])->delete_all(); ORM::factory('product_attributeoption_relation')->where('product_id', $product['id'])->delete_all(); //ORM::factory('product_attributeoption_relation')->where('configurable_id', $product['id'])->delete_all(); //ORM::factory('product')->where('product_id', $product['id'])->delete_all(); $product['default_goods'] = 1; } //更新商品数据 $data = array('front_visible' => 1, 'id' => $product['id'], 'type' => ProductService::PRODUCT_TYPE_CONFIGURABLE, 'default_goods' => $product['default_goods'], 'category_id' => $product['category_id'], 'classify_id' => $product['classify_id'], 'brand_id' => $product['brand_id'], 'is_wholesale' => $product['is_wholesale'], 'category_ids' => $product['pdt_category_additional_id'], 'title' => $product['title'], 'name_manage' => $product['name_manage'], 'uri_name' => $product['uri_name'], 'sku' => $product['sku'], 'unit' => $product['unit'], 'price' => $product['price'], 'market_price' => $product['market_price'], 'cost' => $product['cost'], 'weight' => $product['weight'], 'store' => $product['store'], 'on_sale' => $product['on_sale'], 'meta_title' => $product['meta_title'], 'meta_keywords' => $product['meta_keywords'], 'meta_description' => $product['meta_description'], 'brief' => $product['brief'], 'attribute_struct' => isset($product['attribute_struct']) ? json_encode($product['attribute_struct']) : '', 'attribute_struct_default' => isset($product['attribute_struct_default']) ? json_encode($product['attribute_struct_default']) : '', 'update_time' => time()); ProductService::get_instance()->update($data); }