/** * 加载基本商品类型相关数据 * * @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 index() { $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented', 'content' => array()); try { //* 初始化返回数据 */ $return_data = array('assoc' => NULL, 'count' => 0); //* 收集请求数据 ==根据业务逻辑定制== */ $request_data = $this->input->get(); $site_ids = role::get_site_ids(); if (empty($site_ids)) { throw new MyRuntimeException(Kohana::lang('o_global.access_denied'), 403); } if (empty($request_data['classify_id']) or !isset($request_data['site_id']) or !in_array($request_data['site_id'], $site_ids)) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 400); } $struct = product::get_struct($request_data, $request_data['site_id']); $query_struct_current = $struct['query']; $request_struct_current = $struct['request']; $query_struct_current['where']['status'] = 1; $query_struct_current['where']['type'] = 0; $query_struct_current['where']['classify_id'] = $request_data['classify_id']; $query_struct_current['where']['goods_attributeoption_relation_struct_default'] = array('', '{"items":[]}'); // 每页条目数 controller_tool::request_per_page($query_struct_current, $request_data); try { $return_data = BLL_Product::index($query_struct_current); foreach ($return_data['assoc'] as $index => $product) { $product['pictures'] = BLL_Product_Picture::get($product['id']); $product['picrels'] = array_keys($product['pictures']); $return_data['assoc'][$index] = $product; } // 模板输出 分页 $this->pagination = new Pagination(array('total_items' => $return_data['count'], 'items_per_page' => $query_struct_current['limit']['per_page'])); $query_struct_current['limit']['page'] = $this->pagination->current_page; } catch (MyRuntimeException $ex) { //* ==根据业务逻辑定制== */ //FIXME 根据service层的异常做一些对应处理并抛出用户友好的异常Message throw $ex; } //* 如果是ajax请求缩减返回的字段 ==根据业务逻辑定制== */ if ($this->is_ajax_request()) { $requestkeys = array('id', 'site_id', 'category_id', 'title', 'uri_name', 'store', 'on_sale', 'goods_price', 'sku'); array_walk($return_data['assoc'], 'util::simplify_return_array', $requestkeys); } //* 补充&修改返回结构体 */ $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/commonfix_html'); //* 模板输出 */ $this->template->return_struct = $return_struct; $content = new View($this->package_name . '/product/merge/list'); //* 变量绑定 */ $this->template->title = Kohana::config('site.name'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->request_data = $request_data; $this->template->content->request_struct = $request_struct_current; $this->template->content->query_struct = $query_struct_current; $this->template->content->site_id = $request_data['site_id']; $this->template->content->classify_id = $request_data['classify_id']; //* 返回结构体绑定 */ $this->template->content->return_struct = $return_struct; //:: 当前应用专用数据 $this->template->content->title = Kohana::config('site.name'); } // 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; } } }
/** * 通过商品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; }