/** * 根据特性ID获取商品特性 * * @param integer $feature_id * @return array */ public static function get($feature_id) { $feature = FeatureService::get_instance()->get($feature_id); $feature = coding::decode_feature($feature); $options = FeatureoptionService::get_instance()->index(array('where' => array('feature_id' => $feature['id']), 'orderby' => 'order')); $feature['options'] = array(); foreach ($options as $option) { unset($option['feature_id']); unset($option['order']); $feature['options'][$option['id']] = $option; } return $feature; }
/** * 根据规格ID获取商品规格 * * @param integer $attribute_id * @return array */ public static function get($attribute_id) { $attribute = AttributeService::get_instance()->get($attribute_id); $attribute = coding::decode_attribute($attribute); $options = Attribute_valueService::get_instance()->index(array('where' => array('attribute_id' => $attribute['id']), 'orderby' => 'order')); $attribute['options'] = array(); foreach ($options as $option) { unset($option['attribute_id']); unset($option['order']); $attribute['options'][$option['id']] = $option; } return $attribute; }
/** * 加载基本商品类型相关数据 * * @param array $product * @return boolean */ public static function load(&$product) { $product['classify_id'] && ($product['attributes'] = BLL_Product_Attribute::get_clsattrrs($product['classify_id'])); //处理简单商品是否属于可配置商品或者组合商品的一项 $p_configurable = Product_assemblyService::get_instance()->query_assoc(array('where' => array('product_id' => $product['id'], 'assembly_type' => ProductService::PRODUCT_TYPE_CONFIGURABLE), 'orderby' => array('id' => 'asc'), 'limit' => array('per_page' => 1))); $configurable_id = isset($p_configurable[0]['assembly_id']) && $p_configurable[0]['assembly_id'] > 0 ? $p_configurable[0]['assembly_id'] : 0; if ($configurable_id > 0) { $product['configurable_id'] = $configurable_id; !$product['descsections'] && ($product['descsections'] = BLL_Product_Detail::get($configurable_id)); !$product['fetuoptrs'] && ($product['fetuoptrs'] = BLL_Product_Feature::get_fetuoptrs($configurable_id)); !$product['relations'] && ($product['relations'] = BLL_Product_Relation::get($configurable_id)); !$product['wholesales'] && ($product['wholesales'] = BLL_Product_Wholesale::get($configurable_id)); //可配置商品的关联图片更新检查 if (!empty($product['goods_productpic_relation_struct'])) { $configurable_pictures = BLL_Product_Picture::get($configurable_id); $productpicService = ProductpicService::get_instance(); $product = coding::decode_attribute($product, 'goods_productpic_relation_struct'); foreach ($product['goods_productpic_relation_struct']['items'] as $pic_id) { if (isset($configurable_pictures[$pic_id])) { $query_struct = array('where' => array('product_id' => $product['id'], 'image_id' => $configurable_pictures[$pic_id]['image_id'])); if (!$productpicService->count($query_struct) > 0) { $productpic_data = array('product_id' => $product['id'], 'is_default' => ProductpicService::PRODUCTPIC_IS_DEFAULT_FALSE, 'title' => $configurable_pictures[$pic_id]['title'], 'image_id' => $configurable_pictures[$pic_id]['image_id']); $productpic_row_id = $productpicService->add($productpic_data); $product['pictures'][$pic_id] = $configurable_pictures[$pic_id]; } } } } } //获取商品规格 $attroptrs = array(); if ($product['attribute_struct_default']) { $attroptrs = json_decode($product['attribute_struct_default'], TRUE); $attroptrs = $attroptrs['items']; if (is_array($attroptrs)) { foreach ($attroptrs as $aid => $oid) { $attroptrs[$aid] = $oid[0]; } } unset($product['attribute_struct_default']); } else { $attroptrs = self::get_pdt_attroptrs($product['id']); } if (!empty($attroptrs)) { $product['attroptrs'] = $attroptrs; $product['attrrs'] = array_keys($attroptrs); } return TRUE; }
/** * 保存组合商品类型相关数据 * * @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); }
public function run($products) { $csv_array = array(); if ($products) { $result = $this->format($products); foreach ($result as $classify_id => $products) { foreach ($products as $product) { $csv_array[] = $this->get_titlebar($classify_id); //dump($csv_array); //foreach ($products as $product){ $product = coding::decode_product($product); $desc = Product_detailService::get_instance()->get_by_product_id($product['id']); $goods = ProductService::get_instance()->query_assoc(array('where' => array('product_id' => $product['id']), 'orderby' => array('default_goods' => 'DESC'))); if (!empty($this->arguments)) { $arguments = Product_argumentService::get_instance()->query_row(array('where' => array('product_id' => $product['id']))); $arguments = empty($arguments) ? array() : json_decode($arguments['arguments'], TRUE); } $has_goods = FALSE; $default_good = array(); foreach ($goods as $good) { if (!empty($good['attribute_struct']['items'])) { $has_goods = TRUE; } if ($good['default_goods'] == 1) { $default_good = $good; break; } } /*if ($default_good AND $goods) { $default_good = $goods[key($goods)]; }*/ $p_row = array(); $p_row[] = ''; $p_row[] = ''; $p_row[] = $this->get_category_names($product['category_id']); $p_row[] = $product['sku']; $p_row[] = ''; $p_row[] = $product['name_manage']; $p_row[] = $product['title']; $p_row[] = $product['brand_id'] > 0 ? $this->get_brand_name($product['brand_id']) : ''; if (!$has_goods) { $p_row[] = $product['on_sale'] == 1 ? 'Y' : 'N'; $p_row[] = $product['price']; $p_row[] = $product['market_price']; } else { $p_row[] = ''; $p_row[] = ''; $p_row[] = ''; } $p_row[] = ''; // 商品图片 /** * 处理商品规格 */ if ($has_goods) { /*$attribute_option_ids = $product['argumrs_struct_default']['items']; $same_attributes = TRUE; if (count($this->attributes) == count($attribute_option_ids)) { foreach ($this->attributes as $attribute) { if (!isset($attribute_option_ids[$attribute['id']])) { $same_attributes = FALSE; break; } } } else { $same_attributes = FALSE; } if ($same_attributes == TRUE) { $attributes = $this->attributes; $p_row[] = ''; } else { $attributes = AttributeService::get_instance()->get_attribute_options(array( 'where' => array( 'id' => array_keys($attribute_option_ids), ), 'orderby' => array( 'id' => 'ASC', ), ));*/ $attribute_names = ''; foreach ($this->attributes as $attribute) { if (!empty($attribute_names)) { $attribute_names .= '|'; } $attribute_names .= $attribute['name']; } $p_row[] = '规格:' . $attribute_names; //} } else { $p_row[] = ''; } $p_row[] = $product['brief']; /** * 处理商品的详细描述 */ if ($desc) { $p_row[] = $desc['description']; } else { $p_row[] = ''; } /** * 处理商品的成本、库存、重量,当商品有规格时,在商品行不显示此三项信息 */ if (!$has_goods) { $p_row[] = $product['cost']; $p_row[] = $product['store']; $p_row[] = empty($default_good) ? '0' : $default_good['weight']; } else { $p_row[] = ''; $p_row[] = ''; $p_row[] = ''; } $p_row[] = $desc['meta_title']; $p_row[] = $desc['meta_keywords']; $p_row[] = $desc['meta_description']; /** * 处理货品与特性的关联 */ $feature_option_ids = empty($product['product_featureoption_relation_struct']['items']) ? array() : $product['product_featureoption_relation_struct']['items']; foreach ($this->features as $feature) { if (isset($feature_option_ids[$feature['id']])) { $p_row[] = $feature['options'][$feature_option_ids[$feature['id']]]['name']; } else { $p_row[] = ''; } } foreach ($this->arguments as $argument_group) { foreach ($argument_group['items'] as $argument) { if (isset($arguments[$argument_group['name']]) and isset($arguments[$argument_group['name']][$argument['name']])) { $p_row[] = $arguments[$argument_group['name']][$argument['name']]; } else { $p_row[] = ''; } } } $csv_array[] = $p_row; /** * 处理货品 */ if ($has_goods) { foreach ($goods as $good) { $is_err = FALSE; $good = coding::decode_good($good); $g_row = array(); $g_row[] = ''; $g_row[] = ''; $g_row[] = ''; $g_row[] = ''; $g_row[] = $good['sku']; $g_row[] = ''; $g_row[] = $good['title']; $g_row[] = ''; $g_row[] = $good['on_sale'] == 1 ? 'Y' : 'N'; $g_row[] = $good['price']; $g_row[] = $good['market_price']; $g_row[] = ''; $option_name = ''; foreach ($this->attributes as $attribute) { if ($option_name != '') { $option_name .= '|'; } if (!isset($good['argumrs_struct']['items'][$attribute['id']])) { $is_err = TRUE; log::write('product_import_data_error', print_r($product, true), __FILE__, __LINE__); } else { $option_id = $good['argumrs_struct']['items'][$attribute['id']]; $option_name .= $attribute['options'][$option_id]['name']; } } $g_row[] = $option_name; if ($is_err == TRUE) { break; } $g_row[] = ''; $g_row[] = ''; $g_row[] = $good['cost']; $g_row[] = $good['store']; $g_row[] = $good['weight']; $g_row[] = ''; $g_row[] = ''; $g_row[] = ''; foreach ($this->features as $feature) { $g_row[] = ''; } foreach ($this->arguments as $argument_group) { foreach ($argument_group['items'] as $argument) { $g_row[] = ''; } } $csv_array[] = $g_row; } } //} } } } return $csv_array; }
/** * 获取规格数组 * @param array $request_struct 请求结构体 * @return array * @throws MyRuntimeException */ public function get_attributes($request_struct = array(), $k = 'meta_struct') { $return_array = array(); try { $attributes = $this->query_assoc($request_struct); if (!empty($attributes)) { foreach ($attributes as $attribute) { $attribute = coding::decode_attribute($attribute, $k); $return_array[$attribute['id']] = $attribute; } } return $return_array; } catch (MyRuntimeException $ex) { throw $ex; } }
?> <?php echo view_tool::sort('上架', 14, 50); ?> <?php echo view_tool::sort('前台可见', 18, 60); ?> <th width="130">质保到期</th> </tr> </thead> <tbody> <?php foreach ($product_list as $rs) { ?> <?php $rs = coding::decode_product($rs); ?> <tr> <td><input class="sel" name="ids[]" value="<?php echo $rs['id']; ?> " type="checkbox" /></td> <td> <?php if ($request_data['status'] == ProductService::PRODUCT_STATUS_DELETE) { ?> <a href="<?php echo url::base(); ?> product/product/recycle?id=<?php echo $rs['id'];
/** * 保存可配置商品类型相关数据 * * @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); }
<input type="hidden" id="order_id" name="order_id" value="<?php echo $order['id']; ?> "></input> <input type="hidden" id="url" name="url" value="<?php echo url::base(); ?> order/order/edit/id/<?php echo $order['id']; ?> "></input> <?php foreach ($order['order_product'] as $key => $order_product) { ?> <?php $order_product = coding::decode_product($order_product); ?> <tr> <td> <?php if (!empty($order_product['link'])) { ?> <a href="<?php echo $order_product['link']; ?> " target="_blank"> <?php } else { ?> <a href="<?php echo product::permalink($order_product);
/** * 通过商品ID获取商品 * * @param integer $product_id * @return array */ public static function get($product_id, $page = 1, $per_page = 10) { $product = ProductService::get_instance()->get($product_id); $product = coding::decode_product($product); $product['descsections'] = BLL_Product_Detail::get($product_id); $product['fetuoptrs'] = BLL_Product_Feature::get_fetuoptrs($product_id); $product['pictures'] = BLL_Product_Picture::get($product_id); $product['relations'] = BLL_Product_Relation::get($product_id); $product['wholesales'] = BLL_Product_Wholesale::get($product_id); //$product['point'] = BLL_Product_Point::get($product_id); switch ($product['type']) { case ProductService::PRODUCT_TYPE_ASSEMBLY: BLL_Product_Type_Assembly::load($product); break; case ProductService::PRODUCT_TYPE_CONFIGURABLE: BLL_Product_Type_Configurable::load($product); break; case ProductService::PRODUCT_TYPE_GOODS: default: BLL_Product_Type_Simple::load($product); break; } return $product; }
public function transport_post() { $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented', 'content' => array()); try { set_time_limit(0); //$profiler = new Profiler; //* 初始化返回数据 */ $return_data = array(); //* 收集请求数据 ==根据业务逻辑定制== */ $request_data = $this->input->post(); //* 权限验证 */ $site_id = site::id(); if ($site_id == 0) { throw new MyRuntimeException(Kohana::lang('o_global.select_site'), 400); } role::check('product_classify', $site_id, 0); //数据验证 if (!isset($request_data['classify_id']) or !preg_match('/^\\d+$/', $request_data['classify_id'])) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 404); } if (!isset($request_data['argument_group']) or !is_array($request_data['argument_group'])) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 404); } if (!isset($request_data['argument']) or !is_array($request_data['argument'])) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 404); } // 调用底层服务 $classify = ClassifyService::get_instance()->get($request_data['classify_id']); if ($classify['site_id'] != $site_id) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 404); } $categorys = CategoryService::get_instance()->query_assoc(array('where' => array('site_id' => $site_id, 'classify_id' => $classify['id']))); $arguments = empty($classify['argument_relation_struct']) ? array() : json_decode($classify['argument_relation_struct'], TRUE); $features = ClassifyService::get_instance()->get_features_by_classify_id($classify['id']); $transport = array(); if (!empty($features)) { foreach ($features as $feature) { if (!empty($request_data['argument_group'][$feature['id']]) and !empty($request_data['argument'][$feature['id']])) { $gname = trim($request_data['argument_group'][$feature['id']]); $aname = trim($request_data['argument'][$feature['id']]); foreach ($arguments as $group) { if ($gname === $group['name']) { foreach ($group['items'] as $argument) { if ($aname === $argument['name']) { $transport[$feature['id']] = array($gname, $aname); break; } } break; } } if (!isset($transport[$feature['id']])) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 404); } } } } if (!empty($transport)) { if (!empty($categorys)) { $category_ids = array(); foreach ($categorys as $category) { $category_ids[] = $category['id']; } $products = ProductService::get_instance()->query_assoc(array('where' => array('site_id' => $site_id, 'category_id' => $category_ids))); foreach ($products as $product) { $product = coding::decode_product($product); $product_argument_record = Product_argumentService::get_instance()->query_row(array('where' => array('product_id' => $product['id']))); $product_argument = empty($product_argument_record) ? array() : json_decode($product_argument_record['arguments'], TRUE); foreach ($transport as $feature_id => $argument) { if (!empty($product['product_feature_relation_struct']['items'])) { $key = array_search($feature_id, $product['product_feature_relation_struct']['items']); if ($key !== FALSE) { unset($product['product_feature_relation_struct']['items'][$key]); } } if (!empty($product['product_featureoption_relation_struct']['items'][$feature_id])) { $option_id = $product['product_featureoption_relation_struct']['items'][$feature_id]; if (isset($features[$feature_id]['options'][$option_id])) { if (!isset($product_argument[$argument[0]])) { $product_argument[$argument[0]] = array(); } $product_argument[$argument[0]][$argument[1]] = $features[$feature_id]['options'][$option_id]['name']; } unset($product['product_featureoption_relation_struct']['items'][$feature_id]); } } ProductService::get_instance()->set($product['id'], coding::encode_product($product)); if (!empty($product_argument)) { if (empty($product_argument_record)) { Product_argumentService::get_instance()->create(array('product_id' => $product['id'], 'arguments' => json_encode($product_argument))); } else { Product_argumentService::get_instance()->set($product_argument_record['id'], array('arguments' => json_encode($product_argument))); } } ORM::factory('product_featureoption_relation')->where('product_id', $product['id'])->delete_all(); } } ORM::factory('classify_feature_relation')->where('classify_id', $classify['id'])->in('feature_id', array_keys($transport))->delete_all(); } //* 补充&修改返回结构体 */ $return_struct['status'] = 1; $return_struct['code'] = 200; $return_struct['msg'] = ''; $return_struct['content'] = $return_data; //* 请求类型 */ if ($this->is_ajax_request()) { // ajax 请求 // json 输出 $this->template->content = $return_struct; } else { // html 输出 //* 模板输出 */ $content = new View($this->package . '/' . $this->class_name . '/' . __FUNCTION__); //* 变量绑定 */ $this->template->title = Kohana::config('site.name'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->request_data = $request_data; //* 返回结构体绑定 */ $this->template->content->return_struct = $return_struct; //:: 当前应用专用数据 } // end of request type determine } catch (MyRuntimeException $ex) { $return_struct['status'] = 0; $return_struct['code'] = $ex->getCode(); $return_struct['msg'] = $ex->getMessage(); //TODO 异常处理 //throw $ex; if ($this->is_ajax_request()) { $this->template->content = $return_struct; } else { $this->template->return_struct = $return_struct; $content = new View('info'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->request_data = $request_data; //* 返回结构体绑定 */ $this->template->content->return_struct = $return_struct; } } }