Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Recommended Posts

Так может в этом и проблема? :) Я не проверял этот модуль с шаблоном, но сомневаюсь что он так рвет верстку

 

А в чем проявляется некорректность ее работы сейчас, кроме уменьшения ширины страницы с целью недопущения горизонтальной прокрутки у владельцев экранов шириной 1024 рх?

 

Футер

#footer {
border-top: 3px solid #A9896D;
background: #d6ad8a;
}
#footer a {
color: #eee;
}

Картинку вмиесто цвета фона вы можете выставить в настройках шаблона на вкладке Темы

Заглушка должна быть, с ней могут быть проблемы при условии, что вы вносили изменения в файл catalog/controller/product/product.php или вы не обновили вкмод-файл с последней версии шаблона, если никаких таких действий не было, то покажите код файла vqmod\vqcache\vq2-catalog_controller_product_product.php

добрый день.

Посмотрите, пожалуйста

 

Вот catalog/controller/product/product.php

class ControllerProductProduct extends Controller {

private $error = array();

public function index() {

$this->language->load('product/product');

$this->data['breadcrumbs'] = array();

$this->data['breadcrumbs'][] = array(

'text' => $this->language->get('text_home'),

'href' => $this->url->link('common/home'),

'separator' => false

);

$this->load->model('catalog/category');

if (isset($this->request->get['path'])) {

$path = '';

$parts = explode('_', (string)$this->request->get['path']);

$category_id = (int)array_pop($parts);

foreach ($parts as $path_id) {

if (!$path) {

$path = $path_id;

} else {

$path .= '_' . $path_id;

}

$category_info = $this->model_catalog_category->getCategory($path_id);

if ($category_info) {

$this->data['breadcrumbs'][] = array(

'text' => $category_info['name'],

'href' => $this->url->link('product/category', 'path=' . $path),

'separator' => $this->language->get('text_separator')

);

}

}

// Set the last category breadcrumb

$category_info = $this->model_catalog_category->getCategory($category_id);

if ($category_info) {

$url = '';

if (isset($this->request->get['sort'])) {

$url .= '&sort=' . $this->request->get['sort'];

}

if (isset($this->request->get['order'])) {

$url .= '&order=' . $this->request->get['order'];

}

if (isset($this->request->get['page'])) {

$url .= '&page=' . $this->request->get['page'];

}

if (isset($this->request->get['limit'])) {

$url .= '&limit=' . $this->request->get['limit'];

}

$this->data['breadcrumbs'][] = array(

'text' => $category_info['name'],

'href' => $this->url->link('product/category', 'path=' . $this->request->get['path']),

'separator' => $this->language->get('text_separator')

);

}

}

$this->load->model('catalog/manufacturer');

if (isset($this->request->get['manufacturer_id'])) {

$this->data['breadcrumbs'][] = array(

'text' => $this->language->get('text_brand'),

'href' => $this->url->link('product/manufacturer'),

'separator' => $this->language->get('text_separator')

);

$url = '';

if (isset($this->request->get['sort'])) {

$url .= '&sort=' . $this->request->get['sort'];

}

if (isset($this->request->get['order'])) {

$url .= '&order=' . $this->request->get['order'];

}

if (isset($this->request->get['page'])) {

$url .= '&page=' . $this->request->get['page'];

}

if (isset($this->request->get['limit'])) {

$url .= '&limit=' . $this->request->get['limit'];

}

$manufacturer_info = $this->model_catalog_manufacturer->getManufacturer($this->request->get['manufacturer_id']);

if ($manufacturer_info) {

$this->data['breadcrumbs'][] = array(

'text' => $manufacturer_info['name'],

'href' => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $this->request->get['manufacturer_id'] . $url),

'separator' => $this->language->get('text_separator')

);

}

}

if (isset($this->request->get['search']) || isset($this->request->get['tag'])) {

$url = '';

if (isset($this->request->get['search'])) {

$url .= '&search=' . $this->request->get['search'];

}

if (isset($this->request->get['tag'])) {

$url .= '&tag=' . $this->request->get['tag'];

}

if (isset($this->request->get['description'])) {

$url .= '&description=' . $this->request->get['description'];

}

if (isset($this->request->get['category_id'])) {

$url .= '&category_id=' . $this->request->get['category_id'];

}

if (isset($this->request->get['sub_category'])) {

$url .= '&sub_category=' . $this->request->get['sub_category'];

}

if (isset($this->request->get['sort'])) {

$url .= '&sort=' . $this->request->get['sort'];

}

if (isset($this->request->get['order'])) {

$url .= '&order=' . $this->request->get['order'];

}

if (isset($this->request->get['page'])) {

$url .= '&page=' . $this->request->get['page'];

}

if (isset($this->request->get['limit'])) {

$url .= '&limit=' . $this->request->get['limit'];

}

$this->data['breadcrumbs'][] = array(

'text' => $this->language->get('text_search'),

'href' => $this->url->link('product/search', $url),

'separator' => $this->language->get('text_separator')

);

}

if (isset($this->request->get['product_id'])) {

$product_id = (int)$this->request->get['product_id'];

} else {

$product_id = 0;

}

$this->load->model('catalog/product');

$product_info = $this->model_catalog_product->getProduct($product_id);

if ($product_info) {

$url = '';

if (isset($this->request->get['path'])) {

$url .= '&path=' . $this->request->get['path'];

}

if (isset($this->request->get['filter'])) {

$url .= '&filter=' . $this->request->get['filter'];

}

if (isset($this->request->get['manufacturer_id'])) {

$url .= '&manufacturer_id=' . $this->request->get['manufacturer_id'];

}

if (isset($this->request->get['search'])) {

$url .= '&search=' . $this->request->get['search'];

}

if (isset($this->request->get['tag'])) {

$url .= '&tag=' . $this->request->get['tag'];

}

if (isset($this->request->get['description'])) {

$url .= '&description=' . $this->request->get['description'];

}

if (isset($this->request->get['category_id'])) {

$url .= '&category_id=' . $this->request->get['category_id'];

}

if (isset($this->request->get['sub_category'])) {

$url .= '&sub_category=' . $this->request->get['sub_category'];

}

if (isset($this->request->get['sort'])) {

$url .= '&sort=' . $this->request->get['sort'];

}

if (isset($this->request->get['order'])) {

$url .= '&order=' . $this->request->get['order'];

}

if (isset($this->request->get['page'])) {

$url .= '&page=' . $this->request->get['page'];

}

if (isset($this->request->get['limit'])) {

$url .= '&limit=' . $this->request->get['limit'];

}

$this->data['breadcrumbs'][] = array(

'text' => $product_info['name'],

'href' => $this->url->link('product/product', $url . '&product_id=' . $this->request->get['product_id']),

'separator' => $this->language->get('text_separator')

);

if ($product_info['seo_title']) {

$this->document->setTitle($product_info['seo_title']);

} else {

$this->document->setTitle($product_info['name']);

}

$this->document->setDescription($product_info['meta_description']);

$this->document->setKeywords($product_info['meta_keyword']);

$this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'canonical');

$this->document->addScript('catalog/view/javascript/jquery/tabs.js');

$this->document->addScript('catalog/view/javascript/jquery/colorbox/jquery.colorbox-min.js');

$this->document->addStyle('catalog/view/javascript/jquery/colorbox/colorbox.css');

if ($product_info['seo_h1']) {

$this->data['heading_title'] = $product_info['seo_h1'];

} else {

$this->data['heading_title'] = $product_info['name'];

}

$this->data['text_select'] = $this->language->get('text_select');

$this->data['text_manufacturer'] = $this->language->get('text_manufacturer');

$this->data['text_model'] = $this->language->get('text_model');

$this->data['text_reward'] = $this->language->get('text_reward');

$this->data['text_points'] = $this->language->get('text_points');

$this->data['text_discount'] = $this->language->get('text_discount');

$this->data['text_stock'] = $this->language->get('text_stock');

$this->data['text_price'] = $this->language->get('text_price');

$this->data['text_tax'] = $this->language->get('text_tax');

$this->data['text_discount'] = $this->language->get('text_discount');

$this->data['text_option'] = $this->language->get('text_option');

$this->data['text_qty'] = $this->language->get('text_qty');

$this->data['text_minimum'] = sprintf($this->language->get('text_minimum'), $product_info['minimum']);

$this->data['text_or'] = $this->language->get('text_or');

$this->data['text_write'] = $this->language->get('text_write');

$this->data['text_note'] = $this->language->get('text_note');

$this->data['text_share'] = $this->language->get('text_share');

$this->data['text_wait'] = $this->language->get('text_wait');

$this->data['text_tags'] = $this->language->get('text_tags');

$this->data['entry_name'] = $this->language->get('entry_name');

$this->data['entry_review'] = $this->language->get('entry_review');

$this->data['entry_rating'] = $this->language->get('entry_rating');

$this->data['entry_good'] = $this->language->get('entry_good');

$this->data['entry_bad'] = $this->language->get('entry_bad');

$this->data['entry_captcha'] = $this->language->get('entry_captcha');

$this->data['button_cart'] = $this->language->get('button_cart');

$this->data['button_wishlist'] = $this->language->get('button_wishlist');

$this->data['button_compare'] = $this->language->get('button_compare');

$this->data['button_upload'] = $this->language->get('button_upload');

$this->data['button_continue'] = $this->language->get('button_continue');

$this->load->model('catalog/review');

$this->data['tab_description'] = $this->language->get('tab_description');

$this->data['tab_attribute'] = $this->language->get('tab_attribute');

$this->data['tab_review'] = sprintf($this->language->get('tab_review'), $product_info['reviews']);

$this->data['tab_related'] = $this->language->get('tab_related');

$this->data['product_id'] = $this->request->get['product_id'];

$this->data['manufacturer'] = $product_info['manufacturer'];

$this->data['manufacturers'] = $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $product_info['manufacturer_id']);

