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
 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;
 }
Example #3
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;
 }