<td id="<?php echo $data['cat_id']; ?> " class="cat_id"> <?php $path = substr_count($data['category_url'], '/') > 1 ? '<a class="parentCat tool-tip-bottom" title="" style="cursor:pointer;">../</a>' : ''; ?> <?php echo $listCategories[$data['cat_id']] ? $path . $listCategories[$data['cat_id']] : 'Категория удалена'; ?> </td> <td class="product-picture image_url"> <?php $imagesUrl = explode("|", $data['image_url']); if (!empty($imagesUrl[0])) { $src = mgImageProductPath($imagesUrl[0], $data["id"], 'small'); } ?> <img class="uploads" src="<?php echo $src; ?> "/> </td> <td class="name" ><?php echo $data['title']; ?> <a class="link-to-site tool-tip-bottom" title="<?php echo $lang['PRODUCT_VIEW_SITE']; ?> " href="<?php echo SITE . '/';
/** * Вычисляет общую стоимость содержимого, а также количество. * @return array массив с данными о количестве и цене. */ public static function getCartData() { $modelCart = new Models_Cart(); // Количество вещей в корзине. $res['cart_count'] = 0; // Общая стоимость. $res['cart_price'] = 0; // Если удалось получить данные из куков и они успешно десериализованы в $_SESSION['cart']. //self::getCokieCart() && if (!empty($_SESSION['cart'])) { $settings = MG::get('settings'); $totalPrice = 0; $totalCount = 0; if (!empty($_SESSION['cart'])) { $itemIds = array(); $variantsId = array(); foreach ($_SESSION['cart'] as $key => $item) { if (!empty($item['id'])) { if (!empty($item['variantId'])) { $variantsId[] = $item['variantId']; } $itemIds[] = $item['id']; } } if (!empty($itemIds)) { // Пробегаем по содержимому. $idsPr = implode(',', array_unique($itemIds)); $where = ' IN (' . trim(DB::quote($idsPr), "'") . ')'; } } else { $where = ' IN (0)'; } // Пробегаем по содержимому. // $where = ' IN ('.trim(DB::quote(implode(',',$itemIds)),"'").')'; $result = DB::query(' SELECT CONCAT(c.parent_url,c.url) AS category_url, p.url AS product_url, p.*, rate, (p.price_course + p.price_course * (IFNULL(rate,0))) as `price_course`, p.currency_iso FROM `' . PREFIX . 'product` AS p LEFT JOIN `' . PREFIX . 'category` AS c ON c.id = p.cat_id WHERE p.id ' . $where); $array_variants = array(); if (!empty($variantsId)) { $ids = implode(',', $variantsId); $variants_res = DB::query('SELECT pv.*, c.rate,(pv.price_course + pv.price_course *(IFNULL(c.rate,0))) as `price_course`, p.currency_iso FROM `' . PREFIX . 'product_variant` pv LEFT JOIN `' . PREFIX . 'product` as p ON p.id = pv.product_id LEFT JOIN `' . PREFIX . 'category` as c ON c.id = p.cat_id WHERE pv.id IN (' . trim(DB::quote($ids, true)) . ')'); while ($variant_row = DB::fetchAssoc($variants_res)) { $array_variants[$variant_row['id']] = $variant_row; } } $currencyRate = MG::getSetting('currencyRate'); $currencyShopIso = MG::getSetting('currencyShopIso'); $products_row = array(); while ($prod = DB::fetchAssoc($result)) { $products_row[$prod['id']] = $prod; } foreach ($_SESSION['cart'] as $key => $item) { $variant = null; $row = $products_row[$item['id']]; $arrayImages = explode("|", $row['image_url']); if (!empty($item['variantId'])) { $variant = $array_variants[$item['variantId']]; $image = $variant['image'] ? $variant['image'] : $arrayImages[0]; $row['price'] = $variant['price']; $row['code'] = $variant['code']; $row['count'] = $variant['count']; $row['image_url'] = $variant['image'] ? $variant['image'] : $row['image_url']; $row['image_url_new'] = mgImageProductPath($image, $item['id'], 'small'); $row['weight'] = $variant['weight']; $row['title'] = $row['title'] . " " . $variant['title_variant']; $row['variantId'] = $variant['id']; $row['price_course'] = $variant['price_course']; } $price = $row['price_course']; if ($item['id'] == $row['id']) { $count = $item['count']; $row['countInCart'] = $count; $row['property_html'] = htmlspecialchars_decode(str_replace('&', '&', $item['property'])); $price = self::plusPropertyMargin($price, $item['propertyReal'], $currencyRate[$row['currency_iso']]); $row['property'] = $item['propertySetId']; $priceWithCoupon = $modelCart->applyCoupon($_SESSION['couponCode'], $price, $row); //$row['currency_iso'] = $row['currency_iso']?$row['currency_iso']:$currencyShopIso; //$price *= $currencyRate[$row['currency_iso']]; $priceWithDiscount = $modelCart->applyDiscountSystem($price); //$price = $priceWithCoupon < $priceWithDiscount['price'] ? $priceWithCoupon : $priceWithDiscount['price']; $price = $modelCart->customPrice(array('product' => $row, 'priceWithCoupon' => $priceWithCoupon, 'priceWithDiscount' => $priceWithDiscount['price'])); // если выбран формат без копеек, то округляем стоимость до ворматирования. if (in_array(MG::getSetting('priceFormat'), array('1234', '1 234', '1,234'))) { $price = round($price); } $row['priceInCart'] = MG::priceCourse($price * $count) . " " . $settings['currency']; if (!empty($arrayImages)) { $row['image_url'] = $arrayImages[0]; $row['image_url_new'] = mgImageProductPath($arrayImages[0], $item['id'], 'small'); } $row['category_url'] = SHORT_LINK == '1' ? '' : $row['category_url'] . '/'; $row['price'] = $price; $res['dataCart'][] = $row; $totalPrice += $price * $count; $totalCount += $count; $itemIds[] = $item['id']; } } $res['cart_price_wc'] = MG::priceCourse($totalPrice) . " " . $settings['currency']; $res['cart_count'] = $totalCount; $res['cart_price'] = MG::priceCourse($totalPrice); } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $res, $args); }
/** * Возвращает правильно сформированную картинку для продукта в 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 . '">'; }
/** * Получает список продуктов при вводе в поле поиска. */ public function getSearchData() { $keyword = MG::defenderXss_decode(URL::getQueryParametr('text')); if (!empty($keyword)) { $keyword = $this->convertLang($keyword); $catalog = new Models_Catalog(); $items = $catalog->getListProductByKeyWord($keyword, true, true, false, 'groupBy'); foreach ($items['catalogItems'] as $key => $value) { $items['catalogItems'][$key]['image_url'] = mgImageProductPath($value["image_url"], $value['id'], 'small'); } $searchData = array('status' => 'success', 'item' => array('keyword' => $keyword, 'count' => $items['numRows'], 'items' => $items), 'currency' => MG::getSetting('currency')); } echo json_encode($searchData); exit; }
echo SITE; ?> /cart"> <table class="cart-table"> <?php $i = 1; foreach ($data['productPositions'] as $product) { ?> <tr> <td class="img-cell"> <a href="<?php echo $product["link"]; ?> " target="_blank" class="cart-img"> <img src="<?php echo mgImageProductPath($product["image_url"], $product['id'], 'small'); ?> " alt=""> </a> </td> <td> <a href="<?php echo SITE . '/'; echo isset($product["category_url"]) ? $product["category_url"] : 'catalog/'; echo $product["product_url"]; ?> " target="_blank"> <?php echo $product['title']; ?> </a>
/** * Создает массивы данных для картинок товара, возвращает три массива со ссылками, заголовками и альт, текстами. * @param string $imageUrl строка с разделителями | мезжду ссылок * @param string $imageTitle строка с разделителями | мезжду заголовков * @param string $imageAlt строка с разделителями | мезжду тестов */ public function imagesConctruction($imageUrl, $imageTitle, $imageAlt, $id = 0) { $result = array('images_product' => array(), 'images_title' => array(), 'images_alt' => array()); // Получаем массив картинок для продукта, при этом первую в наборе делаем основной. $arrayImages = explode("|", $imageUrl); foreach ($arrayImages as $cell => $image) { $arrayImages[$cell] = str_replace(SITE . '/uploads/', '', mgImageProductPath($image, $id)); } if (!empty($arrayImages)) { $result['image_url'] = $arrayImages[0]; } $result['images_product'] = $arrayImages; // Получаем массив title для картинок продукта, при этом первый в наборе делаем основной. $arrayTitles = explode("|", $imageTitle); if (!empty($arrayTitles)) { $result['image_title'] = $arrayTitles[0]; } $result['images_title'] = $arrayTitles; // Получаем массив alt для картинок продукта, при этом первый в наборе делаем основной. $arrayAlt = explode("|", $imageAlt); if (!empty($arrayAlt)) { $result['image_alt'] = $arrayAlt[0]; } $result['images_alt'] = $arrayAlt; $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
/** * Получает параметры заказа */ public function getOrderData() { $model = new Models_Order(); $orderData = $model->getOrder(" id = " . DB::quote($_POST['id'])); $orderData = $orderData[$_POST['id']]; if ($orderData['number'] == '') { $orderData['number'] = $orderData['id']; DB::query("UPDATE `" . PREFIX . "order` SET `number`= " . DB::quote($orderData['number']) . " WHERE `id`=" . DB::quote($orderData['id']) . ""); } $orderData['yur_info'] = unserialize(stripslashes($orderData['yur_info'])); $orderData['order_content'] = unserialize(stripslashes($orderData['order_content'])); // Запрос для проверки, существует ли система скидок $percent = false; $discountSyst = false; $res = DB::query('SELECT * FROM `' . PREFIX . 'plugins` WHERE `folderName` = "discount-system"'); $act = DB::fetchArray($res); $result = DB::query('SHOW TABLES LIKE "' . PREFIX . 'discount-system%"'); if (DB::numRows($result) == 2 && $act['active']) { $percent = 0; $discountSyst = true; } if (!empty($orderData['order_content'])) { $product = new Models_Product(); foreach ($orderData['order_content'] as &$item) { foreach ($item as &$v) { $v = rawurldecode($v); } } foreach ($orderData['order_content'] as &$items) { $res = $product->getProduct($items['id']); $items['image_url'] = mgImageProductPath($res['image_url'], $items['id'], 'small'); $items['property'] = htmlspecialchars_decode(str_replace('&', '&', $items['property'])); $response['discount'] = $items['discount']; $percent = $items['discount']; $items['maxCount'] = $res['count']; $variants = DB::query("SELECT `id`, `count` FROM `" . PREFIX . "product_variant`\r\n WHERE `product_id`=" . DB::quote($items['id']) . " AND `code`=" . DB::quote($items['code'])); if ($variant = DB::fetchAssoc($variants)) { $items['variant'] = $variant['id']; $items['maxCount'] = $variant['count']; } $items['notSet'] = $model->notSetGoods($items['id']); } } //заменить на получение скидки $codes = array(); // Запрос для проверки , существуют ли промокоды. $result = DB::query('SHOW TABLES LIKE "' . PREFIX . 'promo-code"'); if (DB::numRows($result)) { $res = DB::query('SELECT * FROM `' . PREFIX . 'plugins` WHERE `folderName` = "promo-code"'); $act = DB::fetchArray($res); if ($act['active']) { $res = DB::query('SELECT code, percent FROM `' . PREFIX . 'promo-code` WHERE invisible = 1 AND now() >= `from_datetime` AND now() <= `to_datetime`'); while ($code = DB::fetchAssoc($res)) { $codes[] = $code['code']; if ($code['code'] == $orderData['order_content'][0]['coupon']) { $percent = $percent == 0 ? $code['percent'] : $percent; } } } } $response['order'] = $orderData; $response['order']['discountsSystem'] = $discountSyst; $response['order']['discontPercent'] = $percent; $response['order']['promoCodes'] = $codes; $response['order']['date_delivery'] = $orderData['date_delivery'] ? date('d.m.Y', strtotime($orderData['date_delivery'])) : ''; $deliveryArray = $model->getDeliveryMethod(); $response['deliveryArray'] = $deliveryArray; $paymentArray = array(); $i = 1; while ($payment = $model->getPaymentMethod($i)) { $paymentArray[$i] = $payment; $i++; } $response['paymentArray'] = $paymentArray; $this->data = $response; return true; }
/** * Возвращает список найденных продуктов соответствующих поисковой фразе. * @param string $keyword - поисковая фраза. * @param string $allRows - получить сразу все записи. * @param string $onlyActive - учитывать только активные продукты. * @param boolean $adminPanel - запрос из публичной части или админки. * @return array */ public function getListProductByKeyWord($keyword, $allRows = false, $onlyActive = false, $adminPanel = false, $mode = false) { $result = array('catalogItems' => array(), 'pager' => null, 'numRows' => null); $keyword = htmlspecialchars($keyword); $keywordUnTrim = $keyword; $keyword = trim($keyword); if (empty($keyword) || mb_strlen($keyword, 'UTF-8') <= 2) { return $result; } $currencyRate = MG::getSetting('currencyRate'); $currencyShopIso = MG::getSetting('currencyShopIso'); // Поиск по точному соответствию. // Пример $keyword = " 'красный', зеленый " // Убираем начальные пробелы и конечные. $keyword = trim($keyword); //$keyword = "'красный', зеленый" if (SEARCH_FULLTEXT) { // Вырезаем спец символы из поисковой фразы. $keyword = preg_replace('/[`~!#$%^*()=+\\\\|\\/\\[\\]{};:"\',<>?]+/', '', $keyword); //$keyword = "красный зеленый" // Замена повторяющихся пробелов на на один. $keyword = preg_replace('/ +/', ' ', $keyword); //$keyword = "красный зеленый" // Обрамляем каждое слово в звездочки, для расширенного поиска. $keyword = str_replace(' ', '* +', $keyword); //$keyword = "красный* *зеленый" // Добавляем по краям звездочки. $keyword = '+' . $keyword . '*'; //$keyword = "*красный* *зеленый*" $sql = "\r\n SELECT distinct p.code, CONCAT(c.parent_url,c.url) AS category_url,\r\n p.url AS product_url, p.*, pv.product_id as variant_exist, pv.id as variant_id, rate,(p.price_course + p.price_course * (IFNULL(rate,0))) as `price_course`\r\n FROM `" . PREFIX . "product` AS p\r\n LEFT JOIN `" . PREFIX . "category` AS c ON c.id = p.cat_id\r\n LEFT JOIN `" . PREFIX . "product_variant` AS pv ON p.id = pv.product_id"; if (!$adminPanel) { $sql .= " LEFT JOIN (\r\n SELECT pv.product_id, SUM( pv.count ) AS varcount\r\n FROM `" . PREFIX . "product_variant` AS pv\r\n GROUP BY pv.product_id\r\n ) AS temp ON p.id = temp.product_id"; } $prod = new Models_Product(); $fulltext = ""; $sql .= " WHERE "; $match = " MATCH (\r\n p.`title` , p.`code`, p.`description` " . $fulltextInVar . " " . $fulltext . "\r\n )\r\n AGAINST (\r\n '" . $keyword . "'\r\n IN BOOLEAN\r\n MODE\r\n ) "; DB::query("SELECT id FROM `" . PREFIX . "product_variant` LIMIT 1"); //Если есть варианты товаров то будеи искать и в них. if (DB::numRows(DB::query("SELECT id FROM `" . PREFIX . "product_variant` LIMIT 1"))) { $fulltextInVar = ', pv.`title_variant`, pv.`code` '; $match = "(" . $match . " OR MATCH (pv.`title_variant`, pv.`code`)\r\n AGAINST (\r\n '" . $keyword . "'\r\n IN BOOLEAN\r\n MODE\r\n )) "; } $sql .= $match; // Проверяем чтобы в вариантах была хотябы одна единица. if (!$adminPanel) { if (MG::getSetting('printProdNullRem') == "true") { $sql .= " AND (temp.`varcount` > 0 OR temp.`varcount` < 0 OR p.count>0 OR p.count<0)"; } } if ($onlyActive) { $sql .= ' AND p.`activity` = 1'; } } else { $sql = "\r\n SELECT distinct p.id, CONCAT(c.parent_url,c.url) AS category_url,\r\n p.url AS product_url, p.*, pv.product_id as variant_exist, pv.id as variant_id, rate,(p.price_course + p.price_course * (IFNULL(rate,0))) as `price_course`, \r\n p.currency_iso\r\n FROM `" . PREFIX . "product` AS p\r\n LEFT JOIN `" . PREFIX . "category` AS c ON c.id = p.cat_id\r\n LEFT JOIN `" . PREFIX . "product_variant` AS pv ON p.id = pv.product_id"; if (!$adminPanel) { $sql .= " LEFT JOIN (\r\n SELECT pv.product_id, SUM( pv.count ) AS varcount\r\n FROM `" . PREFIX . "product_variant` AS pv\r\n GROUP BY pv.product_id\r\n ) AS temp ON p.id = temp.product_id"; } $prod = new Models_Product(); $fulltext = ""; //Если есть варианты товаров то будеи искать и в них. if (DB::numRows(DB::query("SELECT id FROM `" . PREFIX . "product_variant` LIMIT 1"))) { $fulltextInVar = " OR\r\n pv.`title_variant` LIKE '%" . DB::quote($keyword, true) . "%'\r\n OR\r\n pv.`code` LIKE '%" . DB::quote($keyword, true) . "%'"; } $sql .= " WHERE (\r\n p.`title` LIKE '%" . DB::quote($keyword, true) . "%'\r\n OR\r\n p.`code` LIKE '%" . DB::quote($keyword, true) . "%'\r\n " . $fulltextInVar . ')'; // Проверяем чтобы в вариантах была хотябы одна единица. if (!$adminPanel) { if (MG::getSetting('printProdNullRem') == "true") { $sql .= " AND (temp.`varcount` > 0 OR temp.`varcount` < 0 OR p.count>0 OR p.count<0)"; } } if ($onlyActive) { $sql .= ' AND p.`activity` = 1'; } } $page = URL::get("page"); $settings = MG::get('settings'); //if ($mode=='groupBy') { $sql .= ' GROUP BY p.id'; //} if ($allRows) { $sql .= ' LIMIT 15'; } $navigator = new Navigator($sql, $page, $settings['countСatalogProduct'], $linkCount = 6, $allRows); // Определяем класс. $this->products = $navigator->getRowsSql(); // добавим к полученым товарам их свойства $this->products = $this->addPropertyToProduct($this->products); $this->pager = $navigator->getPager(); $result = array('catalogItems' => $this->products, 'pager' => $this->pager, 'numRows' => $navigator->getNumRowsSql()); if (count($result['catalogItems']) > 0) { // упорядочивание списка найденых продуктов // первыми в списке будут стоять те товары, у которых полностью совпала поисковая фраза // затем будут слова в начале которых встретилось совпадение // в конце слова в середине которых встретилось совпадение // // $keyword = str_replace('*', '', $keyword); $resultTemp = $result['catalogItems']; $prioritet0 = array(); $prioritet1 = array(); $prioritet2 = array(); foreach ($resultTemp as $key => $item) { $title = mb_convert_case($item['title'], MB_CASE_LOWER, "UTF-8"); $keyword = mb_convert_case($keyword, MB_CASE_LOWER, "UTF-8"); $item['image_url'] = mgImageProductPath($item["image_url"], $item['id']); if (trim($title) == $keyword) { $prioritet0[] = $item; continue; } if (strpos($title, $keyword) === 0) { $prioritet1[] = $item; } else { $prioritet2[] = $item; } } $result['catalogItems'] = array_merge($prioritet0, $prioritet1, $prioritet2); } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
echo $variant['id']; ?> " data-count="<?php echo $variant['count']; ?> " name="variant" value = "<?php echo $variant['id']; ?> " <?php echo !$i++ ? 'checked=checked' : ''; ?> > </td> <td> <?php $src = mgImageProductPath($variant['image'], $variant['product_id'], 'small'); echo !empty($variant['image']) ? '<img src="' . $src . '" width="30" height="20">' : ''; ?> </td> <td> <label for="variant-<?php echo $variant['id']; ?> "><?php echo $variant['title_variant']; ?> </label> </td> <td style="padding-left:5px;" class="nowrap"> <span> <?php