$this->data['model'] = $product_info['model'];

$this->data['reward'] = $product_info['reward'];

$this->data['points'] = $product_info['points'];

if ($product_info['quantity'] <= 0) {

$this->data['stock'] = $product_info['stock_status'];

} elseif ($this->config->get('config_stock_display')) {

$this->data['stock'] = $product_info['quantity'];

} else {

$this->data['stock'] = $this->language->get('text_instock');

}

$this->load->model('tool/image');

if ($product_info['image']) {

$this->data['popup'] = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height'));

} else {

$this->data['popup'] = $this->model_tool_image->resize('no_image.jpg', $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height'));

}

if ($product_info['image']) {

$this->data['thumb'] = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_thumb_width'), $this->config->get('config_image_thumb_height'));

$this->document->setOgImage($this->data['thumb']);

} else {

$this->data['thumb'] = $this->model_tool_image->resize('no_image.jpg', $this->config->get('config_image_thumb_width'), $this->config->get('config_image_thumb_height'));

}

$this->data['images'] = array();

$results = $this->model_catalog_product->getProductImages($this->request->get['product_id']);

foreach ($results as $result) {

$this->data['images'][] = array(

'popup' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')),

'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'))

);

}

if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {

$this->data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));

} else {

$this->data['price'] = false;

}

if ((float)$product_info['special']) {

$this->data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')));

} else {

$this->data['special'] = false;

}

if ($this->config->get('config_tax')) {

$this->data['tax'] = $this->currency->format((float)$product_info['special'] ? $product_info['special'] : $product_info['price']);

} else {

$this->data['tax'] = false;

}

$discounts = $this->model_catalog_product->getProductDiscounts($this->request->get['product_id']);

$this->data['discounts'] = array();

foreach ($discounts as $discount) {

$this->data['discounts'][] = array(

'quantity' => $discount['quantity'],

'price' => $this->currency->format($this->tax->calculate($discount['price'], $product_info['tax_class_id'], $this->config->get('config_tax')))

);

}

$this->data['options'] = array();

foreach ($this->model_catalog_product->getProductOptions($this->request->get['product_id']) as $option) {

if ($option['type'] == 'select' || $option['type'] == 'radio' || $option['type'] == 'checkbox' || $option['type'] == 'image') {

$option_value_data = array();

foreach ($option['option_value'] as $option_value) {

if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {

if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) {

$price = $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));

} else {

$price = false;

}

$option_value_data[] = array(

'product_option_value_id' => $option_value['product_option_value_id'],

'option_value_id' => $option_value['option_value_id'],

'name' => $option_value['name'],

'image' => $this->model_tool_image->resize($option_value['image'], 50, 50),

'price' => $price,

'price_prefix' => $option_value['price_prefix']

);

}

}

$this->data['options'][] = array(

'product_option_id' => $option['product_option_id'],

'option_id' => $option['option_id'],

'name' => $option['name'],

'type' => $option['type'],

'option_value' => $option_value_data,

'required' => $option['required']

);

} elseif ($option['type'] == 'text' || $option['type'] == 'textarea' || $option['type'] == 'file' || $option['type'] == 'date' || $option['type'] == 'datetime' || $option['type'] == 'time') {

$this->data['options'][] = array(

'product_option_id' => $option['product_option_id'],

'option_id' => $option['option_id'],

'name' => $option['name'],

'type' => $option['type'],

'option_value' => $option['option_value'],

'required' => $option['required']

);

}

}

if ($product_info['minimum']) {

$this->data['minimum'] = $product_info['minimum'];

} else {

$this->data['minimum'] = 1;

}

$this->data['review_status'] = $this->config->get('config_review_status');

$this->data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']);

$this->data['rating'] = (int)$product_info['rating'];

$this->data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');

$this->data['attribute_groups'] = $this->model_catalog_product->getProductAttributes($this->request->get['product_id']);

$this->data['products'] = array();

$results = $this->model_catalog_product->getProductRelated($this->request->get['product_id']);

foreach ($results as $result) {

if ($result['image']) {

$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_related_width'), $this->config->get('config_image_related_height'));

} else {

$image = false;

}

if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {

$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));

} else {

$price = false;

}

if ((float)$result['special']) {

$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));

} else {

$special = false;

}

if ($this->config->get('config_review_status')) {

$rating = (int)$result['rating'];

} else {

$rating = false;

}

$this->data['products'][] = array(

'product_id' => $result['product_id'],

'thumb' => $image,

'name' => $result['name'],

'price' => $price,

'special' => $special,

'rating' => $rating,

'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),

'href' => $this->url->link('product/product', 'product_id=' . $result['product_id'])

);

}

$this->data['tags'] = array();

if ($product_info['tag']) {

$tags = explode(',', $product_info['tag']);

foreach ($tags as $tag) {

$this->data['tags'][] = array(

'tag' => trim($tag),

'href' => $this->url->link('product/search', 'tag=' . trim($tag))

);

}

}

$this->model_catalog_product->updateViewed($this->request->get['product_id']);

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/product.tpl')) {

$this->template = $this->config->get('config_template') . '/template/product/product.tpl';

} else {

$this->template = 'default/template/product/product.tpl';

}

$this->children = array(

'common/column_left',

'common/column_right',

'common/content_top',

'common/content_bottom',

'common/footer',

'common/header'

);

