/** * 加载组合商品类型相关数据 * * @param array $product * @return boolean */ public static function load(&$product) { /** * 获取商品规格与货品 */ $attroptrs = array(); //$attroptrs = self::get_pdt_attroptrs($product['id']); if ($product['attribute_struct_default']) { $attroptrs = json_decode($product['attribute_struct_default']); $attroptrs = (array) @$attroptrs->items; $product['attroptrs'] = $attroptrs; $product['attrrs'] = array_keys($attroptrs); unset($product['attribute_struct_default']); } if (!empty($attroptrs)) { $goods = ProductService::get_instance()->index(array('where' => array('product_id' => $product['id']))); $product['store'] = -1; foreach ($goods as $index => $good) { $good = coding::decode_good($good); if (isset($good['attribute_struct_default']['items'])) { $good['attroptrs'] = $good['attribute_struct_default']['items']; } else { $good['attroptrs'] = array(); } $good['picrels'] = array(); if (!empty($good['goods_productpic_relation_struct']['items'])) { $good['picrels'] = $good['goods_productpic_relation_struct']['items']; } // 重新计算商品库存,以货品库存为准 if ($good['store'] > -1) { if ($product['store'] == -1) { $product['store'] = 0; } $product['store'] += $good['store']; } unset($good['attribute_struct_default']); unset($good['goods_productpic_relation_struct']); unset($good['product_id']); $goods[$index] = $good; } } else { // 重新计算商品库存,以货品库存为准 $good = ProductService::get_instance()->query_row(array('where' => array('product_id' => $product['id']))); if (!empty($good) and isset($good['store'])) { $product['store'] = $good['store']; } } if (empty($goods)) { $product['goods'] = array(); $product['attributes'] = array(); } else { $product['goods'] = $goods; $product['attributes'] = BLL_Product_Attribute::index(array('id' => array_keys($attroptrs))); } //$product['attroptpicrs'] = BLL_Product_Picture::get_pdt_attroptpicrs($product['id']); return TRUE; }
/** * 加载基本商品类型相关数据 * * @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; }
public function get_goods() { $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented', 'content' => array()); try { //* 初始化返回数据 */ $return_data = array(); //* 收集请求数据 ==根据业务逻辑定制== */ $request_data = $this->input->get(); if (empty($request_data['attroptrs'])) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 403); } $product_id = isset($request_data['product_id']) ? $request_data['product_id'] : ''; if ($product_id > 0) { $product = BLL_Product::get($request_data['product_id']); } else { $product = array(); } function array_configurable($arrays) { $result = array(); $array = array_shift($arrays); if (empty($arrays)) { foreach ($array as $key => $val) { $array[$key] = array($val); } return $array; } else { foreach ($array as $val) { foreach (array_configurable($arrays) as $item) { array_unshift($item, $val); $result[] = $item; } } return $result; } } $attributes = BLL_Product_Attribute::index(array('id' => array_keys($request_data['attroptrs']))); if (count($attributes) != count($request_data['attroptrs'])) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 403); } $goods = array(); $i = 0; foreach ($request_data['attroptrs'] as $aid => $oids) { if (!empty($oids) and is_array($oids)) { $goods[$i] = array(); foreach ($oids as $oid) { $goods[$i][] = array($aid, $oid); } $i++; } else { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 403); } } $goods = array_configurable($goods); foreach ($goods as $key => $good) { $struct = array(); foreach ($good as $item) { $struct[$item[0]] = $item[1]; } $goods[$key] = array('is_default' => $key == 0 ? 1 : 0, 'attroptrs' => $struct); } //d($attributes,1); d($goods); $template = new View($this->package_name . '/' . $this->class_name . '/configurable/goods'); $template->attributes = $attributes; $template->goods = $goods; $return_data = array('tpl' => (string) $template, 'goods' => $goods); //* 补充&修改返回结构体 */ $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 输出 $this->template = new View('layout/commonblank_html'); //* 模板输出 */ $this->template->return_struct = $return_struct; $content = new View($this->package_name . '/' . $this->class_name . '/configurable/' . __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; $this->template->content->attributes = $attributes; $this->template->content->aids = $aids; //:: 当前应用专用数据 $this->template->content->title = Kohana::config('site.name'); } // end of request type determine } catch (MyRuntimeException $ex) { $this->_ex($ex, $return_struct, $request_data); } }
/** * 加载可配置商品类型相关数据 * * @param array $product * @return boolean */ public static function load(&$product) { /** * 获取商品规格、简单商品 */ $goods = array(); $attroptrs = array(); //$attroptrs = self::get_pdt_attroptrs($product['id']); if ($product['attribute_struct_default']) { $attroptrs = json_decode($product['attribute_struct_default']); $attroptrs = (array) @$attroptrs->items; $product['attroptrs'] = $attroptrs; $product['attrrs'] = array_keys($attroptrs); unset($product['attribute_struct_default']); } if (!empty($attroptrs)) { $product['store'] = 0; $good_ids = Product_assemblyService::get_instance()->index(array('where' => array('assembly_id' => $product['id']))); //依次获得简单商品数据 foreach ($good_ids as $good_id) { $good = ProductService::get_instance()->get($good_id['product_id']); $good = coding::decode_good($good); $good['default_goods'] = $good_id['is_default'] ? $good_id['is_default'] : 0; $good['attroptrs'] = array(); if (isset($good['attribute_struct_default']['items'])) { foreach ($good['attribute_struct_default']['items'] as $aid => $oid) { $good['attroptrs'][$aid] = $oid[0]; } } $good['picrels'] = array(); if (!empty($good['goods_productpic_relation_struct']['items'])) { $good['picrels'] = $good['goods_productpic_relation_struct']['items']; } // 重新计算商品库存,以货品库存为准 if ($good['store'] > 0) { $product['store'] += $good['store']; } unset($good['attribute_struct_default']); unset($good['goods_productpic_relation_struct']); $goods[] = $good; unset($good); } } /* else { // 重新计算商品库存,以货品库存为准 $good = ProductService::get_instance()->query_row(array( 'where' => array('product_id' => $product['id']), )); if (!empty($good) AND isset($good['store'])) { $product['store'] = $good['store']; } }*/ if (empty($goods)) { $product['goods'] = array(); $product['attributes'] = array(); } else { $product['goods'] = $goods; $product['attributes'] = BLL_Product_Attribute::index(array('id' => array_keys($attroptrs))); } //$product['attroptpicrs'] = BLL_Product_Picture::get_pdt_attroptpicrs($product['id']); return TRUE; }