public function setData(shopProduct $product, $data) { $primary_currency = wa()->getConfig()->getCurrency(); $sort = 0; $default_sku_id = null; $result = array(); foreach ($data as $sku_id => $sku) { $sku['sort'] = ++$sort; if (empty($sku['available'])) { $sku['available'] = 0; } if (isset($sku['price'])) { if ($product->currency == $primary_currency) { $sku['primary_price'] = $sku['price']; } else { $sku['primary_price'] = $this->convertPrice($sku['price'], $product->currency); } } $sku['product_id'] = $product->id; $sku = $this->updateSku($sku_id > 0 ? $sku_id : 0, $sku, false, $product); $result[$sku['id']] = $sku; if (!empty($sku['features'])) { foreach ($sku['features'] as $code => $value) { if (!isset($features)) { $features = $product->features; } if (!isset($features[$code])) { $features[$code] = array(); } if (is_array($features[$code])) { if (is_array($value)) { if (isset($value['id'])) { if (!isset($features[$code][$value['id']])) { $features[$code][$value['id']] = $value['value']; } } } else { $features[$code][] = $value; } } } } if ($product->sku_id == $sku_id) { $default_sku_id = $sku['id']; } } $model = new shopProductModel(); if ($default_sku_id === null && $result) { $default_sku_id = current(array_keys($result)); } $model->updateById($product->id, array('sku_id' => $default_sku_id)); $model->correct($product->id); $product_data = $model->getById($product->id); $product->min_price = $product_data['min_price']; $product->max_price = $product_data['max_price']; $product->price = $product_data['price']; $product->compare_price = $product_data['compare_price']; $product->count = $product_data['count']; $product->sku_count = count($data); $product->sku_id = $default_sku_id; if (isset($features)) { $product->features = $features; } return $result; }