Exemplo n.º 1
0
 /**
  * 保存组合商品类型相关数据
  *
  * @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);
 }
Exemplo n.º 2
0
 /**
  * 保存可配置商品类型相关数据
  *
  * @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);
 }