Exemplo n.º 1
0
 /**
  * 根据特性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;
 }
Exemplo n.º 2
0
 /**
  * 根据规格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;
 }
Exemplo n.º 3
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;
 }
Exemplo n.º 4
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.º 5
0
 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;
 }
Exemplo n.º 6
0
 /**
  * 获取规格数组
  * @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;
     }
 }
Exemplo n.º 7
0
    ?>
                            <?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'];
Exemplo n.º 8
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);
 }
Exemplo n.º 9
0
                	<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);
Exemplo n.º 10
0
 /**
  * 通过商品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;
 }
Exemplo n.º 11
0
 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;
         }
     }
 }