$this->response->setOutput($this->render());

} else {

$url = '';

if (isset($this->request->get['path'])) {

$url .= '&path=' . $this->request->get['path'];

}

if (isset($this->request->get['filter'])) {

$url .= '&filter=' . $this->request->get['filter'];

}

if (isset($this->request->get['manufacturer_id'])) {

$url .= '&manufacturer_id=' . $this->request->get['manufacturer_id'];

}

if (isset($this->request->get['search'])) {

$url .= '&search=' . $this->request->get['search'];

}

if (isset($this->request->get['tag'])) {

$url .= '&tag=' . $this->request->get['tag'];

}

if (isset($this->request->get['description'])) {

$url .= '&description=' . $this->request->get['description'];

}

if (isset($this->request->get['category_id'])) {

$url .= '&category_id=' . $this->request->get['category_id'];

}

if (isset($this->request->get['sub_category'])) {

$url .= '&sub_category=' . $this->request->get['sub_category'];

}

if (isset($this->request->get['sort'])) {

$url .= '&sort=' . $this->request->get['sort'];

}

if (isset($this->request->get['order'])) {

$url .= '&order=' . $this->request->get['order'];

}

if (isset($this->request->get['page'])) {

$url .= '&page=' . $this->request->get['page'];

}

if (isset($this->request->get['limit'])) {

$url .= '&limit=' . $this->request->get['limit'];

}

$this->data['breadcrumbs'][] = array(

'text' => $this->language->get('text_error'),

'href' => $this->url->link('product/product', $url . '&product_id=' . $product_id),

'separator' => $this->language->get('text_separator')

);

$this->document->setTitle($this->language->get('text_error'));

$this->data['heading_title'] = $this->language->get('text_error');

$this->data['text_error'] = $this->language->get('text_error');

$this->data['button_continue'] = $this->language->get('button_continue');

$this->data['continue'] = $this->url->link('common/home');

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {

$this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';

} else {

$this->template = 'default/template/error/not_found.tpl';

}

$this->children = array(

'common/column_left',

'common/column_right',

'common/content_top',

'common/content_bottom',

'common/footer',

'common/header'

);

$this->response->setOutput($this->render());

}

}

public function review() {

$this->language->load('product/product');

$this->load->model('catalog/review');

$this->data['text_on'] = $this->language->get('text_on');

$this->data['text_no_reviews'] = $this->language->get('text_no_reviews');

if (isset($this->request->get['page'])) {

$page = $this->request->get['page'];

} else {

$page = 1;

}

$this->data['reviews'] = array();

$review_total = $this->model_catalog_review->getTotalReviewsByProductId($this->request->get['product_id']);

$results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id'], ($page - 1) * 5, 5);

foreach ($results as $result) {

$this->data['reviews'][] = array(

'author' => $result['author'],

'text' => $result['text'],

'rating' => (int)$result['rating'],

'reviews' => sprintf($this->language->get('text_reviews'), (int)$review_total),

'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))

);

}

$pagination = new Pagination();

$pagination->total = $review_total;

$pagination->page = $page;

$pagination->limit = 5;

$pagination->text = $this->language->get('text_pagination');

$pagination->url = $this->url->link('product/product/review', 'product_id=' . $this->request->get['product_id'] . '&page={page}');

$this->data['pagination'] = $pagination->render();

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/review.tpl')) {

$this->template = $this->config->get('config_template') . '/template/product/review.tpl';

} else {

$this->template = 'default/template/product/review.tpl';

}

$this->response->setOutput($this->render());

}

public function write() {

$this->language->load('product/product');

$this->load->model('catalog/review');

$json = array();

if ($this->request->server['REQUEST_METHOD'] == 'POST') {

if ((utf8_strlen($this->request->post['name']) < 3) || (utf8_strlen($this->request->post['name']) > 25)) {

$json['error'] = $this->language->get('error_name');

}

if ((utf8_strlen($this->request->post['text']) < 25) || (utf8_strlen($this->request->post['text']) > 10000)) {

$json['error'] = $this->language->get('error_text');

}

if (empty($this->request->post['rating'])) {

$json['error'] = $this->language->get('error_rating');

}

if (empty($this->session->data['captcha']) || ($this->session->data['captcha'] != $this->request->post['captcha'])) {

$json['error'] = $this->language->get('error_captcha');

}

if (!isset($json['error'])) {

$this->model_catalog_review->addReview($this->request->get['product_id'], $this->request->post);

$json['success'] = $this->language->get('text_success');

}

}

$this->response->setOutput(json_encode($json));

}

public function captcha() {

$this->load->library('captcha');

$captcha = new Captcha();

$this->session->data['captcha'] = $captcha->getCode();

$captcha->showImage();

}

public function upload() {

$this->language->load('product/product');

$json = array();

if (!empty($this->request->files['file']['name'])) {

$filename = basename(preg_replace('/[^a-zA-Z0-9\.\-\s+]/', '', html_entity_decode($this->request->files['file']['name'], ENT_QUOTES, 'UTF-8')));

if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 64)) {

$json['error'] = $this->language->get('error_filename');

}

// Allowed file extension types

$allowed = array();

$filetypes = explode("\n", $this->config->get('config_file_extension_allowed'));

foreach ($filetypes as $filetype) {

$allowed[] = trim($filetype);

}

if (!in_array(substr(strrchr($filename, '.'), 1), $allowed)) {

$json['error'] = $this->language->get('error_filetype');

}

// Allowed file mime types

$allowed = array();

$filetypes = explode("\n", $this->config->get('config_file_mime_allowed'));

foreach ($filetypes as $filetype) {

$allowed[] = trim($filetype);

}

if (!in_array($this->request->files['file']['type'], $allowed)) {

$json['error'] = $this->language->get('error_filetype');

}

if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) {

$json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']);

}

} else {

$json['error'] = $this->language->get('error_upload');

}

if (!$json && is_uploaded_file($this->request->files['file']['tmp_name']) && file_exists($this->request->files['file']['tmp_name'])) {

$file = basename($filename) . '.' . md5(mt_rand());

// Hide the uploaded file name so people can not link to it directly.

$json['file'] = $this->encryption->encrypt($file);

move_uploaded_file($this->request->files['file']['tmp_name'], DIR_DOWNLOAD . $file);

$json['success'] = $this->language->get('text_upload');

}

$this->response->setOutput(json_encode($json));

}

}

?>

 
 
И вот  vqmod\vqcache\vq2-catalog_controller_product_product.php
 

