/** * Создает продукт в БД если его не было. * @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); } } }