/** * Метод добавляет к массиву продуктов информацию о характеристиках * для каждого продукта * @param $arrayProducts - массив с продуктами * @return float. */ public function addPropertyToProduct($arrayProducts) { $categoryIds = array(); $whereCat = ''; $idsProduct = array(); $currency = MG::getSetting("currency"); $currencyRate = MG::getSetting('currencyRate'); $currencyShopIso = MG::getSetting('currencyShopIso'); $prod = new Models_Product(); $idsVariantProduct = array(); foreach ($arrayProducts as $key => $product) { $arrayProducts[$key]['category_url'] = SHORT_LINK == '1' && !URL::isSection('mg-admin') ? '' : $arrayProducts[$key]['category_url'] . '/'; $product['category_url'] = SHORT_LINK == '1' ? '' : $product['category_url'] . '/'; if ($product['variant_exist'] && $product['variant_id']) { $variants = $prod->getVariants($product['id']); $variantsKey = array_keys($variants); $product['variant_id'] = $variantsKey[0]; $idsVariantProduct[$product['id']][] = $key; $variant = $variants[$product['variant_id']]; $arrayProducts[$key]['price_course'] = $variant['price_course']; $arrayProducts[$key]['price'] = $variant['price']; $arrayProducts[$key]['image_url'] = $variant['image'] ? $variant['image'] : $arrayProducts[$key]['image_url']; } $idsProduct[$product['id']] = $key; $categoryIds[] = $product['cat_id']; // Назначаем для продукта позьзовательские // характеристики по умолчанию, заданные категорией. $arrayProducts[$key]['thisUserFields'] = MG::get('category')->getUserPropertyCategoryById($product['cat_id']); $arrayProducts[$key]['propertyIdsForCat'] = MG::get('category')->getPropertyForCategoryById($product['cat_id']); $arrayProducts[$key]['currency'] = $currency; // Формируем ссылки подробнее и в корзину. $arrayProducts[$key]['actionBuy'] = '<a href="' . SITE . '/catalog?inCartProductId=' . $product["id"] . '" class="addToCart product-buy" data-item-id="' . $product["id"] . '">' . MG::getSetting('buttonBuyName') . '</a>'; $arrayProducts[$key]['actionCompare'] = '<a href="' . SITE . '/compare?inCompareProductId=' . $product["id"] . '" class="addToCompare" data-item-id="' . $product["id"] . '">' . MG::getSetting('buttonCompareName') . '</a>'; $arrayProducts[$key]['actionView'] = '<a href="' . SITE . '/' . (isset($product["category_url"]) ? $product["category_url"] : 'catalog') . '/' . $product["product_url"] . '" class="product-info">' . MG::getSetting('buttonMoreName') . '</a>'; $arrayProducts[$key]['link'] = SITE . '/' . (isset($product["category_url"]) ? $product["category_url"] : 'catalog/') . $product["product_url"]; if (empty($arrayProducts[$key]['currency_iso'])) { $arrayProducts[$key]['currency_iso'] = $currencyShopIso; } $arrayProducts[$key]['real_old_price'] = $arrayProducts[$key]['old_price']; $arrayProducts[$key]['old_price'] *= $currencyRate[$arrayProducts[$key]['currency_iso']]; $arrayProducts[$key]['real_price'] = $arrayProducts[$key]['price']; $arrayProducts[$key]['price'] = MG::priceCourse($arrayProducts[$key]['price_course']); $imagesConctructions = $prod->imagesConctruction($arrayProducts[$key]['image_url'], $arrayProducts[$key]['image_title'], $arrayProducts[$key]['image_alt']); $arrayProducts[$key]['images_product'] = $imagesConctructions['images_product']; $arrayProducts[$key]['images_title'] = $imagesConctructions['images_title']; $arrayProducts[$key]['images_alt'] = $imagesConctructions['images_alt']; $arrayProducts[$key]['image_url'] = $imagesConctructions['image_url']; $arrayProducts[$key]['image_title'] = $imagesConctructions['image_title']; $arrayProducts[$key]['image_alt'] = $imagesConctructions['image_alt']; $imagesUrl = explode("|", $arrayProducts[$key]['image_url']); $arrayProducts[$key]["image_url"] = ""; if (!empty($imagesUrl[0])) { $arrayProducts[$key]["image_url"] = $imagesUrl[0]; } } $model = new Models_Product(); $arrayVariants = $model->getBlocksVariantsToCatalog(array_keys($idsProduct), true); foreach (array_keys($idsProduct) as $id) { $arrayProducts[$idsProduct[$id]]['variants'] = $arrayVariants[$id]; } // Собираем все ID продуктов в один запрос. if ($prodSet = trim(DB::quote(implode(',', array_keys($idsProduct))), "'")) { // Формируем список id продуктов, к которым нужно найти пользовательские характеристики. $where = ' IN (' . $prodSet . ') '; } else { $where = ' IN (0) '; } //Определяем id категории, в которой находимся $catCode = URL::getLastSection(); $sql = ' SELECT pup.property_id, pup.value, pup.product_id, prop.*, pup.type_view, pup.product_margin FROM `' . PREFIX . 'product_user_property` as pup LEFT JOIN `' . PREFIX . 'property` as prop ON pup.property_id = prop.id '; if ($catSet = trim(DB::quote(implode(',', $categoryIds)), "'")) { $categoryIds = array_unique($categoryIds); $sql .= ' LEFT JOIN `' . PREFIX . 'category_user_property` as cup ON cup.property_id = prop.id '; $whereCat = ' AND cup.category_id IN (' . $catSet . ') '; } $sql .= 'WHERE pup.`product_id` ' . $where . $whereCat; $sql .= 'ORDER BY `sort` DESC'; $res = DB::query($sql); while ($userFields = DB::fetchAssoc($res)) { // viewDAta($userFields['property_id']); // viewDAta($arrayProducts[$key]['propertyIdsForCat']); // Обновляет данные позначениям характеристик, только для тех хар. которые назначены для категории текущего товара. // Это не работает в фильтрах и сравнениях. // if(in_array($userFields['property_id'],$arrayProducts[$key]['propertyIdsForCat'])){ // дописываем в массив пользовательских характеристик, // все переопределенные для каждого тоавара, оставляя при // этом не измененные характеристики по умолчанию $arrayProducts[$idsProduct[$userFields['product_id']]]['thisUserFields'][$userFields['property_id']] = $userFields; // добавляем польз характеристики ко всем вариантам продукта if (!empty($idsVariantProduct[$userFields['product_id']])) { foreach ($idsVariantProduct[$userFields['product_id']] as $keyPages) { $arrayProducts[$keyPages]['thisUserFields'][$userFields['property_id']] = $userFields; } } // } } return $arrayProducts; }
/** * Возвращает правильно сформированную картинку для продукта в HTML. * Со всеми параметрами, для эфекта перелета в корщину. * @param type $data - параметры продукта * @return string. */ function mgImageProduct($data) { $product = new Models_Product(); $imagesData = $product->imagesConctruction($data["image_url"], $data["image_title"], $data["image_alt"]); $src = SITE . "/uploads/no-img.jpg"; if (file_exists(URL::$documentRoot . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'thumbs' . DIRECTORY_SEPARATOR . '70_' . $data["image_url"])) { $src = SITE . '/uploads/thumbs/70_' . $data["image_url"]; } return '<img data-transfer="true" data-product-id="' . $data["id"] . '" src="' . $src . '" alt="' . $imagesData["image_alt"] . '" title="' . $imagesData["image_title"] . '">'; }
/** * Возвращает правильно сформированную картинку для продукта в HTML. * Со всеми параметрами, для эфекта перелета в корщину. * @param type $data - параметры продукта * @return string. */ function mgImageProduct($data) { $product = new Models_Product(); $data["image_url"] = basename($data["image_url"]); $imagesData = $product->imagesConctruction($data["image_url"], $data["image_title"], $data["image_alt"], $data['id']); $src = SITE . "/uploads/no-img.jpg"; $dir = floor($data["id"] / 100) . '00'; $imagesData["image_url"] = basename($imagesData["image_url"]); $srcLarge = mgImageProductPath($data["image_url"], $data["id"]); if (file_exists(URL::$documentRoot . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'product' . DIRECTORY_SEPARATOR . $dir . DIRECTORY_SEPARATOR . $data["id"] . DIRECTORY_SEPARATOR . 'thumbs' . DIRECTORY_SEPARATOR . '70_' . $imagesData["image_url"])) { $src = SITE . '/uploads/product/' . $dir . '/' . $data['id'] . '/thumbs/70_' . $imagesData["image_url"]; } elseif (file_exists(URL::$documentRoot . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'thumbs' . DIRECTORY_SEPARATOR . '70_' . $imagesData["image_url"])) { $src = SITE . '/uploads/thumbs/70_' . $imagesData["image_url"]; } return '<img data-transfer="true" data-product-id="' . $data["id"] . '" src="' . $src . '" alt="' . $imagesData["image_alt"] . '" title="' . $imagesData["image_title"] . '" data-large="' . $srcLarge . '">'; }