class ControllerProductProduct extends Controller {

private $error = array();

public function index() {

$this->language->load('product/product');

$this->data['breadcrumbs'] = array();

$this->data['breadcrumbs'][] = array(

'text' => $this->language->get('text_home'),

'href' => $this->url->link('common/home'),

'separator' => false

);

$this->load->model('catalog/category');

if (isset($this->request->get['path'])) {

$path = '';

$parts = explode('_', (string)$this->request->get['path']);

$category_id = (int)array_pop($parts);

foreach ($parts as $path_id) {

if (!$path) {

$path = $path_id;

} else {

$path .= '_' . $path_id;

}

$category_info = $this->model_catalog_category->getCategory($path_id);

if ($category_info) {

$this->data['breadcrumbs'][] = array(

'text' => $category_info['name'],

'href' => $this->url->link('product/category', 'path=' . $path),

'separator' => $this->language->get('text_separator')

);

}

}

// Set the last category breadcrumb

$category_info = $this->model_catalog_category->getCategory($category_id);

if ($category_info) {

$url = '';

if (isset($this->request->get['sort'])) {

$url .= '&sort=' . $this->request->get['sort'];

}

if (isset($this->request->get['order'])) {

$url .= '&order=' . $this->request->get['order'];

}

if (isset($this->request->get['page'])) {

$url .= '&page=' . $this->request->get['page'];

}

if (isset($this->request->get['limit'])) {

$url .= '&limit=' . $this->request->get['limit'];

}

$this->data['breadcrumbs'][] = array(

'text' => $category_info['name'],

'href' => $this->url->link('product/category', 'path=' . $this->request->get['path']),

'separator' => $this->language->get('text_separator')

);

}

}

$this->load->model('catalog/manufacturer');

if (isset($this->request->get['manufacturer_id'])) {

$this->data['breadcrumbs'][] = array(

'text' => $this->language->get('text_brand'),

'href' => $this->url->link('product/manufacturer'),

'separator' => $this->language->get('text_separator')

);

$url = '';

if (isset($this->request->get['sort'])) {

$url .= '&sort=' . $this->request->get['sort'];

}

if (isset($this->request->get['order'])) {

$url .= '&order=' . $this->request->get['order'];

}

if (isset($this->request->get['page'])) {

$url .= '&page=' . $this->request->get['page'];

}

if (isset($this->request->get['limit'])) {

$url .= '&limit=' . $this->request->get['limit'];

}

$manufacturer_info = $this->model_catalog_manufacturer->getManufacturer($this->request->get['manufacturer_id']);

if ($manufacturer_info) {

$this->data['breadcrumbs'][] = array(

'text' => $manufacturer_info['name'],

'href' => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $this->request->get['manufacturer_id'] . $url),

'separator' => $this->language->get('text_separator')

);

}

}

if (isset($this->request->get['search']) || isset($this->request->get['tag'])) {

$url = '';

if (isset($this->request->get['search'])) {

$url .= '&search=' . $this->request->get['search'];

}

if (isset($this->request->get['tag'])) {

$url .= '&tag=' . $this->request->get['tag'];

}

if (isset($this->request->get['description'])) {

$url .= '&description=' . $this->request->get['description'];

}

if (isset($this->request->get['category_id'])) {

$url .= '&category_id=' . $this->request->get['category_id'];

}

if (isset($this->request->get['sub_category'])) {

$url .= '&sub_category=' . $this->request->get['sub_category'];

}

if (isset($this->request->get['sort'])) {

$url .= '&sort=' . $this->request->get['sort'];

}

if (isset($this->request->get['order'])) {

$url .= '&order=' . $this->request->get['order'];

}

if (isset($this->request->get['page'])) {

$url .= '&page=' . $this->request->get['page'];

}

if (isset($this->request->get['limit'])) {

$url .= '&limit=' . $this->request->get['limit'];

}

$this->data['breadcrumbs'][] = array(

'text' => $this->language->get('text_search'),

'href' => $this->url->link('product/search', $url),

'separator' => $this->language->get('text_separator')

);

}

if (isset($this->request->get['product_id'])) {

$product_id = (int)$this->request->get['product_id'];

} else {

$product_id = 0;

}

$this->load->model('catalog/product');

$product_info = $this->model_catalog_product->getProduct($product_id);

if ($product_info) {

$url = '';

if (isset($this->request->get['path'])) {

$url .= '&path=' . $this->request->get['path'];

}

if (isset($this->request->get['filter'])) {

$url .= '&filter=' . $this->request->get['filter'];

}

if (isset($this->request->get['manufacturer_id'])) {

$url .= '&manufacturer_id=' . $this->request->get['manufacturer_id'];

}

if (isset($this->request->get['search'])) {

$url .= '&search=' . $this->request->get['search'];

}

if (isset($this->request->get['tag'])) {

$url .= '&tag=' . $this->request->get['tag'];

}

if (isset($this->request->get['description'])) {

$url .= '&description=' . $this->request->get['description'];

}

if (isset($this->request->get['category_id'])) {

$url .= '&category_id=' . $this->request->get['category_id'];

}

if (isset($this->request->get['sub_category'])) {

$url .= '&sub_category=' . $this->request->get['sub_category'];

}

if (isset($this->request->get['sort'])) {

$url .= '&sort=' . $this->request->get['sort'];

}

if (isset($this->request->get['order'])) {

$url .= '&order=' . $this->request->get['order'];

}

if (isset($this->request->get['page'])) {

$url .= '&page=' . $this->request->get['page'];

}

if (isset($this->request->get['limit'])) {

$url .= '&limit=' . $this->request->get['limit'];

}

$this->data['breadcrumbs'][] = array(

'text' => $product_info['name'],

'href' => $this->url->link('product/product', $url . '&product_id=' . $this->request->get['product_id']),

'separator' => $this->language->get('text_separator')

);

if ($product_info['seo_title']) {

$this->document->setTitle($product_info['seo_title']);

} else {

$this->document->setTitle($product_info['name']);

}

$this->document->setDescription($product_info['meta_description']);

$this->document->setKeywords($product_info['meta_keyword']);

$this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'canonical');

$this->document->addScript('catalog/view/javascript/jquery/tabs.js');

$this->document->addScript('catalog/view/javascript/jquery/colorbox/jquery.colorbox-min.js');

$this->document->addStyle('catalog/view/javascript/jquery/colorbox/colorbox.css');

if ($product_info['seo_h1']) {

$this->data['heading_title'] = $product_info['seo_h1'];

} else {

$this->data['heading_title'] = $product_info['name'];

}

$this->data['text_select'] = $this->language->get('text_select');

$this->data['text_manufacturer'] = $this->language->get('text_manufacturer');

$this->data['text_model'] = $this->language->get('text_model');

$this->data['text_reward'] = $this->language->get('text_reward');

$this->data['text_points'] = $this->language->get('text_points');

$this->data['text_discount'] = $this->language->get('text_discount');

$this->data['text_stock'] = $this->language->get('text_stock');

$this->data['text_price'] = $this->language->get('text_price');

$this->data['text_tax'] = $this->language->get('text_tax');

$this->data['text_discount'] = $this->language->get('text_discount');

$this->data['text_option'] = $this->language->get('text_option');

$this->data['text_qty'] = $this->language->get('text_qty');

$this->data['text_minimum'] = sprintf($this->language->get('text_minimum'), $product_info['minimum']);

$this->data['text_or'] = $this->language->get('text_or');

$this->data['text_write'] = $this->language->get('text_write');

$this->data['text_note'] = $this->language->get('text_note');

$this->data['text_share'] = $this->language->get('text_share');

$this->data['text_wait'] = $this->language->get('text_wait');

$this->data['text_tags'] = $this->language->get('text_tags');

$this->data['entry_name'] = $this->language->get('entry_name');

$this->data['entry_review'] = $this->language->get('entry_review');

$this->data['entry_rating'] = $this->language->get('entry_rating');

$this->data['entry_good'] = $this->language->get('entry_good');

$this->data['entry_bad'] = $this->language->get('entry_bad');

$this->data['entry_captcha'] = $this->language->get('entry_captcha');

$this->data['button_cart'] = $this->language->get('button_cart');

$this->data['button_wishlist'] = $this->language->get('button_wishlist');

$this->data['button_compare'] = $this->language->get('button_compare');

$this->data['button_upload'] = $this->language->get('button_upload');

$this->data['button_continue'] = $this->language->get('button_continue');

if ($this->config->get('mmr_catalog_recaptcha_enabled') && $this->config->get('mmr_catalog_recaptcha_private_key') && $this->config->get('mmr_catalog_recaptcha_public_key')) {

require_once(DIR_SYSTEM . 'library/recaptchalib.php');

if ($this->config->get('config_ssl')) {

$recaptcha_ssl = true;

} else {

$recaptcha_ssl = false;

}

$this->data['recaptcha'] = recaptcha_get_html($this->config->get('mmr_catalog_recaptcha_public_key'), null, $recaptcha_ssl);

} else {

$this->data['recaptcha'] = '';

}

$this->load->model('catalog/review');

$this->data['tab_description'] = $this->language->get('tab_description');

$this->data['tab_attribute'] = $this->language->get('tab_attribute');

$this->data['tab_review'] = sprintf($this->language->get('tab_review'), $product_info['reviews']);

$this->data['tab_related'] = $this->language->get('tab_related');

$this->data['product_id'] = $this->request->get['product_id'];

$this->data['manufacturer'] = $product_info['manufacturer'];

$this->data['manufacturers'] = $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $product_info['manufacturer_id']);

$this->data['model'] = $product_info['model'];

$this->data['reward'] = $product_info['reward'];

$this->data['points'] = $product_info['points'];

$this->data['sku'] = $product_info['sku'];

$this->data['upc'] = $product_info['upc'];

$this->data['jan'] = $product_info['jan'];

$this->data['ean'] = $product_info['ean'];

$this->data['isbn'] = $product_info['isbn'];

$this->data['mpn'] = $product_info['mpn'];

$this->data['viewed'] = $product_info['viewed'];

$this->data['date_available'] = $product_info['date_available'];

$this->data['quantity'] = $product_info['quantity'];

$this->data['weight'] = ($product_info['weight']>0) ? $this->weight->format($product_info['weight'], $product_info['weight_class_id']) : "";

$this->data['length'] = ($product_info['length']>0) ? $this->length->format($product_info['length'], $product_info['length_class_id']) : "";

