Example #1
0
 /**
  * 加载组合商品类型相关数据
  *
  * @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;
 }
Example #2
0
 /**
  * 加载基本商品类型相关数据
  *
  * @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;
 }
Example #3
0
 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);
     }
 }
Example #4
0
 /**
  * 加载可配置商品类型相关数据
  *
  * @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;
 }