Beispiel #1
0
 /**
  * Создает продукт в БД если его не было.
  * @param type $product - массив с данными о продукте.
  * @param type $catId - категория к которой относится продукт.
  */
 public function createProduct($product, $catId = null)
 {
     $variant = $product['variant'];
     $property = $product['property'];
     unset($product['cat_url']);
     unset($product['variant']);
     unset($product['property']);
     if ($catId === null) {
         // 1 находим ID категории по заданному пути
         $product['cat_id'] = MG::translitIt($product['cat_id'], 1);
         $product['cat_id'] = URL::prepareUrl($product['cat_id']);
         if ($product['cat_id']) {
             $url = URL::parsePageUrl($product['cat_id']);
             $parentUrl = URL::parseParentUrl($product['cat_id']);
             $parentUrl = $parentUrl != '/' ? $parentUrl : '';
             $cat = MG::get('category')->getCategoryByUrl($url, $parentUrl);
             $product['cat_id'] = $cat['id'];
         }
     } else {
         $product['cat_id'] = $catId;
     }
     $product['cat_id'] = !empty($product['cat_id']) ? $product['cat_id'] : 0;
     // 2 если URL не задан в файле, то транслитирируем его из названия товара
     $product['url'] = !empty($product['url']) ? $product['url'] : preg_replace('~-+~', '-', MG::translitIt($product['title'], 0));
     $product['url'] = URL::prepareUrl($product['url']);
     $model = new Models_Product();
     if ($product['cat_id'] == 0) {
         $alreadyProduct = $model->getProductByUrl($product['url']);
     } else {
         $alreadyProduct = $model->getProductByUrl($product['url'], $product['cat_id']);
     }
     // если в базе найден этот продукт, то при обновлении будет сохранен ID и URL
     if (!empty($alreadyProduct['id'])) {
         $product['id'] = $alreadyProduct['id'];
         $product['url'] = $alreadyProduct['url'];
     }
     // обновляем товар, если его не было то метод вернет массив с параметрами вновь созданного товара, в том числе и ID. Иначе  вернет true
     $arrProd = $model->updateProduct($product);
     $product_id = $product['id'] ? $product['id'] : $arrProd['id'];
     $categoryId = $product['cat_id'];
     $productId = $product_id;
     $listProperty = $property;
     $arrProperty = $this->parseListProperty($listProperty);
     foreach ($arrProperty as $key => $value) {
         $this->createProperty($key, $value, $categoryId, $productId);
     }
     if (!$variant) {
         return true;
     }
     $var = $model->getVariants($product['id'], $variant);
     $varUpdate = null;
     if (!empty($var)) {
         foreach ($var as $k => $v) {
             if ($v['title_variant'] == $variant && $v['product_id'] == $product_id) {
                 $varUpdate = $v['id'];
             }
         }
     }
     // Иначе обновляем существующую запись в таблице вариантов.
     $newVariant = array('product_id' => $product_id, 'title_variant' => $variant, 'sort' => $product['sort'], 'price' => $product['price'], 'old_price' => $product['old_price'], 'count' => $product['count'], 'code' => $product['code'], 'activity' => $product['activity'], 'currency_iso' => $product['currency_iso']);
     $model->importUpdateProductVariant($varUpdate, $newVariant, $product_id);
     // Обновляем продукт по первому варианту.
     $res = DB::query('
   SELECT  pv.*
   FROM `' . PREFIX . 'product_variant` pv    
   WHERE pv.product_id = ' . DB::quote($product_id) . '
   ORDER BY sort
 ');
     if ($row = DB::fetchAssoc($res)) {
         if (!empty($row)) {
             $row['title'] = $product['title'];
             $row['id'] = $row['product_id'];
             unset($row['image']);
             unset($row['title_variant']);
             unset($row['product_id']);
             $model->updateProduct($row);
         }
     }
 }