Example #1
0
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'];
}
Example #2
0
 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;
 }
Example #3
0
 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);
 }
Example #4
0
 /**
  * Выгружает содержание всего каталога в 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;
 }
Example #5
0
 /**
  * Возвращает список найденных продуктов соответствующих поисковой фразе.
  * @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);
 }
Example #6
0
    $_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']);
Example #7
0
 /**
  * Получает информацию о каждом товаре.
  * @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']);
 }