$this->data['width'] = ($product_info['width']>0) ? $this->length->format($product_info['width'], $product_info['length_class_id']) : "";

$this->data['height'] = ($product_info['height']>0) ? $this->length->format($product_info['height'], $product_info['length_class_id']) : "";

if ($product_info['quantity'] <= 0) {

$this->data['stock'] = $product_info['stock_status'];

} elseif ($this->config->get('config_stock_display')) {

$this->data['stock'] = $product_info['quantity'];

} else {

$this->data['stock'] = $this->language->get('text_instock');

}

$this->load->model('tool/image');

if ($product_info['image']) {

$this->data['popup'] = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height'));

} else {

$this->data['popup'] = $this->model_tool_image->resize('no_image.jpg', $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height'));

}

if ($product_info['image']) {

$this->data['thumb'] = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_thumb_width'), $this->config->get('config_image_thumb_height'));

$this->document->setOgImage($this->data['thumb']);

} else {

$this->data['thumb'] = $this->model_tool_image->resize('no_image.jpg', $this->config->get('config_image_thumb_width'), $this->config->get('config_image_thumb_height'));

}

$this->data['images'] = array();

$results = $this->model_catalog_product->getProductImages($this->request->get['product_id']);

foreach ($results as $result) {

$this->data['images'][] = array(

'popup' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')),

'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'))

);

}

if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {

$this->data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));

} else {

$this->data['price'] = false;

}

if ((float)$product_info['special']) {

$this->data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')));

} else {

$this->data['special'] = false;

}

if ((float)$product_info['special']) {

$this->data['mmr_savings'] = $this->currency->format((($product_info['special'])-($product_info['price']))*(-1)) ;

} else {

$this->data['mmr_savings'] = false;

}

if ($this->config->get('config_tax')) {

$this->data['tax'] = $this->currency->format((float)$product_info['special'] ? $product_info['special'] : $product_info['price']);

} else {

$this->data['tax'] = false;

}

$discounts = $this->model_catalog_product->getProductDiscounts($this->request->get['product_id']);

$this->data['discounts'] = array();

foreach ($discounts as $discount) {

$this->data['discounts'][] = array(

'quantity' => $discount['quantity'],

'price' => $this->currency->format($this->tax->calculate($discount['price'], $product_info['tax_class_id'], $this->config->get('config_tax')))

);

}

$this->data['options'] = array();

foreach ($this->model_catalog_product->getProductOptions($this->request->get['product_id']) as $option) {

if ($option['type'] == 'select' || $option['type'] == 'radio' || $option['type'] == 'checkbox' || $option['type'] == 'image') {

$option_value_data = array();

foreach ($option['option_value'] as $option_value) {

if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {

if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) {

$price = $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));

} else {

$price = false;

}

$option_value_data[] = array(

'product_option_value_id' => $option_value['product_option_value_id'],

'option_value_id' => $option_value['option_value_id'],

'name' => $option_value['name'],

'image' => $this->model_tool_image->resize($option_value['image'], 50, 50),

'price' => $price,

'price_prefix' => $option_value['price_prefix']

);

}

}

$this->data['options'][] = array(

'product_option_id' => $option['product_option_id'],

'option_id' => $option['option_id'],

'name' => $option['name'],

'type' => $option['type'],

'option_value' => $option_value_data,

'required' => $option['required']

);

} elseif ($option['type'] == 'text' || $option['type'] == 'textarea' || $option['type'] == 'file' || $option['type'] == 'date' || $option['type'] == 'datetime' || $option['type'] == 'time') {

$this->data['options'][] = array(

'product_option_id' => $option['product_option_id'],

'option_id' => $option['option_id'],

'name' => $option['name'],

'type' => $option['type'],

'option_value' => $option['option_value'],

'required' => $option['required']

);

}

}

if ($product_info['minimum']) {

$this->data['minimum'] = $product_info['minimum'];

} else {

$this->data['minimum'] = 1;

}

$this->data['review_status'] = $this->config->get('config_review_status');

$this->data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']);

$this->data['rating'] = (int)$product_info['rating'];

$this->data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');

$this->data['attribute_groups'] = $this->model_catalog_product->getProductAttributes($this->request->get['product_id']);

$similar = $this->model_catalog_product->getProductSimilar($this->request->get['product_id'],4);

foreach ($similar as $result) {

if ($result['image']) {

$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_related_width'), $this->config->get('config_image_related_height'));

} else {

$image = $this->model_tool_image->resize('no_image.jpg', $this->config->get('config_image_related_width'), $this->config->get('config_image_related_height'));

}

if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {

$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));

} else {

$price = false;

}

if ((float)$result['special']) {

$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));

} else {

$special = false;

}

if ($this->config->get('config_review_status')) {

$rating = (int)$result['rating'];

} else {

$rating = false;

}

$this->data['products_similar'][] = array(

'product_id' => $result['product_id'],

'thumb' => $image,

'name' => $result['name'],

'upc' => $result['upc'],

'price' => $price,

'special' => $special,

'rating' => $rating,

'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),

'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']),

);

}

$this->data['products'] = array();

$results = $this->model_catalog_product->getProductRelated($this->request->get['product_id']);

foreach ($results as $result) {

if ($result['image']) {

$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_related_width'), $this->config->get('config_image_related_height'));

} else {

$image = $this->model_tool_image->resize('no_image.jpg', $this->config->get('config_image_related_width'), $this->config->get('config_image_related_height'));

}

if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {

$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));

} else {

$price = false;

}

if ((float)$result['special']) {

$mmr_savings = $this->currency->format((($result['special'])-($result['price']))*(-1));

} else {

$mmr_savings = false;

}

if ((float)$result['special']) {

$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));

} else {

$special = false;

}

if ((float)$result['quantity']) { $quantity = (int)$result['quantity']; }

else { $quantity = false; }

if ($this->config->get('config_review_status')) {

$rating = (int)$result['rating'];

} else {

$rating = false;

}

$this->data['products'][] = array(

'description' => $this->config->get('mmr_common_related_descriptions_enabled') ? utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('mmr_common_descriptions_limit')) . '..' : 0,

'attribute_groups' => $this->config->get('mmr_common_related_attributes_enabled') ? $this->model_catalog_product->getProductAttributes($result['product_id']) : 0,

'sku' => $result['sku'],

'upc' => $result['upc'],

'jan' => $result['jan'],

'ean' => $result['ean'],

'isbn' => $result['isbn'],

'mpn' => $result['mpn'],

'viewed'=> $result['viewed'],

'date_available'=> $result['date_available'],

'quantity'=> $result['quantity'],

'stock'=> ($result['quantity']<=0) ? $result['stock_status'] : $this->language->get('text_instock'),

'mmr_savings'=> $mmr_savings,

'product_id' => $result['product_id'],

'thumb' => $image,

'name' => $result['name'],

'price' => $price,

'special' => $special,

'rating' => $rating,

'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),

'href' => $this->url->link('product/product', 'product_id=' . $result['product_id'])

);

}

$this->data['tags'] = array();

if ($product_info['tag']) {

$tags = explode(',', $product_info['tag']);

foreach ($tags as $tag) {

$this->data['tags'][] = array(

'tag' => trim($tag),

'href' => $this->url->link('product/search', 'tag=' . trim($tag))

);

}

}

$this->model_catalog_product->updateViewed($this->request->get['product_id']);

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/product.tpl')) {

$this->template = $this->config->get('config_template') . '/template/product/product.tpl';

} else {

$this->template = 'default/template/product/product.tpl';

}

$this->children = array(

'product/content_product_titlel',

'product/content_product_titlec',

'product/content_product_titler',

'common/column_left',

'common/column_right',

'common/content_top',

'common/content_bottom',

'common/footer',

'common/header'

);

