/** * Создает продукт в БД если его не было. * @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); } } }
/** * Выполняет операцию над отмеченными товарами в админке. * @return boolean */ public function operationProduct() { $productModel = new Models_Product(); $operation = $_POST['operation']; if (empty($_POST['products_id'])) { $this->messageError = 'Необходимо отметить товары!'; return false; } if ($operation == 'delete') { foreach ($_POST['products_id'] as $productId) { $productModel->deleteProduct($productId); } } elseif (strpos($operation, 'activity') === 0 && !empty($_POST['products_id'])) { foreach ($_POST['products_id'] as $product) { $productModel->updateProduct(array('id' => $product, 'activity' => substr($operation, -1, 1))); } } elseif (strpos($operation, 'recommend') === 0 && !empty($_POST['products_id'])) { foreach ($_POST['products_id'] as $product) { $productModel->updateProduct(array('id' => $product, 'recommend' => substr($operation, -1, 1))); } } elseif (strpos($operation, 'new') === 0 && !empty($_POST['products_id'])) { foreach ($_POST['products_id'] as $product) { $productModel->updateProduct(array('id' => $product, 'new' => substr($operation, -1, 1))); } } elseif (strpos($operation, 'clone') === 0 && !empty($_POST['products_id'])) { foreach ($_POST['products_id'] as $product) { $productModel->cloneProduct($product); } } elseif (strpos($operation, 'delete') === 0 && !empty($_POST['products_id'])) { foreach ($_POST['products_id'] as $product) { $productModel->deleteProduct($product); } } elseif (strpos($operation, 'changecur') === 0 && !empty($_POST['products_id'])) { foreach ($_POST['products_id'] as $product) { $part = explode('_', $operation); $iso = str_replace($part[0] . '_', '', $operation); $productModel->convertToIso($iso, $_POST['products_id']); $this->data['clearfilter'] = true; //$result = $model->updateOrder(array('id' => $orderId, 'status_id' => substr($operation, -1, 1))); } } elseif (strpos($operation, 'getcsv') === 0 && !empty($_POST['products_id'])) { $catalogModel = new Models_Catalog(); $filename = $catalogModel->exportToCsv($_POST['products_id']); $this->data['filecsv'] = $filename; $this->messageSucces = 'Товары импортированы успешно в файл ' . $filename; } elseif (strpos($operation, 'getyml') === 0 && !empty($_POST['products_id'])) { if (LIBXML_VERSION && extension_loaded('xmlwriter')) { $ymlLib = new YML(); $filename = $ymlLib->exportToYml($_POST['products_id']); $this->data['fileyml'] = $filename; $this->messageSucces = 'Товары импортированы успешно в файл ' . $filename; } else { $this->messageError = 'Отсутствует необходимое PHP расширение: xmlwriter'; } } return true; }