design->assign('categories', $this->categories->get_categories_tree()); require_once($_SERVER['DOCUMENT_ROOT'] . '/mobiledetect/Mobile_Detect.php'); $detect = new Mobile_Detect; $this->design->assign('detect', $detect); // GET-Параметры $category_url = $this->request->get('category', 'string'); $brand_url = $this->request->get('brand', 'string'); $order = $this->request->get('order', 'string'); //echo '--' . $category_url . '--';die; $filter = array(); $filter['visible'] = 1; $seobrand = 0; if($brand_url && $category_url){ $this->design->assign('rel_canonical', '/catalog/' . $category_url . '/'); } // Если задан бренд, выберем его из базы if (!empty($brand_url)) { $brand = $this->brands->get_brand((string)$brand_url); if (empty($brand)) return false; $this->design->assign('brand', $brand); $seobrand = $brand; $filter['brand_id'] = $brand->id; $this->design->assign('meta_title', 'Товары для тюнинга '.$brand->name . ' в Санкт-Петербурге'); $this->design->assign('meta_description', 'В продаже товары для тюнинга автомобилей '.$brand->name . ' - тюнинг центр Atomic Garage'); $this->design->assign('meta_keywords', 'товары, '.$brand->name . ', тюнинг центр, авто, автомобиль, фары, оптика, санкт-петербург, продажа, установка, замена, ремонт'); } // Если выбран бренд из фильтра if($brand = $this->request->get('b')) $filter['brand_id'] = $brand; // Выберем текущую категорию if (!empty($category_url)) { $category = $this->categories->get_category((string)$category_url); //print_r($category);die; if (empty($category) || (!$category->visible && empty($_SESSION['admin']))) return false; // if($category->category_h1 == '' ){ $category->category_h1 = $category->name; } $this->design->assign('category', $category); $filter['category_id'] = $category->children; /*if(isset($_GET['page']) && $_GET['page'] && $category->id == 24){ header("HTTP/1.0 404 Not Found"); header("Status: 404 Not Found"); Header( "Location: /404/" ); die; }*/ } $filterForMinPrice = $filter; if($order == 'views') $filter['sort'] = $order; //print_r($filter); // Цена от ... до.... $prices = array(); $priceproducts = array(); foreach($this->products->get_products($filter) as $p) $priceproducts[$p->id] = $p; $price_products_ids = array_keys($priceproducts); //uuset($priceproducts); $prices = (array)$this->variants->prices_range(array('product_id'=>$price_products_ids)); $prices['current_min_price'] = $this->request->get('min_price'); $prices['current_max_price'] = $this->request->get('max_price'); if(!isset($prices['current_min_price']) && empty($prices['current_min_price'])) $prices['current_min_price'] = $prices['min']; if(!isset($prices['current_max_price']) && empty($prices['current_max_price'])) $prices['current_max_price'] = $prices['max']; $this->design->assign('prices', $prices); $filter['min_price'] = $prices['current_min_price']; $filter['max_price'] = $prices['current_max_price']; // Если задано ключевое слово $keyword = $this->request->get('keyword'); if (!empty($keyword)) { $this->design->assign('keyword', $keyword); $filter['keyword'] = $keyword; } // Сортировка товаров, сохраняем в сесси, чтобы текущая сортировка оставалась для всего сайта if($sort = $this->request->get('sort', 'string')) $_SESSION['sort'] = $sort; if (!empty($_SESSION['sort'])) $filter['sort'] = $_SESSION['sort']; else $filter['sort'] = 'position'; if($order == 'views') $filter['sort'] = $order; $this->design->assign('sort', $filter['sort']); if($order) $this->design->assign('sort_order', $order); // Свойства товаров if(!empty($category)) { $features = array(); foreach($this->features->get_features(array('category_id'=>$category->id, 'in_filter'=>1)) as $feature) { $features[$feature->id] = $feature; if(($val = strval($this->request->get($feature->id)))!='') $filter['features'][$feature->id] = $val; } $options_filter['visible'] = 1; $features_ids = array_keys($features); if(!empty($features_ids)) $options_filter['feature_id'] = $features_ids; $options_filter['category_id'] = $category->children; if(isset($filter['features'])) $options_filter['features'] = $filter['features']; if(!empty($brand)) $options_filter['brand_id'] = $brand->id; $options = $this->features->get_options($options_filter); foreach($options as $option) { if(isset($features[$option->feature_id])) $features[$option->feature_id]->options[] = $option; } foreach($features as $i=>&$feature) { if(empty($feature->options)) unset($features[$i]); } $this->design->assign('features', $features); } // Постраничная навигация $items_per_page = $this->settings->products_num; // Текущая страница в постраничном выводе $current_page = $this->request->get('page', 'int'); // Если не задана, то равна 1 $current_page = max(1, $current_page); $this->design->assign('current_page_num', $current_page); // Вычисляем количество страниц $products_count = $this->products->count_products($filter); if($category->from_subs){ $items_per_page = $this->perPageCustom; $products_count = count( $this->getFromSubCatecories($category->id, true) ); } // Показать все страницы сразу if($this->request->get('page') == 'all') $items_per_page = $products_count; $pages_num = ceil($products_count/$items_per_page); $this->design->assign('total_pages_num', $pages_num); //echo $pages_num;die; if($current_page > $pages_num){ /* header("HTTP/1.0 404 Not Found"); header("Status: 404 Not Found"); Header( "Location: /404/" ); die;*/ if($pages_num) $this->force404(); } $filter['page'] = $current_page; $filter['limit'] = $items_per_page; /////////////////////////////////////////////// // Постраничная навигация END /////////////////////////////////////////////// $discount = 0; if(isset($_SESSION['user_id']) && $user = $this->users->get_user(intval($_SESSION['user_id']))) $discount = $user->discount; // Товары $products = array(); if($order == 'min_price' || $order == 'max_price'){ $filter['nolimit'] = 1; if($category->id == 246 || $category->id == 15) $products = $this->getFromSubCatecories($category->id); else foreach($this->products->get_products($filter) as $p) $products[$p->id] = $p; $products = $order == 'min_price' ? $this->sortByMinPrice($products, $filter) : $this->sortByMaxPrice($products, $filter); }else{ foreach($this->products->get_products($filter) as $p) $products[$p->id] = $p; //if($category->id == 246 || $category->id == 15) $products = $this->getFromSubCatecories($category->id, true); if($category->from_subs) $products = $this->getFromSubCatecories($category->id); } // Если искали товар и найден ровно один - перенаправляем на него if(!empty($keyword) && $products_count == 1) header('Location: '.$this->config->root_url.'/products/'.$p->url); if(!empty($products)) { $products_ids = array_keys($products); foreach($products as &$product) { $product->variants = array(); $product->images = array(); $product->properties = array(); } //$variants = $this->variants->get_variants(array('product_id'=>$products_ids, 'in_stock'=>true)); $variants = $this->variants->get_variants(array('product_id'=>$products_ids)); foreach($variants as &$variant) { //$variant->price *= (100-$discount)/100; $products[$variant->product_id]->variants[] = $variant; } $images = $this->products->get_images(array('product_id'=>$products_ids)); foreach($images as $image) $products[$image->product_id]->images[] = $image; foreach($products as &$product) { if(isset($product->variants[0])) $product->variant = $product->variants[0]; if(isset($product->images[0])) $product->image = $product->images[0]; } /* $properties = $this->features->get_options(array('product_id'=>$products_ids)); foreach($properties as $property) $products[$property->product_id]->options[] = $property; */ $this->design->assign('products', $products); } $minPrice = $this->getMinPrice($filterForMinPrice); // Выбираем бренды, они нужны нам в шаблоне if(!empty($category)) { $brands = $this->brands->get_brands(array('category_id'=>$category->children)); $category->brands = $brands; } // Устанавливаем мета-теги в зависимости от запроса if($this->page && isset($this->page->meta_title)) { //print_r($this->page); die; $this->design->assign('meta_title', $this->page->meta_title); $this->design->assign('meta_keywords', $this->page->meta_keywords); $this->design->assign('meta_description', $this->page->meta_description); } elseif(isset($category)) { $title = $category->meta_title; $desc = $category->meta_description; $keys = $category->meta_keywords; $lowerName = htmlspecialchars(mb_strtolower($category->name, 'utf-8')); //include $_SERVER['DOCUMENT_ROOT'].'/view/meta.php'; //// автометы для разделов if(!$title) $title = '' . $category->name . ' в Санкт-Петербурге | Тюнинг центр Atomic Garage'; if(!$desc && $minPrice != 0) $desc = $category->name . ' - купить в Санкт-Петербурге по цене от '. number_format($minPrice, 0, '', ' ') .' руб. | Низкие цены, большой выбор, доставка по всей России - Интернет-магазин товаров для автомобиля Atomic Garage, +79219589100, +79219589200.'; if(!$desc && $minPrice == 0) $desc = $category->name . ' - купить в Санкт-Петербурге | Низкие цены, большой выбор, доставка по всей России - Интернет-магазин товаров для автомобиля Atomic Garage, +79219589100, +79219589200.'; if(!$keys) $keys = $lowerName . ', купить, для автомобиля, авто, санкт-петербург, россия, доставка, цена, установка, тюнинг центр, линзы, оптика, фары, фонари, птф'; $spage = ''; //if(isset($current_page) && $current_page > 1){ //$spage = ' страница № '.$current_page; //} $this->design->assign('meta_title', $title.$spage); $this->design->assign('meta_keywords', $keys.$spage); $this->design->assign('meta_description', $desc.$spage); } elseif(isset($brand)) { $this->design->assign('meta_title', $brand->meta_title); $this->design->assign('meta_keywords', $brand->meta_keywords); $this->design->assign('meta_description', $brand->meta_description); } elseif(isset($keyword)) { $this->design->assign('meta_title', $keyword); } // echo ''; // echo ''; if(!$this->page && !isset($category) && !isset($brand) && !isset($keyword) && !$seobrand){ //echo ''; $this->design->assign('meta_title', 'Все товары для тюнинга авто'); $this->design->assign('meta_keywords', 'все товары, автомобиль, авто, тюнинг центр, atomic garage'); $this->design->assign('meta_description', 'Товары для тюнинга автомобильной оптики в тюнинг центре Atomic Garage в Санкт-Петербурге'); } /* if($_SESSION['admin']){ var_dump($category->path[2]->id); } */ ///var_dump($products); $this->body = $this->design->fetch('products.tpl'); return $this->body; } function getMinPrice($filter){ $filter['sort'] = 'price'; $filter['limit'] = 1; $products = $this->products->get_products($filter); if(empty($products[0])) return 0; $minPrice = 0; $variants = $this->variants->get_variants(array('product_id'=>$products[0]->id)); foreach($variants as $row){ if($minPrice == 0 || $minPrice > $row->price) $minPrice = $row->price; } return $minPrice; } function sortByMinPrice($products, $filter){ $products = $this->setMinMaxPrices($products); usort($products, '_usort_ByMinPrice'); return $this->setSortPagination($products, $filter); } function sortByMaxPrice($products, $filter){ $products = $this->setMinMaxPrices($products); usort($products, '_usort_ByMaxPrice'); return $this->setSortPagination($products, $filter); } function setSortPagination($_products, $filter = array()){ $products = array(); foreach($_products as $row) $products[$row->id] = $row; $count = count($products); $onPage = !empty($filter['limit']) ? $filter['limit'] : 50; $this->design->assign('total_pages_num', ceil($count / $onPage) ); $start = isset($_GET['page']) ? ($_GET['page'] - 1) * $onPage : 0; $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; $this->design->assign('current_page_num', $page ); $products = array_slice($products, $start, $onPage, true); return $products; } function setMinMaxPrices($products){ $products_ids = array_keys($products); $variants = $this->variants->get_variants(array('product_id'=>$products_ids)); foreach($products as &$row){ $row->minPrice = $row->maxPrice = 0; foreach($variants as $var){ if($var->product_id != $row->id) continue; if($var->price != 0 && ( $var->price < $row->minPrice || $row->minPrice == 0) ) $row->minPrice = $var->price; if($var->price != 0 && $var->price > $row->maxPrice) $row->maxPrice = $var->price; } } return $products; } function getFromSubCatecories($cid, $returnAll = false){ $all = $this->getSubCategories($cid); $res = mysql_query("SELECT * FROM `s_products_categories` WHERE `category_id` IN(".implode(',', $all).") "); $ids = $products = array(); while($row = mysql_fetch_assoc($res)) $ids[] = $row['product_id']; $res = mysql_query("SELECT * FROM `s_products` WHERE `id` IN(".implode(',', $ids).") AND `visible`=1 ORDER BY `position`"); while($row = mysql_fetch_assoc($res)) $products[$row['id']] = (object)$row; if($returnAll) return $products; $count = count($products); $onPage = $this->perPageCustom; $this->design->assign('total_pages_num', ceil($count / $onPage) ); $start = isset($_GET['page']) ? ($_GET['page'] - 1) * $onPage : 0; $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; $this->design->assign('current_page_num', $page ); $products = array_slice($products, $start, $onPage, true); return $products; } function getSubCategories($parent_id, $all = array()){ $res = mysql_query("SELECT * FROM `s_categories` WHERE `parent_id`='$parent_id' AND `visible`=1"); if(!mysql_num_rows($res)) return $all; while($row = mysql_fetch_assoc($res)){ $all[] = $row['id']; $all = $this->getSubCategories($row['id'], $all); } return $all; } } function _usort_ByMinPrice($a, $b){ if($a->minPrice == $b->minPrice)return 0; return ($a->minPrice > $b->minPrice) ? 1 : -1; } function _usort_ByMaxPrice($a, $b){ if($a->minPrice == $b->minPrice)return 0; return ($a->minPrice > $b->minPrice) ? -1 : 1; }