$this->response->setOutput($this->render());

} else {

$url = '';

if (isset($this->request->get['path'])) {

$url .= '&path=' . $this->request->get['path'];

}

if (isset($this->request->get['filter'])) {

$url .= '&filter=' . $this->request->get['filter'];

}

if (isset($this->request->get['manufacturer_id'])) {

$url .= '&manufacturer_id=' . $this->request->get['manufacturer_id'];

}

if (isset($this->request->get['search'])) {

$url .= '&search=' . $this->request->get['search'];

}

if (isset($this->request->get['tag'])) {

$url .= '&tag=' . $this->request->get['tag'];

}

if (isset($this->request->get['description'])) {

$url .= '&description=' . $this->request->get['description'];

}

if (isset($this->request->get['category_id'])) {

$url .= '&category_id=' . $this->request->get['category_id'];

}

if (isset($this->request->get['sub_category'])) {

$url .= '&sub_category=' . $this->request->get['sub_category'];

}

if (isset($this->request->get['sort'])) {

$url .= '&sort=' . $this->request->get['sort'];

}

if (isset($this->request->get['order'])) {

$url .= '&order=' . $this->request->get['order'];

}

if (isset($this->request->get['page'])) {

$url .= '&page=' . $this->request->get['page'];

}

if (isset($this->request->get['limit'])) {

$url .= '&limit=' . $this->request->get['limit'];

}

$this->data['breadcrumbs'][] = array(

'text' => $this->language->get('text_error'),

'href' => $this->url->link('product/product', $url . '&product_id=' . $product_id),

'separator' => $this->language->get('text_separator')

);

$this->document->setTitle($this->language->get('text_error'));

$this->data['heading_title'] = $this->language->get('text_error');

$this->data['text_error'] = $this->language->get('text_error');

$this->data['button_continue'] = $this->language->get('button_continue');

if ($this->config->get('mmr_catalog_recaptcha_enabled') && $this->config->get('mmr_catalog_recaptcha_private_key') && $this->config->get('mmr_catalog_recaptcha_public_key')) {

require_once(DIR_SYSTEM . 'library/recaptchalib.php');

if ($this->config->get('config_ssl')) {

$recaptcha_ssl = true;

} else {

$recaptcha_ssl = false;

}

$this->data['recaptcha'] = recaptcha_get_html($this->config->get('mmr_catalog_recaptcha_public_key'), null, $recaptcha_ssl);

} else {

$this->data['recaptcha'] = '';

}

$this->data['continue'] = $this->url->link('common/home');

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {

$this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';

} else {

$this->template = 'default/template/error/not_found.tpl';

}

$this->children = array(

'product/content_product_titlel',

'product/content_product_titlec',

'product/content_product_titler',

'common/column_left',

'common/column_right',

'common/content_top',

'common/content_bottom',

'common/footer',

'common/header'

);

$this->response->setOutput($this->render());

}

}

public function review() {

$this->language->load('product/product');

$this->load->model('catalog/review');

$this->data['text_on'] = $this->language->get('text_on');

$this->data['text_no_reviews'] = $this->language->get('text_no_reviews');

if (isset($this->request->get['page'])) {

$page = $this->request->get['page'];

} else {

$page = 1;

}

$this->data['reviews'] = array();

$review_total = $this->model_catalog_review->getTotalReviewsByProductId($this->request->get['product_id']);

$results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id'], ($page - 1) * 5, 5);

foreach ($results as $result) {

$this->data['reviews'][] = array(

'author' => $result['author'],

'text' => $result['text'],

'rating' => (int)$result['rating'],

'reviews' => sprintf($this->language->get('text_reviews'), (int)$review_total),

'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))

);

}

$pagination = new Pagination();

$pagination->total = $review_total;

$pagination->page = $page;

$pagination->limit = 5;

$pagination->text = $this->language->get('text_pagination');

$pagination->url = $this->url->link('product/product/review', 'product_id=' . $this->request->get['product_id'] . '&page={page}');

$this->data['pagination'] = $pagination->render();

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/review.tpl')) {

$this->template = $this->config->get('config_template') . '/template/product/review.tpl';

} else {

$this->template = 'default/template/product/review.tpl';

}

$this->response->setOutput($this->render());

}

public function write() {

$this->language->load('product/product');

$this->load->model('catalog/review');

$json = array();

if ($this->request->server['REQUEST_METHOD'] == 'POST') {

if ((utf8_strlen($this->request->post['name']) < 3) || (utf8_strlen($this->request->post['name']) > 25)) {

$json['error'] = $this->language->get('error_name');

}

if ((utf8_strlen($this->request->post['text']) < 25) || (utf8_strlen($this->request->post['text']) > 10000)) {

$json['error'] = $this->language->get('error_text');

}

if (empty($this->request->post['rating'])) {

$json['error'] = $this->language->get('error_rating');

}

if (!$this->config->get('mmr_catalog_recaptcha_enabled') || !$this->config->get('mmr_catalog_recaptcha_private_key') || !$this->config->get('mmr_catalog_recaptcha_public_key')) {

if (empty($this->session->data['captcha']) || ($this->session->data['captcha'] != $this->request->post['captcha'])) {

$json['error'] = $this->language->get('error_captcha');

}

} else {

require_once(DIR_SYSTEM . 'library/recaptchalib.php');

if (!isset($this->request->post['recaptcha_challenge_field']) || !isset($this->request->post['recaptcha_response_field'])) {

$json['error'] = $this->language->get('error_captcha');

} else {

$response = recaptcha_check_answer($this->config->get('mmr_catalog_recaptcha_private_key'), $this->request->server['REMOTE_ADDR'], $this->request->post['recaptcha_challenge_field'], $this->request->post['recaptcha_response_field']);

if (!$response->is_valid) {

$json['error'] = $this->language->get('error_captcha');

}

}

}

if (!isset($json['error'])) {

$this->model_catalog_review->addReview($this->request->get['product_id'], $this->request->post);

$json['success'] = $this->language->get('text_success');

}

}

$this->response->setOutput(json_encode($json));

}

public function captcha() {

$this->load->library('captcha');

$captcha = new Captcha();

$this->session->data['captcha'] = $captcha->getCode();

$captcha->showImage();

}

public function upload() {

$this->language->load('product/product');

$json = array();

if (!empty($this->request->files['file']['name'])) {

$filename = basename(preg_replace('/[^a-zA-Z0-9\.\-\s+]/', '', html_entity_decode($this->request->files['file']['name'], ENT_QUOTES, 'UTF-8')));

if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 64)) {

$json['error'] = $this->language->get('error_filename');

}

// Allowed file extension types

$allowed = array();

$filetypes = explode("\n", $this->config->get('config_file_extension_allowed'));

foreach ($filetypes as $filetype) {

$allowed[] = trim($filetype);

}

if (!in_array(substr(strrchr($filename, '.'), 1), $allowed)) {

$json['error'] = $this->language->get('error_filetype');

}

// Allowed file mime types

$allowed = array();

$filetypes = explode("\n", $this->config->get('config_file_mime_allowed'));

foreach ($filetypes as $filetype) {

$allowed[] = trim($filetype);

}

if (!in_array($this->request->files['file']['type'], $allowed)) {

$json['error'] = $this->language->get('error_filetype');

}

if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) {

$json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']);

}

} else {

$json['error'] = $this->language->get('error_upload');

}

if (!$json && is_uploaded_file($this->request->files['file']['tmp_name']) && file_exists($this->request->files['file']['tmp_name'])) {

$file = basename($filename) . '.' . md5(mt_rand());

// Hide the uploaded file name so people can not link to it directly.

$json['file'] = $this->encryption->encrypt($file);

move_uploaded_file($this->request->files['file']['tmp_name'], DIR_DOWNLOAD . $file);

$json['success'] = $this->language->get('text_upload');

}

$this->response->setOutput(json_encode($json));

}

}

?>

Надіслати
Поділитися на інших сайтах


не.. автор под ваш шаблон точить его вряд ли будет,  тем более он и бесплатный, ещё и конфликтует с вашим слайдером, а тут мож чего кто)

Отключаемое да - но когда отключаешь из категорий а там  вывод и сеткой и списком, он отключает и из списка тож..и оставить кнопки купить и т.д?

нужно чтоб как по умолчанию)

Мета-заголовок в кратком описании - да на страницах категорий, производителей, акции, поиск и т.д. но не в карточке товара.

