function getSaleGoods() { $model = new Models_Catalog(); $saleProducts = $model->getListByUserFilter(MG::getSetting('countSaleProduct'), ' p.old_price>0 and p.activity=1 ORDER BY sort ASC'); foreach ($saleProducts['catalogItems'] as &$item) { $item["recommend"] = 0; $item["new"] = 0; $imagesUrl = explode("|", $item['image_url']); $item["image_url"] = ""; if (!empty($imagesUrl[0])) { $item["image_url"] = $imagesUrl[0]; } } return $saleProducts['catalogItems']; }
public function getGroupsData() { $model = new Models_Catalog(); $currencyRate = MG::getSetting('currencyRate'); $currencyShopIso = MG::getSetting('currencyShopIso'); // Формируем список товаров для блока рекомендуемой продукции. $recommendProducts = $model->getListByUserFilter(MG::getSetting('countRecomProduct'), ' p.recommend = 1 and p.activity=1 ORDER BY sort ASC'); foreach ($recommendProducts['catalogItems'] as &$item) { $imagesUrl = explode("|", $item['image_url']); $item["image_url"] = ""; if (!empty($imagesUrl[0])) { $item["image_url"] = $imagesUrl[0]; } $item['currency_iso'] = $item['currency_iso'] ? $item['currency_iso'] : $currencyShopIso; // $item['price'] *= $currencyRate[$item['currency_iso']]; $item['old_price'] = $item['old_price'] * $currencyRate[$item['currency_iso']]; $item['old_price'] = $item['old_price'] ? MG::priceCourse($item['old_price']) : 0; $item['price'] = MG::priceCourse($item['price_course']); } // Формируем список товаров для блока новинок. $newProducts = $model->getListByUserFilter(MG::getSetting('countNewProduct'), ' p.new = 1 and p.activity=1 ORDER BY sort ASC'); foreach ($newProducts['catalogItems'] as &$item) { $imagesUrl = explode("|", $item['image_url']); $item["image_url"] = ""; if (!empty($imagesUrl[0])) { $item["image_url"] = $imagesUrl[0]; } $item['currency_iso'] = $item['currency_iso'] ? $item['currency_iso'] : $currencyShopIso; // $item['price'] *= $currencyRate[$item['currency_iso']]; $item['old_price'] = $item['old_price'] * $currencyRate[$item['currency_iso']]; $item['old_price'] = $item['old_price'] ? MG::priceCourse($item['old_price']) : 0; $item['price'] = MG::priceCourse($item['price_course']); } // Формируем список товаров со старой ценой. $saleProducts = $model->getListByUserFilter(MG::getSetting('countSaleProduct'), ' p.old_price>0 and p.activity=1 ORDER BY sort ASC'); foreach ($saleProducts['catalogItems'] as &$item) { $imagesUrl = explode("|", $item['image_url']); $item["image_url"] = ""; if (!empty($imagesUrl[0])) { $item["image_url"] = $imagesUrl[0]; } $item['currency_iso'] = $item['currency_iso'] ? $item['currency_iso'] : $currencyShopIso; //$item['price'] *= $currencyRate[$item['currency_iso']]; $item['old_price'] = $item['old_price'] * $currencyRate[$item['currency_iso']]; $item['old_price'] = $item['old_price'] ? MG::priceCourse($item['old_price']) : 0; $item['price'] = MG::priceCourse($item['price_course']); } $html = MG::get('pages')->getPageByUrl('index'); $html['html_content'] = MG::inlineEditor(PREFIX . 'page', "html_content", $html['id'], $html['html_content']); $data = array('recommendProducts' => $recommendProducts, 'newProducts' => $newProducts, 'saleProducts' => $saleProducts); return $data; }
function __construct() { $settings = MG::get('settings'); // Если нажата кнопка купить. $_REQUEST['category_id'] = URL::getQueryParametr('category_id'); if (!empty($_REQUEST['inCartProductId'])) { $cart = new Models_Cart(); $property = $cart->createProperty($_POST); $cart->addToCart($_REQUEST['inCartProductId'], $_REQUEST['amount_input'], $property); SmalCart::setCartData(); MG::redirect('/cart'); } $countСatalogProduct = $settings['countСatalogProduct']; // Показать первую страницу выбранного раздела. $page = 1; // Запрашиваемая страница. if (isset($_REQUEST['p'])) { $page = $_REQUEST['p']; } $model = new Models_Catalog(); // Получаем список вложенных категорий, для вывода всех продуктов, на страницах текущей категории. $model->categoryId = MG::get('category')->getCategoryList($_REQUEST['category_id']); // В конец списка, добавляем корневую текущую категорию. $model->categoryId[] = $_REQUEST['category_id']; // Передаем номер требуемой страницы, и количество выводимых объектов. $countСatalogProduct = 100; $actionButton = MG::getSetting('actionInCatalog') === "true" ? 'actionBuy' : 'actionView'; $dataGroupProducts = Storage::get(md5('dataGroupProductsIndexConroller')); $currencyRate = MG::getSetting('currencyRate'); $currencyShopIso = MG::getSetting('currencyShopIso'); $randomProdBlock = MG::getSetting('randomProdBlock') == "true" ? true : false; if ($dataGroupProducts == null) { // Формируем список товаров со старой ценой. $sort = $randomProdBlock ? "RAND()" : "sort"; $saleProducts = $model->getListByUserFilter(MG::getSetting('countSaleProduct'), ' (p.old_price>0 || pv.old_price>0) and p.activity=1 ORDER BY ' . $sort . ' ASC'); $recommendProducts = $model->getListByUserFilter(MG::getSetting('countRecomProduct'), ' p.recommend=1 ORDER BY ' . $sort . ' ASC'); $newProducts = $model->getListByUserFilter(MG::getSetting('countNewProduct'), ' p.new=1 ORDER BY ' . $sort . ' ASC'); foreach ($saleProducts['catalogItems'] as &$item) { $imagesUrl = explode("|", $item['image_url']); $item["image_url"] = ""; if (!empty($imagesUrl[0])) { $item["image_url"] = $imagesUrl[0]; } $item['currency_iso'] = $item['currency_iso'] ? $item['currency_iso'] : $currencyShopIso; //$item['price'] *= $currencyRate[$item['currency_iso']]; $item['old_price'] = $item['old_price'] ? MG::priceCourse($item['old_price']) : 0; $item['price'] = MG::priceCourse($item['price_course']); if ($printCompareButton != 'true') { $item['actionCompare'] = ''; } if ($actionButton == 'actionBuy' && $item['count'] == 0) { $item['actionBuy'] = $item['actionView']; } } $dataGroupProducts['recommendProducts'] = $recommendProducts; $dataGroupProducts['newProducts'] = $newProducts; $dataGroupProducts['saleProducts'] = $saleProducts; Storage::save(md5('dataGroupProductsIndexConroller'), $dataGroupProducts); } $recommendProducts = $dataGroupProducts['recommendProducts']; $newProducts = $dataGroupProducts['newProducts']; $saleProducts = $dataGroupProducts['saleProducts']; $html = MG::get('pages')->getPageByUrl('index'); if (!empty($html)) { $html['html_content'] = MG::inlineEditor(PREFIX . 'page', "html_content", $html['id'], $html['html_content']); } else { $html['html_content'] = ''; } $this->data = array('newProducts' => !empty($newProducts['catalogItems']) ? $newProducts['catalogItems'] : array(), 'recommendProducts' => !empty($recommendProducts['catalogItems']) ? $recommendProducts['catalogItems'] : array(), 'saleProducts' => !empty($saleProducts['catalogItems']) ? $saleProducts['catalogItems'] : array(), 'titeCategory' => $html['meta_title'], 'cat_desc' => $html['html_content'], 'meta_title' => $html['meta_title'], 'meta_keywords' => $html['meta_keywords'], 'meta_desc' => $html['meta_desc'], 'currency' => $settings['currency'], 'actionButton' => $actionButton); }
/** * Выгружает содержание всего каталога в CSV файл. * $listProductId выгрузка выбранных товаров * @return array */ public function exportToCsv($listProductId = array()) { header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream;"); header("Content-Type: application/download"); header("Content-Disposition: attachment;filename=data.csv"); header("Content-Transfer-Encoding: binary "); $csvText = ''; $csvText .= '"Категория";"URL категории";"Товар";"Вариант";"Описание";"Цена";"URL";"Изображение";"Артикул";"Количество";"Активность";"Заголовок [SEO]";"Ключевые слова [SEO]";"Описание [SEO]";"Старая цена";"Рекомендуемый";"Новый";"Сортировка";"Вес";"Связанные артикулы";"Смежные категории";"Ссылка на товар";"Валюта";"Свойства";' . "\n"; $import = new Import(); $product = new Models_Product(); $catalog = new Models_Catalog(); Storage::$noCache = true; $page = 1; // получаем максимальное количество заказов, если выгрузка всего ассортимента if (empty($listProductId)) { $maxCountPage = ceil($product->getProductsCount() / 500); } else { $maxCountPage = ceil(count($listProductId) / 500); } $catalog->categoryId = MG::get('category')->getCategoryList(0); $catalog->categoryId[] = 0; $listId = implode(',', $listProductId); for ($page = 1; $page <= $maxCountPage; $page++) { URL::setQueryParametr("page", $page); if (empty($listProductId)) { $catalog->getList(500, true); } else { $catalog->getListByUserFilter(500, ' p.id IN (' . DB::quote($listId, 1) . ')'); } foreach ($catalog->products as $row) { $parent = $row['category_url']; // Подставляем всесто URL названия разделов. $resultPath = ''; $resultPathUrl = ''; while ($parent) { $url = URL::parsePageUrl($parent); $parent = URL::parseParentUrl($parent); $parent = $parent != '/' ? $parent : ''; $alreadyParentCat = MG::get('category')->getCategoryByUrl($url, $parent); $resultPath = $alreadyParentCat['title'] . '/' . $resultPath; $resultPathUrl = $alreadyParentCat['url'] . '/' . $resultPathUrl; } $resultPath = trim($resultPath, '/'); $resultPathUrl = trim($resultPathUrl, '/'); $variants = $product->getVariants($row['id']); if (!empty($variants)) { foreach ($variants as $key => $variant) { foreach ($variant as $k => $v) { if ($k != 'sort') { $row[$k] = $v; } } $row['category_url'] = $resultPath; $row['category_full_url'] = $resultPathUrl; $csvText .= $this->addToCsvLine($row, 1); } } else { $row['category_url'] = $resultPath; $row['category_full_url'] = $resultPathUrl; $csvText .= $this->addToCsvLine($row); } } } $csvText = substr($csvText, 0, -2); // удаляем последний символ '\n' $csvText = mb_convert_encoding($csvText, "WINDOWS-1251", "UTF-8"); if (empty($listProductId)) { echo $csvText; exit; } else { $date = date('m_d_Y_h_i_s'); file_put_contents('data_csv_' . $date . '.csv', $csvText); $msg = 'data_csv_' . $date . '.csv'; } return $msg; }
/** * Возвращает список найденных продуктов соответствующих поисковой фразе. * @param string $keyword - поисковая фраза. * @param string $allRows - получить сразу все записи. * @param string $onlyActive - учитывать только активные продукты. * @param boolean $adminPanel - запрос из публичной части или админки. * @return array */ public function getListProductByKeyWord($keyword, $allRows = false, $onlyActive = false, $adminPanel = false, $sort = NULL, $isStock = NULL, $count = NULL) { $settings = MG::get('settings'); if (!$count) { $count = $settings['countСatalogProduct']; } $result = array(); // Поиск по точному соответствию. $model = new Models_Catalog(); if (!isset($_GET["page"])) { $result = $model->getListByUserFilter(1, " p.title =" . DB::quote(trim($keyword)) . " OR p.code =" . DB::quote(trim($keyword))); } if (count($result['catalogItems']) !== 0) { foreach ($result['catalogItems'] as &$item) { $imagesUrl = explode("|", $item["image_url"]); $item["image_url"] = ""; if (!empty($imagesUrl[0])) { $item["image_url"] = $imagesUrl[0]; } $item['currency'] = MG::getSetting('currency'); } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); } // Пример $keyword = " 'красный', зеленый " // Убираем начальные пробелы и конечные. $keyword = trim($keyword); //$keyword = "'красный', зеленый" // Вырезаем спец символы из поисковой фразы. $keyword = preg_replace('/[-`~!#$%^&*()_=+\\\\|\\/\\[\\]{};:"\',<>?]+/', '', $keyword); //$keyword = "красный зеленый" // Замена повторяющихся пробелов на на один. $keyword = preg_replace('/ +/', ' ', $keyword); //$keyword = "красный зеленый" // Обрамляем каждое слово в звездочки, для расширенного поиска. $keyword = str_replace(' ', '* *', $keyword); //$keyword = "красный* *зеленый" // Добавляем по краям звездочки. $keyword = '*' . $keyword . '*'; //$keyword = "*красный* *зеленый*" if ($sort == 'popular') { $sql = " \n SELECT distinct p.code, v.views, CONCAT(c.parent_url,c.url) AS category_url, \n p.url AS product_url, p.*, pv.product_id as variant_exist\n FROM `" . PREFIX . "product` AS p\n LEFT JOIN `mg_popular-goods_visits` v ON v.id_product = p.id\n LEFT JOIN `" . PREFIX . "category` AS c ON c.id = p.cat_id\n LEFT JOIN `" . PREFIX . "product_variant` AS pv ON p.id = pv.product_id"; } else { $sql = " \n SELECT distinct p.code, CONCAT(c.parent_url,c.url) AS category_url, \n p.url AS product_url, p.*, pv.product_id as variant_exist\n FROM `" . PREFIX . "product` AS p\n LEFT JOIN `" . PREFIX . "category` AS c ON c.id = p.cat_id\n LEFT JOIN `" . PREFIX . "product_variant` AS pv ON p.id = pv.product_id"; } if (!$adminPanel) { $sql .= " LEFT JOIN (\n SELECT pv.product_id, SUM( pv.count ) AS varcount\n FROM `" . PREFIX . "product_variant` AS pv\n GROUP BY pv.product_id\n ) AS temp ON p.id = temp.product_id"; } $product = new Models_Product(); $fulltext = ""; // Проверяем наличие записей в вариантах если их нет, то не включаем // в поиск полнотекстовые индесты таблицы вариантов. if ($product->getVariants($id)) { $fulltext = ", pv.`code`, pv.`title_variant`"; } $sql .= " WHERE MATCH (\n p.`title` , p.`description` , p.`code` , p.`meta_title` , p.`meta_keywords` , p.`meta_desc` " . $fulltext . "\n )\n AGAINST (\n '" . $keyword . "'\n IN BOOLEAN\n MODE\n ) "; if ($onlyActive) { $sql .= ' AND p.`activity` = 1'; } if ($isStock) { $sql .= " AND (temp.`varcount` > 0 OR temp.`varcount` < 0 OR p.count>0 OR p.count<0)"; } if ($sort == 'desc') { $sql .= ' ORDER BY price DESC'; } else { if ($sort == 'asc') { $sql .= ' ORDER BY price ASC'; } else { if ($sort == 'popular') { $sql .= ' ORDER BY v.views DESC'; } } } $page = URL::get("page"); $navigator = new Navigator($sql, $page, $count, $linkCount = 6, $allRows); // Определяем класс. $this->pages = $navigator->getRowsSql(); $idsProduct = array(); if (!empty($this->pages)) { foreach ($this->pages as $key => $product) { $idsProduct[$product['id']] = $key; // Назначаем для продукта позьзовательские характеристики по умолчанию, заданные категорией. $this->pages[$key]['thisUserFields'] = MG::get('category')->getUserPropertyCategoryById($product['cat_id']); $this->pages[$key]['currency'] = $settings['currency']; $this->pages[$key]['actionBuy'] = '<a href="' . SITE . '/catalog?inCartProductId=' . $product["id"] . '" class="addToCart product-buy" data-item-id="' . $product["id"] . '">В корзину</a>'; $this->pages[$key]['actionView'] = '<a href="' . SITE . '/' . (isset($product["category_url"]) ? $product["category_url"] : 'catalog') . '/' . $product["product_url"] . '" class="product-info">Подробнее</a>'; $imagesUrl = explode("|", $this->pages[$key]['image_url']); $this->pages[$key]["image_url"] = ""; if (!empty($imagesUrl[0])) { $this->pages[$key]["image_url"] = $imagesUrl[0]; } } } if ($findPart = trim(DB::quote(implode(',', array_keys($idsProduct))), "'")) { // Формируем список id продуктов к которым нужно найти пользовательские характеристики. $where = ' IN (' . $findPart . ')'; } else { $findPart = ' IN (0)'; } $res = DB::query("\n SELECT pup.property_id, pup.value, pup.product_id, pup.type_view, prop.*\n FROM `" . PREFIX . "product_user_property` as pup\n LEFT JOIN `" . PREFIX . "property` as prop\n ON pup.property_id = prop.id\n WHERE pup.`product_id` " . $where); while ($userFields = DB::fetchAssoc($res)) { if (!empty($this->pages)) { $this->pages[$idsProduct[$userFields['product_id']]]['thisUserFields'][$userFields['property_id']] = $userFields; } } $this->pager = $navigator->getPager(); $result = array('catalogItems' => $this->pages, 'pager' => $this->pager, 'numRows' => $navigator->getNumRowsSql()); if (count($result['catalogItems']) == 0) { //примитивный поиск по названию. 100% соответствие $sql = " \n SELECT id\n FROM `" . PREFIX . "product` AS p\n WHERE title = " . DB::quote($keyword) . " OR code = " . DB::quote($keyword); if ($row = DB::fetchAssoc($sql)) { $product = new Models_Product(); } } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
$_REQUEST['category_ids'] = array(0); } $arrfilter = $model->filterPublic(false, false, false); $this->filter = $arrfilter['filterBarHtml']; if (isset($_REQUEST['applyFilter'])) { $userFilter = $arrfilter['userFilter']; } $sorterData = explode('|', $_POST['sorter']); if ($sorterData[1] > 0) { $sorterData[3] = 'desc'; } else { $sorterData[3] = 'asc'; } $countPrintRowsProduct = MG::getSetting('countPrintRowsProduct'); if (!empty($userFilter)) { $catalog = $model->getListByUserFilter($countPrintRowsProduct, $userFilter, true); } else { $catalog = $model->getList($countPrintRowsProduct, true); } //категории: $listCategories = MG::get('category')->getCategoryTitleList(); $arrayCategories = $model->categoryId = MG::get('category')->getHierarchyCategory(0); $categoriesOptions = MG::get('category')->getTitleCategory($arrayCategories, URL::get('category_id')); $product = new Models_Product(); $this->productsCount = $product->getProductsCount(); $this->catalog = $catalog['catalogItems']; $this->listCategories = $listCategories; $this->categoriesOptions = $categoriesOptions; $this->countPrintRowsProduct = $countPrintRowsProduct; $this->pagination = $catalog['pager']; $this->displayFilter = $_POST['cat_id'] != "null" && !empty($_POST['cat_id']) || isset($_POST['displayFilter']);
/** * Получает информацию о каждом товаре. * @param array $viewCategoryId - массив id категорий. */ public function getInfoProducts($viewCategoryId) { if (empty($viewCategoryId)) { return false; } $listProductsArray = array(); $countProduct = 0; foreach ($viewCategoryId as $k => $id) { $listProductsIdTemp = $_SESSION['compareList'][$id]; $countProduct += count($_SESSION['compareList'][$id]); $listProductsArray = array_merge($listProductsArray, $listProductsIdTemp); } $listProductsId = implode(',', $listProductsArray); $catalogModel = new Models_Catalog(); $productModel = new Models_Product(); if (!empty($listProductsId)) { $arrProduct = $catalogModel->getListByUserFilter($countProduct, ' p.id IN (' . DB::quote($listProductsId, true) . ')'); } $currencyRate = MG::getSetting('currencyRate'); $currencyShopIso = MG::getSetting('currencyShopIso'); $currencyShopIso = MG::getSetting('currencyShopIso'); foreach ($arrProduct['catalogItems'] as &$product) { $blockVariants = $productModel->getBlockVariants($product['id']); $blockedProp = $productModel->noPrintProperty(); $propertyFormData = $productModel->createPropertyForm($param = array('id' => $product['id'], 'maxCount' => $product['count'], 'productUserFields' => $product['thisUserFields'], 'action' => "/catalog", 'method' => "POST", 'ajax' => true, 'blockedProp' => $blockedProp, 'noneAmount' => false, 'titleBtn' => MG::getSetting('buttonBuyName'), 'blockVariants' => $blockVariants, 'printStrProp' => 'false', 'printCompareButton' => 'false', 'currency_iso' => $product['currency_iso'])); if ($product['count'] < 0) { $product['count'] = "много"; } $product['price'] += $propertyFormData['marginPrice']; $product['currency_iso'] = $product['currency_iso'] ? $product['currency_iso'] : $currencyShopIso; $product['currency'] = MG::getSetting('currency'); $product['old_price'] = $product['old_price'] * $currencyRate[$product['currency_iso']]; $product['old_price'] = $product['old_price'] ? MG::priceCourse($product['old_price']) : 0; $product['price'] = MG::priceCourse($product['price_course'], true, true); $product['propertyForm'] = $propertyFormData['html']; $product['propertyNodummy'] = $propertyFormData['propertyNodummy']; $product['stringsProperties'] = $propertyFormData['stringsProperties']; $product['image_url'] = explode('|', $product['image_url']); $product['image_url'] = $product['image_url'][0]; } return array('catalogItems' => $arrProduct['catalogItems']); }