design->assign('detect', $detect); //print_r($_SESSION);die; $product_url = $this->request->get('product_url', 'string'); //$this->design->assign('additional_title', ' Санкт-Петербурге'); if(empty($product_url)) return false; // Выбираем товар из базы $product = $this->products->get_product((string)$product_url); if(empty($product) || (!$product->visible && empty($_SESSION['admin']))) return false; if($product->visible && empty($_SESSION['admin'])) $this->products->update_views($product->id); $product->images = $this->products->get_images(array('product_id'=>$product->id)); $product->image = &$product->images[0]; $variants = array(); //foreach($this->variants->get_variants(array('product_id'=>$product->id, 'in_stock'=>true)) as $v) foreach($this->variants->get_variants(array('product_id'=>$product->id)) as $v) $variants[$v->id] = $v; $product->variants = $variants; $featuresvars = array(); $options2 = $this->features->get_product_variant_options($product->id); if(is_array($options2)){ foreach($options2 as $option){ $product->variants[$option->id_veriant]->options[$option->feature_id][] = $option; $featuresvars[$option->feature_id][] = $option->value; } } foreach($featuresvars AS $index=>$arr){ sort($arr); $temp[$index] = array_unique($arr); } //$featuresvars = $temp; $featuresvars = $this->features->get_features(array('id'=>array_keys($featuresvars))); foreach($featuresvars AS &$featur){ if($temp[$featur->id]) $featur->options = $temp[$featur->id]; } $this->design->assign('featuresvars', $featuresvars); //$this->design->assign('options2', $options2); // Вариант по умолчанию if(($v_id = $this->request->get('variant', 'integer'))>0 && isset($variants[$v_id])) $product->variant = $variants[$v_id]; else $product->variant = reset($variants); $product->features = $this->features->get_product_options(array('product_id'=>$product->id,'on_prod'=>1)); // Автозаполнение имени для формы комментария if(!empty($this->user)) $this->design->assign('comment_name', $this->user->name); // Принимаем комментарий if ($this->request->method('post') && $this->request->post('comment')) { $comment->name = $this->request->post('name'); $comment->text = $this->request->post('text'); // Передадим комментарий обратно в шаблон - при ошибке нужно будет заполнить форму $this->design->assign('comment_text', $comment->text); $this->design->assign('comment_name', $comment->name); $cp = new ReCaptcha('6LegdywdAAAAAJaQLxIlHnITncRtuHQu-HHxeAYG'); $cpResult = $cp->verifyResponse($_SERVER['REMOTE_ADDR'], $this->request->post('recaptcha_response')); if (!$cpResult->success) { $this->design->assign('error', 'recaptcha'); } elseif (empty($comment->name)) { $this->design->assign('error', 'empty_name'); } elseif (empty($comment->text)) { $this->design->assign('error', 'empty_comment'); } else { // Создаем комментарий $comment->object_id = $product->id; $comment->type = 'product'; $comment->ip = $_SERVER['REMOTE_ADDR']; // Если были одобренные комментарии от текущего ip, одобряем сразу $this->db->query("SELECT 1 FROM __comments WHERE approved=1 AND ip=? LIMIT 1", $comment->ip); if($this->db->num_rows()>0) $comment->approved = 1; // Добавляем комментарий в базу if($this->request->post('email') == '' ) $comment_id = $this->comments->add_comment($comment); // Отправляем email $this->notify->email_comment_admin($comment_id); header('location: '.$_SERVER['REQUEST_URI'].'#comment_'.$comment_id); } } // Комментарии к товару $comments = $this->comments->get_comments(array('type'=>'product', 'object_id'=>$product->id, 'approved'=>1, 'ip'=>$_SERVER['REMOTE_ADDR'])); $this->design->assign('comments', $comments); // Связанные товары $related_ids = array(); $related_products = array(); foreach($this->products->get_related_products($product->id) as $p) { $related_ids[] = $p->related_id; $related_products[$p->related_id] = null; } if(!empty($related_ids)) { foreach($this->products->get_products(array('id'=>$related_ids, 'in_stock'=>1, 'visible'=>1)) as $p) $related_products[$p->id] = $p; $related_products_images = $this->products->get_images(array('product_id'=>array_keys($related_products))); foreach($related_products_images as $related_product_image) if(isset($related_products[$related_product_image->product_id])) $related_products[$related_product_image->product_id]->images[] = $related_product_image; $related_products_variants = $this->variants->get_variants(array('product_id'=>array_keys($related_products), 'in_stock'=>1)); foreach($related_products_variants as $related_product_variant) { if(isset($related_products[$related_product_variant->product_id])) { $related_products[$related_product_variant->product_id]->variants[] = $related_product_variant; } } foreach($related_products as $id=>$r) { if(is_object($r)) { $r->image = &$r->images[0]; $r->variant = &$r->variants[0]; } else { unset($related_products[$id]); } } $this->design->assign('related_products', $related_products); } else { $products->categories = $this->categories->get_categories(array('product_id'=>$product->id)); $category = reset($products->categories); $related_products = array(); $after = false; $products = $this->products->get_products(array('category_id' => $category->id, 'limit' => 100, 'in_stock'=>1, 'visible'=>1)); foreach($products as $p) { if($after && count($related_products) < 6) $related_products[$p->id] = $p; elseif($p->id == $product->id) $after = true; } if(count($related_products) < 6) foreach($products as $p) if($p->id != $product->id && count($related_products) < 6) $related_products[$p->id] = $p; else break; $related_products_images = $this->products->get_images(array('product_id'=>array_keys($related_products))); foreach($related_products_images as $related_product_image) if(isset($related_products[$related_product_image->product_id])) $related_products[$related_product_image->product_id]->images[] = $related_product_image; $related_products_variants = $this->variants->get_variants(array('product_id'=>array_keys($related_products), 'instock'=>true)); foreach($related_products_variants as $related_product_variant) { if(isset($related_products[$related_product_variant->product_id])) { $related_product_variant->price *= (100-$discount)/100; $related_products[$related_product_variant->product_id]->variants[] = $related_product_variant; } } foreach($related_products as $r) { $r->image = &$r->images[0]; $r->variant = &$r->variants[0]; } $this->design->assign('related_products', $related_products); } // Отзывы о товаре $comments = $this->comments->get_comments(array('type'=>'product', 'object_id'=>$product->id, 'approved'=>1, 'ip'=>$_SERVER['REMOTE_ADDR'])); // Соседние товары $this->design->assign('next_product', $this->products->get_next_product($product->id)); $this->design->assign('prev_product', $this->products->get_prev_product($product->id)); // И передаем его в шаблон $this->design->assign('product', $product); $this->design->assign('comments', $comments); // Категория и бренд товара $product->categories = $this->categories->get_categories(array('product_id'=>$product->id)); $this->design->assign('brand', $this->brands->get_brand(intval($product->brand_id))); $this->design->assign('category', reset($product->categories)); // Категории товаров $this->design->assign('categories', $this->categories->get_categories_tree()); // Добавление в историю просмотров товаров $max_visited_products = 100; // Максимальное число хранимых товаров в истории $expire = time()+60*60*24*30; // Время жизни - 30 дней if(!empty($_COOKIE['browsed_products'])) { $browsed_products = explode(',', $_COOKIE['browsed_products']); // Удалим текущий товар, если он был if(($exists = array_search($product->id, $browsed_products)) !== false) unset($browsed_products[$exists]); } // Добавим текущий товар $browsed_products[] = $product->id; $cookie_val = implode(',', array_slice($browsed_products, -$max_visited_products, $max_visited_products)); setcookie("browsed_products", $cookie_val, $expire, "/"); // Связанные объекты $related_objects = $this->articles->get_related_articles(array('id'=>$product->id,'type'=>'product')); if(!empty($related_objects)) { foreach($related_objects as $related_a) $r_articles[$related_a->article_id] = $related_a; $temp_articles = $this->articles->get_articles(array('id'=>array_keys($r_articles))); foreach($temp_articles as $temp_article) $r_articles[$temp_article->id] = $temp_article; $this->design->assign('related_articles', $r_articles); } // if(!$product->meta_keywords){ $ssid = $this->categories->get_product_categories($product->id); $this->db->query("SELECT id, name FROM __categories WHERE id=?", $ssid[0]->category_id); $rows = $this->db->results(); $cname = $rows[0]->name; // } // echo $rows[0]->id; /* if(!$product->meta_title && $rows[0]->id == 443) $product->meta_title = $product->name.' в' ; if(!$product->meta_keywords && $rows[0]->id == 443) $product->meta_keywords = $product->name.', для автомобиля, купить, цена, спб, установка, тюнинг, интернет-магазин carheart'; if(!$product->meta_description && $rows[0]->id == 443) $product->meta_description = 'В продаже '.$product->name.' по выгодным ценам в Санкт-Петербурге | CarHeart - продажа товаров для тюнинга авто.'; */ $lowerName = htmlspecialchars(mb_strtolower($product->name, 'utf-8')); $minPrice = $this->getMinPrice($product->variants); if(!$product->meta_title) $product->meta_title = htmlspecialchars($product->name) . ' - купить в Санкт-Петербурге | Тюнинг центр'; if(!$product->meta_description){ if($minPrice != 0) $product->meta_description = $product->name . ' - купить в Санкт-Петербурге по цене '. number_format($minPrice, 0, '', ' ') .' руб. | Низкие цены, большой выбор, доставка по всей России - Интернет-магазин Atomic Garage - установка линз, тюнинг и ремонт фар, ПТФ, ДХО автомобиля.'; else $product->meta_description = $product->name . ' - купить в Санкт-Петербурге | Низкие цены, большой выбор, доставка по всей России - Интернет-магазин Atomic Garage - установка линз, тюнинг и ремонт фар, ПТФ, ДХО автомобиля.'; } if(!$product->meta_keywords) $product->meta_keywords = $lowerName . ', купить, для автомобиля, авто, санкт-петербург, россия, доставка, цена, установка, тюнинг центр, линзы, оптика, фары, фонари, птф, ремонт'; $this->design->assign('meta_title', $product->meta_title); $this->design->assign('meta_keywords', $product->meta_keywords); $this->design->assign('meta_description', $product->meta_description); if($product->product_h1 == '') $product->product_h1 = $product->name; $this->design->assign('product_h1', $product->product_h1); $adminBtn = ''; if(isset($_SESSION['admin']) && $_SESSION['admin'] == 'admin') $adminBtn = '/simpla/index.php?module=ProductAdmin&id=' . $product->id; $this->design->assign('adminBtn', $adminBtn); return $this->design->fetch('product.tpl'); } function getMinPrice($variants){ $minPrice = 0; foreach($variants as $row){ if($minPrice == 0 || $minPrice > $row->price) $minPrice = $row->price; } return $minPrice; } function lcfirst( $str ) { $str = mb_strtolower( mb_substr($str, 0, 1) ) . mb_substr($str, 1); return $str; } }