т.е. в таком случае можно расписать краткое описание как душе угодно)

Предпоследнее? если про последнее то это о статьях из блога Марка)

Есть ещё одно, вывод опций картинками (Цвет) и под фото товара болшой кусок пустоты образуется и получается не красиво..

думаю что можно сделать.. пока ни чего в голову не пришло кроме как вернуть мелкие картинки назад как на дефолтном..

может посоветует кто чего...?

1 так вы хотите, чтобы описание отключалось лишь в сетке, а не в списке? это можно сделать стилями, а насчет оставить кнопку купить я не понял - просто выберите настройку постоянного отображения этих кнопок вместо отображения при наведении

2 посмотрю что можно сделать, хотя не знаю что вам мешает в обычном описании учесть размер, по которому обрезается текст, и в начале этого описания поставить нужный вам текст, который вы хотите поместить в мета-описание 

3 я не понял этого вопроса или предложения или что это? :) "И чтоб не искать среди кучи статей - выводить с категории)"

4 что за вывод опций картинками?

 

 

 

добрый день.

Посмотрите, пожалуйста

 

Вот catalog/controller/product/product.php

 

 

Посмотрел, я думал вы про отсутствие заглушек в сопутствующих товарах, потому что там оно есть

Надіслати
Поділитися на інших сайтах

 

2 посмотрю что можно сделать, хотя не знаю что вам мешает в обычном описании учесть размер, по которому обрезается текст, и в начале этого описания поставить нужный вам текст, который вы хотите поместить в мета-описание 

3 я не понял этого вопроса или предложения или что это? :) "И чтоб не искать среди кучи статей - выводить с категории)"

4 что за вывод опций картинками?

Ну в мета описания можно вводить компактно описания как по типу превью полного, основные характеристики и т.д.)

"И чтоб не искать среди кучи статей - выводить с категории)"

эт имелось ввиду что в блоге пачка категорий и в каждой куча статей, вот чтоб искала через категории))

Вывод опций изображениями тут

 

Да, и думаю лучше артикул вывести за пределы h1 но оставив в одной полосе

Надіслати
Поділитися на інших сайтах


Ни кто не прикручивал к этому модулю "Отзывы" Гуглокапчу? Очень простые отзывы о магазине, только капча отрывается.

 

Автор, может сможете адаптировать под шаблон?

Надіслати
Поділитися на інших сайтах


Господа! Не будете ли Вы любезны подсказать, каков рекомендуемый размер фото (баннера) должен быть для главной страницы при условии, что есть 1 колонка (слева).  Хотелось, чтобы при адаптивности все уменьшалось и выглядело красиво...

Спасибо

Надіслати
Поділитися на інших сайтах


Ну в мета описания можно вводить компактно описания как по типу превью полного, основные характеристики и т.д.)

"И чтоб не искать среди кучи статей - выводить с категории)"

эт имелось ввиду что в блоге пачка категорий и в каждой куча статей, вот чтоб искала через категории))

Вывод опций изображениями тут

 

Да, и думаю лучше артикул вывести за пределы h1 но оставив в одной полосе

1 я вас понял

2 относительно блога не ко мне вопрос - я не могу интегрировать настройки шаблона со сторонними модулями, ведь эти самые модули (блог) есть далеко не у всех покупателей шаблона

3 опции изображениями - можно конечно сделать их "строчными", но будет не очень красиво (ведь ширина текста опции может быть разной, и соотв. радио-кнопки будут не в одну линию):

MUnGDp6_KDU.jpg

 

 

Ни кто не прикручивал к этому модулю "Отзывы" Гуглокапчу? Очень простые отзывы о магазине, только капча отрывается.

 

Автор, может сможете адаптировать под шаблон?

Так напишите разработчику, я то причем к добавлению гуглокапчи в сторонний модуль отзывов? :) Это немало изменений в коде + надо как то связать модуль с АПИ гуглокапчи, а значит надо и админку модуля перепиливать, предусмтривая в ней места для хранения ключей капчи (как в шаблоне)

 

Господа! Не будете ли Вы любезны подсказать, каков рекомендуемый размер фото (баннера) должен быть для главной страницы при условии, что есть 1 колонка (слева).  Хотелось, чтобы при адаптивности все уменьшалось и выглядело красиво...

Спасибо

Вроде 698 рх, нет?

Надіслати
Поділитися на інших сайтах

RGB, скажите когда в стандартных модулях на пример "Рекомендуемые" и т.д. при наведении будет возможность раскрытия дополнительных полей (характеристкик, наличия и т.д.) по аналогии как в каталоге? Или что где поправить, через вкмод сделаю себе правки. Уже и так отдельный файл сделал, чтобы все внесенные мною правки после обновления руками не переделывать  :-)

 

И напомните, как сделать рандомно вывод картинок в слайдшоу, помню Вы писали уже, но не могу в теме найти. 

 

Так же интересует как сделать активной кнопку для статуса предзаказ? Я то понимаю, что фича привязана к остаткам, но как человек сделает предзаказ, если кнопка неактивная? Только по звонку.

Змінено користувачем hover
Надіслати
Поділитися на інших сайтах


3 опции изображениями - можно конечно сделать их "строчными", но будет не очень красиво (ведь ширина текста опции может быть разной, и соотв. радио-кнопки будут не в одну линию):

Единственный вариант который я пока вижу это смещение доп картинок под заглавную (как у дефолта) при включении опций..

24.jpg

Надіслати
Поділитися на інших сайтах


Ни кто не прикручивал к этому модулю "Отзывы" Гуглокапчу? Очень простые отзывы о магазине, только капча отрывается.

 

Автор, может сможете адаптировать под шаблон?

У Марка круче капча и отзывы и куча ещё всего - утонуть можно в возможностях его модуля

Тыкай

Тут крутой

Тут подкрученный

Надіслати
Поділитися на інших сайтах


RGB, скажите когда в стандартных модулях на пример "Рекомендуемые" и т.д. при наведении будет возможность раскрытия дополнительных полей (характеристкик, наличия и т.д.) по аналогии как в каталоге? Или что где поправить, через вкмод сделаю себе правки. Уже и так отдельный файл сделал, чтобы все внесенные мною правки после обновления руками не переделывать  :-)

 

И напомните, как сделать рандомно вывод картинок в слайдшоу, помню Вы писали уже, но не могу в теме найти. 

 

Так же интересует как сделать активной кнопку для статуса предзаказ? Я то понимаю, что фича привязана к остаткам, но как человек сделает предзаказ, если кнопка неактивная? Только по звонку.

Если для стандартных модулей в позиции Верх/Низ, то вроде должно хватить простого удаления класса product-block-detailed из тпл-файлов модулей, если же для боковых позиций, то нужно будет добавить в пользовательские стили что-то вроде такого:

 

#column-left .product-grid .product-block .description, #column-right .product-grid .product-block .description {
background: url('catalog/view/theme/moneymaker/image/dot_white.png') !important;
}
#column-left .product-grid .product-block:hover, #column-right .product-grid .product-block .description {
background: url('catalog/view/theme/moneymaker/image/dot_white.png') !important;
}

 

Но учитывая, что темы могут быть разными, возможно будет не очень красиво смотреться (у меня как на скрине вышло, вроде что надо)

thv4C_5e804.jpg

 

 

Единственный вариант который я пока вижу это смещение доп картинок под заглавную (как у дефолта) при включении опций..

24.jpg

А если опций 2 штуки, а картинок - 10? :)

Надіслати
Поділитися на інших сайтах

Подскажите по "быстрому заказу" приходит на почту уведомление? Не могу понять почему ничего не приходит. Вроде все настроено.

Надіслати
Поділитися на інших сайтах


Подскажите по "быстрому заказу" приходит на почту уведомление? Не могу понять почему ничего не приходит. Вроде все настроено.

Все приходит. Возможно письмо попадает в папку Спам, проверьте ее. И да, письмо должно приходить только админу магазина, клиенту оно не должно приходить.

Надіслати
Поділитися на інших сайтах


Если для стандартных модулей в позиции Верх/Низ, то вроде должно хватить простого удаления класса product-block-detailed из тпл-файлов модулей, если же для боковых позиций, то нужно будет добавить в пользовательские стили что-то вроде такого:

 

#column-left .product-grid .product-block .description, #column-right .product-grid .product-block .description {
background: url('catalog/view/theme/moneymaker/image/dot_white.png') !important;
}
#column-left .product-grid .product-block:hover, #column-right .product-grid .product-block .description {
background: url('catalog/view/theme/moneymaker/image/dot_white.png') !important;
}

 

Но учитывая, что темы могут быть разными, возможно будет не очень красиво смотреться (у меня как на скрине вышло, вроде что надо)

thv4C_5e804.jpg

 

 

А если опций 2 штуки, а картинок - 10? :)

спасибо, буду пробовать, а что насчет этих вопросов:

"И напомните, как сделать рандомно вывод картинок в слайдшоу, помню Вы писали уже, но не могу в теме найти. 

 

Так же интересует как сделать активной кнопку для статуса предзаказ? Я то понимаю, что фича привязана к остаткам, но как человек сделает предзаказ, если кнопка неактивная? Только по звонку."

 

А насчет стилей угадали по картинке на фон, у меня как раз светлый. Все сделал работает))

Змінено користувачем hover
Надіслати
Поділитися на інших сайтах


Все приходит. Возможно письмо попадает в папку Спам, проверьте ее. И да, письмо должно приходить только админу магазину, клиенту оно не должно приходить.

странно, попробую поменять почтовый адрес. В спаме нету.

Надіслати
Поділитися на інших сайтах


спасибо, буду пробовать, а что насчет этих вопросов:

"И напомните, как сделать рандомно вывод картинок в слайдшоу, помню Вы писали уже, но не могу в теме найти. 

 

Так же интересует как сделать активной кнопку для статуса предзаказ? Я то понимаю, что фича привязана к остаткам, но как человек сделает предзаказ, если кнопка неактивная? Только по звонку."

Извините, начал вам отвечать, но меня отвлекли

Рандомные картинки в слайдшоу https://opencartforum.com/topic/38076-moneymaker-продающий-интерактивный-шаблон/?do=findComment&comment=340676

Верно, "активность" кнопки зависит от кол-ва товара, а не от статуса, т.е. если у товара кол-во < 1, то кнопка не будет активной

Если вы не хотите блокировать возможность покупки товара с 0-вым кол-вом, то просто отключите эту ф-цию в настройках шаблона

 

странно, попробую поменять почтовый адрес. В спаме нету.

Еще вариант - если вы используете смтп, с ним почта может не работать

Надіслати
Поділитися на інших сайтах

Как включить заглушку ?

 

добавлены заглушки для товаров без фото в каталог, базовые модули и на страницу товара

 

А то у меня в категории есть товары без фото, и они выводятся. Что очень не красиво. 
ну или узнать как она работает ?


У меня есть вот такая вот ситуация

katefotopn_1703823_14883046.png

Надіслати
Поділитися на інших сайтах

Извините, начал вам отвечать, но меня отвлекли

Рандомные картинки в слайдшоу https://opencartforum.com/topic/38076-moneymaker-продающий-интерактивный-шаблон/?do=findComment&comment=340676

Верно, "активность" кнопки зависит от кол-ва товара, а не от статуса, т.е. если у товара кол-во < 1, то кнопка не будет активной

Если вы не хотите блокировать возможность покупки товара с 0-вым кол-вом, то просто отключите эту ф-цию в настройках шаблона

 

Еще вариант - если вы используете смтп, с ним почта может не работать

за рандомные картинки отдельно спасибо.

Насчет активности, понимаю, что к шаблону не относится, но можно как то выводить хоть какое-то сообщение, при статусе "Предзаказ", что для предзаказа нужно обращаться по телефону? Приблизительно уже буду пробовать разбираться далее сам

 

Насчет смтп в почте. Пробовал с обоими вариантами, результат один. Попробую еще сменить почту.

Надіслати
Поділитися на інших сайтах


Насчет активности, понимаю, что к шаблону не относится, но можно как то выводить хоть какое-то сообщение, при статусе "Предзаказ", что для предзаказа нужно обращаться по телефону? Приблизительно уже буду пробовать разбираться далее сам

Я думаю вот об этом разговор, RGB я вас уже как то спрашивал про это. Так же жду :-)

Надіслати
Поділитися на інших сайтах


RGB, скажите пожалуйста, можно ли избавиться от вызова model_catalog_product->getTotalProducts() в catalog/controller/common/header.php, который прописывает туда vqmod/xml/moneymaker.xml? Для какой именно цели вы считаете там количество товаров?

Строю магазин на тестовом сервере, с малым количеством товаров ничего не замечал, сейчас залил боевую нагрузку: 150 категорий, 18тыс. товаров, сразу стал ждать секунд по 5 на каждой карточке товара. В логах mysql по 60 запросов из getTotalProducts(), а они, как известно, тяжёлые.

Надіслати
Поділитися на інших сайтах


Здравствуйте! с отзывами какая то проблема

Input error: k: Format of site key was invalid

Скажите пожалуйста как можно исправить?

Во-первых отзывы не имеют никакого отношения к шаблону, а во-вторых, предположу, что вы используете отдельный модуль Recaptcha, и эта ошибка относится именно к этому модулю. Так что лучше задать этот вопрос автору модуля, а не шаблона.
Надіслати
Поділитися на інших сайтах


Здравствуйте, можно ли сделать, чтобы в хедере отображались несколько главных телефонов? И можно ли иконки к ним операторов добавить?

Можно, в файле header.tpl после <div class="col-sm-12 col-md-4 col-md-height col-middle">

добавить то, что в исходном коде находится после тега <ul class="dropdown-menu keep_open">. Выбирай в коде свои телефоны и копируй полностью код.

Похоже будет на вот такое:

 <li class="text-left"><span><img alt="" src="catalog/view/theme/moneymaker/image/mobiles/mob-kyivstar.png" /> </span></li>
 <li class="text-left"><span><img alt="" src="catalog/view/theme/moneymaker/image/mobiles/mob-kyivstar.png" /> </span></li>

Код можно добавить в div присвоив ему класс, например

<div class="contact-plus">

В итоге получиться вот так приблизительно:

<div class="contact-plus">
<li class="text-left"><span><img alt="" src="catalog/view/theme/moneymaker/image/mobiles/mob-kyivstar.png" /> </span></li>
<li class="text-left"><span><img alt="" src="catalog/view/theme/moneymaker/image/mobiles/mob-kyivstar.png" /> </span></li>
</div>

Я добавлял две строки выглядит неплохо.

И конечно в пользовательские стили надо добавить, например:

.contact-plus{
padding-bottom:15px;
text-align: center;
white-space: nowrap;
}

С отступами уже смотри сам.

Вообще при желании можно добавить телефоны и в само меню, что в dropdown, но я не пробовал.

Можно все сделать и через вкмод, создавай файл с таким содержимым

<modification>
	<id>1</id>
	<version>1</version>
	<vqmver>1</vqmver>
	<author>1</author>
	
	<file name="catalog/view/theme/moneymaker/template/common/header.tpl">
		<operation>
			<search position="after"><![CDATA[<div class="col-sm-12 col-md-4 col-md-height col-middle">]]></search>
			<add><![CDATA[<div class="contact-plus">
			<li class="text-left"><span><img alt="" src="catalog/view/theme/moneymaker/image/mobiles/mob-kyivstar.png" /> </span></li>
			<li class="text-left"><span><img alt="" src="catalog/view/theme/moneymaker/image/mobiles/mob-kyivstar.png" /> </span></li>		
			</div>]]></add>
		</operation>		
	</file>
	
</modification>

Ну только предварительно прописав свои телефоны.

Надіслати
Поділитися на інших сайтах


RGВ, подскажите как поменять иконку сравнения? Хочу добавить весы вместо, что в шаблоне. Не пойму как они туда выводяться. Вижу, что через файл стилей, но где физически добавить картинку?

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.