Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Хлебные крошки дублируют категорию


Recommended Posts

Подскажите, пожалуйста, как поправить хлебные крошки? На сайте некоторые категории дублируются в хлебных крошках http://bruni.linecore.com/kreslo-grushi?product_id=57 ? Например, кресло груши дублируется

Link to post
Share on other sites

возможно дублируется массив крошек в контролере
скиньте код product.php (модифицированный, если есть)

Edited by NDemidov
Link to post
Share on other sites

Вот файл product.php 
 

<?php
class ControllerProductProduct extends Controller {
	private $error = array();

	public function index() {
		$this->load->language('product/product');

		$data['breadcrumbs'] = array();

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_home'),
			'href' => $this->url->link('common/home')
		);

		$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) {
					$data['breadcrumbs'][] = array(
						'text' => $category_info['name'],
						'href' => $this->url->link('product/category', 'path=' . $path)
					);
				}
			}

			// 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'];
				}

				$data['breadcrumbs'][] = array(
					'text' => $category_info['name'],
					'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url)
				);
			}
		}

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

		if (isset($this->request->get['manufacturer_id'])) {
			$data['breadcrumbs'][] = array(
				'text' => $this->language->get('text_brand'),
				'href' => $this->url->link('product/manufacturer')
			);

			$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) {
				$data['breadcrumbs'][] = array(
					'text' => $manufacturer_info['name'],
					'href' => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $this->request->get['manufacturer_id'] . $url)
				);
			}
		}

		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'];
			}

			$data['breadcrumbs'][] = array(
				'text' => $this->language->get('text_search'),
				'href' => $this->url->link('product/search', $url)
			);
		}

		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) {
		    $data['my_product_info'] = $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'];
			}

            $my_categories = $this->model_catalog_product->getCategories($product_id);
            $my_categories_ids = array();
			if(is_array($my_categories) && !empty($my_categories)){
			    foreach ($my_categories as $cats_arr){
                    if(isset($cats_arr['category_id'])){
                        array_push($my_categories_ids, $cats_arr['category_id']);
                    }
                }
                //rsort($my_categories_ids,SORT_NUMERIC );
                sort($my_categories_ids,SORT_NUMERIC );
            }
            $my_category_info = array();
            $this->load->model('catalog/category');
			if(isset($my_categories_ids[0]) && !empty($my_categories_ids[0])){
                $my_category_info = $this->model_catalog_category->getCategory($my_categories_ids[0]);
            }

//			echo '<pre>';
//			print_r($my_categories_ids);
////			print_r($my_categories);
////			print_r($my_categories_ids[0]);
//			print_r($my_category_info);
////			print_r($this->model_catalog_category->getCategoryPath($my_categories_ids[0]));
//			echo '</pre>';

            //Добавляем родительские категории
            if(isset($my_category_info['parent_id']) && ((int)$my_category_info['parent_id'] !== 0)){
                $category_info_parent = $this->model_catalog_category->getCategory($my_category_info['parent_id']);
                if(isset($category_info_parent['parent_id']) && ((int)$category_info_parent['parent_id'] !== 0)){
                    $category_info_main = $this->model_catalog_category->getCategory($category_info_parent['parent_id']);

                    if(isset($category_info_main['category_id'])){
                        $data['breadcrumbs'][] = array(
                            'text' => $category_info_main['name'],
                            'href' => $this->url->link('product/category', 'path='.$category_info_main['category_id'])
                        );
                    }
                }

                if(isset($category_info_parent['category_id'])){
                    $data['breadcrumbs'][] = array(
                        'text' => $category_info_parent['name'],
                        'href' => $this->url->link('product/category', 'path='.$category_info_parent['category_id'])
                    );
                }

                if(isset($my_category_info['category_id'])){
                    $data['breadcrumbs'][] = array(
                        'text' => $my_category_info['name'],
                        'href' => $this->url->link('product/category', 'path='.$my_category_info['category_id'])
                    );
                }

            }else  if(isset($my_category_info['category_id'])){
                $data['breadcrumbs'][] = array(
                    'text' => $my_category_info['name'],
                    'href' => $this->url->link('product/category', 'path='.$my_category_info['category_id'])
                );
            }

			$data['breadcrumbs'][] = array(
				'text' => $product_info['name'],
				'href' => $this->url->link('product/product', $url . '&product_id=' . $this->request->get['product_id'])
			);

			$this->document->setTitle($product_info['meta_title']);
			$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/magnific/jquery.magnific-popup.min.js');
			$this->document->addStyle('catalog/view/javascript/jquery/magnific/magnific-popup.css');
			$this->document->addScript('catalog/view/javascript/jquery/datetimepicker/moment.js');
			$this->document->addScript('catalog/view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.js');
			$this->document->addStyle('catalog/view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.css');

			$data['heading_title'] = $product_info['name'];

			$data['text_select'] = $this->language->get('text_select');
			$data['text_manufacturer'] = $this->language->get('text_manufacturer');
			$data['text_model'] = $this->language->get('text_model');
			$data['text_reward'] = $this->language->get('text_reward');
			$data['text_points'] = $this->language->get('text_points');
			$data['text_stock'] = $this->language->get('text_stock');
			$data['text_discount'] = $this->language->get('text_discount');
			$data['text_tax'] = $this->language->get('text_tax');
			$data['text_option'] = $this->language->get('text_option');
			$data['text_minimum'] = sprintf($this->language->get('text_minimum'), $product_info['minimum']);
			$data['text_write'] = $this->language->get('text_write');
			$data['text_login'] = sprintf($this->language->get('text_login'), $this->url->link('account/login', '', true), $this->url->link('account/register', '', true));
			$data['text_note'] = $this->language->get('text_note');
			$data['text_tags'] = $this->language->get('text_tags');
			$data['text_related'] = $this->language->get('text_related');
			$data['text_payment_recurring'] = $this->language->get('text_payment_recurring');
			$data['text_loading'] = $this->language->get('text_loading');

			$data['entry_qty'] = $this->language->get('entry_qty');
			$data['entry_name'] = $this->language->get('entry_name');
			$data['entry_review'] = $this->language->get('entry_review');
			$data['entry_rating'] = $this->language->get('entry_rating');
			$data['entry_good'] = $this->language->get('entry_good');
			$data['entry_bad'] = $this->language->get('entry_bad');

			$data['button_cart'] = $this->language->get('button_cart');
			$data['button_wishlist'] = $this->language->get('button_wishlist');
			$data['button_compare'] = $this->language->get('button_compare');
			$data['button_upload'] = $this->language->get('button_upload');
			$data['button_continue'] = $this->language->get('button_continue');

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

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

			$data['product_id'] = (int)$this->request->get['product_id'];
			$data['manufacturer'] = $product_info['manufacturer'];
			$data['manufacturers'] = $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $product_info['manufacturer_id']);
			$data['model'] = $product_info['model'];
			$data['reward'] = $product_info['reward'];
			$data['points'] = $product_info['points'];
			$data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');

			if(!empty($my_category_info) && isset($my_category_info['category_id']) && isset($my_category_info['name'])){
                $data['my_back_to_cat'] = '<a href="'.$this->url->link('product/category', 'path='.$my_category_info['category_id']).'" class="my_back_to_cat_btn">'.' < '.$this->language->get('my_back_to_cat_text').$my_category_info['name'].'</a>';
            }else{
                $data['my_back_to_cat'] = '';
            }

			if ($product_info['quantity'] <= 0) {
				$data['stock'] = $product_info['stock_status'];
			} elseif ($this->config->get('config_stock_display')) {
				$data['stock'] = $product_info['quantity'];
			} else {
				$data['stock'] = $this->language->get('text_instock');
			}
				$data['quantity'] = $product_info['quantity'];

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

			if ($product_info['image']) {
				$data['popup'] = $this->model_tool_image->resize($product_info['image'], $this->config->get($this->config->get('config_theme') . '_image_popup_width'), $this->config->get($this->config->get('config_theme') . '_image_popup_height'));
			} else {
				$data['popup'] = '';
			}

			if ($product_info['image']) {
				$data['thumb'] = $this->model_tool_image->resize($product_info['image'], $this->config->get($this->config->get('config_theme') . '_image_thumb_width'), $this->config->get($this->config->get('config_theme') . '_image_thumb_height'));
			} else {
				$data['thumb'] = '';
			}

			$data['images'] = array();

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

			foreach ($results as $result) {
				$data['images'][] = array(
					'popup' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_popup_width'), $this->config->get($this->config->get('config_theme') . '_image_popup_height')),
					'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_additional_width'), $this->config->get($this->config->get('config_theme') . '_image_additional_height'))
				);
			}

			if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
				$data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
			} else {
				$data['price'] = false;
			}

			if ((float)$product_info['special']) {
				$data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
			} else {
				$data['special'] = false;
			}

			if ($this->config->get('config_tax')) {
				$data['tax'] = $this->currency->format((float)$product_info['special'] ? $product_info['special'] : $product_info['price'], $this->session->data['currency']);
			} else {
				$data['tax'] = false;
			}

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

			$data['discounts'] = array();

			foreach ($discounts as $discount) {
				$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->session->data['currency'])
				);
			}

			$data['options'] = array();

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

				foreach ($option['product_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') ? 'P' : false), $this->session->data['currency']);
						} else {
							$price = false;
						}

						$product_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']
						);
					}
				}

				$data['options'][] = array(
					'product_option_id'    => $option['product_option_id'],
					'product_option_value' => $product_option_value_data,
					'option_id'            => $option['option_id'],
					'name'                 => $option['name'],
					'type'                 => $option['type'],
					'value'                => $option['value'],
					'required'             => $option['required']
				);
			}

			if ($product_info['minimum']) {
				$data['minimum'] = $product_info['minimum'];
			} else {
				$data['minimum'] = 1;
			}

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

			if ($this->config->get('config_review_guest') || $this->customer->isLogged()) {
				$data['review_guest'] = true;
			} else {
				$data['review_guest'] = false;
			}

			if ($this->customer->isLogged()) {
				$data['customer_name'] = $this->customer->getFirstName() . '&nbsp;' . $this->customer->getLastName();
			} else {
				$data['customer_name'] = '';
			}

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

			// Captcha
			if ($this->config->get($this->config->get('config_captcha') . '_status') && in_array('review', (array)$this->config->get('config_captcha_page'))) {
				$data['captcha'] = $this->load->controller('extension/captcha/' . $this->config->get('config_captcha'));
			} else {
				$data['captcha'] = '';
			}

			$data['share'] = $this->url->link('product/product', 'product_id=' . (int)$this->request->get['product_id']);

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

			$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($this->config->get('config_theme') . '_image_related_width'), $this->config->get($this->config->get('config_theme') . '_image_related_height'));
				} else {
					$image = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_related_width'), $this->config->get($this->config->get('config_theme') . '_image_related_height'));
				}

				if ($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')), $this->session->data['currency']);
				} 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')), $this->session->data['currency']);
				} else {
					$special = false;
				}

				if ($this->config->get('config_tax')) {
					$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
				} else {
					$tax = false;
				}

				if ($this->config->get('config_review_status')) {
					$rating = (int)$result['rating'];
				} else {
					$rating = false;
				}

				$data['products'][] = array(
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],
					'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..',
					'price'       => $price,
					'special'     => $special,
					'tax'         => $tax,
					'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
					'rating'      => $rating,
					'href'        => $this->url->link('product/product', 'product_id=' . $result['product_id'])
				);
			}

			$data['tags'] = array();

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

				foreach ($tags as $tag) {
					$data['tags'][] = array(
						'tag'  => trim($tag),
						'href' => $this->url->link('product/search', 'tag=' . trim($tag))
					);
				}
			}

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

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

			$data['column_left'] = $this->load->controller('common/column_left');
			$data['column_right'] = $this->load->controller('common/column_right');
			$data['content_top'] = $this->load->controller('common/content_top');
			$data['content_bottom'] = $this->load->controller('common/content_bottom');
			$data['footer'] = $this->load->controller('common/footer');
			$data['header'] = $this->load->controller('common/header');

			$this->response->setOutput($this->load->view('product/product', $data));
		} 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'];
			}

			$data['breadcrumbs'][] = array(
				'text' => $this->language->get('text_error'),
				'href' => $this->url->link('product/product', $url . '&product_id=' . $product_id)
			);

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

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

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

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

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

			$this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . ' 404 Not Found');

			$data['column_left'] = $this->load->controller('common/column_left');
			$data['column_right'] = $this->load->controller('common/column_right');
			$data['content_top'] = $this->load->controller('common/content_top');
			$data['content_bottom'] = $this->load->controller('common/content_bottom');
			$data['footer'] = $this->load->controller('common/footer');
			$data['header'] = $this->load->controller('common/header');

			$this->response->setOutput($this->load->view('error/not_found', $data));
		}
	}

	public function review() {
		$this->load->language('product/product');

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

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

		if (isset($this->request->get['page'])) {
			$page = $this->request->get['page'];
		} else {
			$page = 1;
		}

		$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) {
			$data['reviews'][] = array(
				'author'     => $result['author'],
				'text'       => nl2br($result['text']),
				'rating'     => (int)$result['rating'],
				'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->url = $this->url->link('product/product/review', 'product_id=' . $this->request->get['product_id'] . '&page={page}');

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

		$data['results'] = sprintf($this->language->get('text_pagination'), ($review_total) ? (($page - 1) * 5) + 1 : 0, ((($page - 1) * 5) > ($review_total - 5)) ? $review_total : ((($page - 1) * 5) + 5), $review_total, ceil($review_total / 5));

		$this->response->setOutput($this->load->view('product/review', $data));
	}

	public function write() {
		$this->load->language('product/product');

		$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']) > 1000)) {
				$json['error'] = $this->language->get('error_text');
			}

			if (empty($this->request->post['rating']) || $this->request->post['rating'] < 0 || $this->request->post['rating'] > 5) {
				$json['error'] = $this->language->get('error_rating');
			}

			// Captcha
			if ($this->config->get($this->config->get('config_captcha') . '_status') && in_array('review', (array)$this->config->get('config_captcha_page'))) {
				$captcha = $this->load->controller('extension/captcha/' . $this->config->get('config_captcha') . '/validate');

				if ($captcha) {
					$json['error'] = $captcha;
				}
			}

			if (!isset($json['error'])) {
				$this->load->model('catalog/review');

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

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

		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));
	}

	public function getRecurringDescription() {
		$this->load->language('product/product');
		$this->load->model('catalog/product');

		if (isset($this->request->post['product_id'])) {
			$product_id = $this->request->post['product_id'];
		} else {
			$product_id = 0;
		}

		if (isset($this->request->post['recurring_id'])) {
			$recurring_id = $this->request->post['recurring_id'];
		} else {
			$recurring_id = 0;
		}

		if (isset($this->request->post['quantity'])) {
			$quantity = $this->request->post['quantity'];
		} else {
			$quantity = 1;
		}

		$product_info = $this->model_catalog_product->getProduct($product_id);
		$recurring_info = $this->model_catalog_product->getProfile($product_id, $recurring_id);

		$json = array();

		if ($product_info && $recurring_info) {
			if (!$json) {
				$frequencies = array(
					'day'        => $this->language->get('text_day'),
					'week'       => $this->language->get('text_week'),
					'semi_month' => $this->language->get('text_semi_month'),
					'month'      => $this->language->get('text_month'),
					'year'       => $this->language->get('text_year'),
				);

				if ($recurring_info['trial_status'] == 1) {
					$price = $this->currency->format($this->tax->calculate($recurring_info['trial_price'] * $quantity, $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
					$trial_text = sprintf($this->language->get('text_trial_description'), $price, $recurring_info['trial_cycle'], $frequencies[$recurring_info['trial_frequency']], $recurring_info['trial_duration']) . ' ';
				} else {
					$trial_text = '';
				}

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

				if ($recurring_info['duration']) {
					$text = $trial_text . sprintf($this->language->get('text_payment_description'), $price, $recurring_info['cycle'], $frequencies[$recurring_info['frequency']], $recurring_info['duration']);
				} else {
					$text = $trial_text . sprintf($this->language->get('text_payment_cancel'), $price, $recurring_info['cycle'], $frequencies[$recurring_info['frequency']], $recurring_info['duration']);
				}

				$json['success'] = $text;
			}
		}

		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));
	}
}

 

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Similar Content

    • By Sha
      Скачать/Купить дополнение Меню Step By Step
      Menu Step By Step:
      Пошаговое меню для OpenCart, хлебные крошки с выпадающими списками.
      модуль тестировался на ocStore 1.5.5.x.x
      для OpenCart 2.0 здесь >
      ВОЗМОЖНОСТИ:
      - Пошаговый подбор товара (категории товара).
      - Возможность использовать, как хлебные крошки breadcrumb с выпадающими списками (как в total commander).
      - Вертикальный вывод пунктов меню, Горизонтальный вывод пунктов меню. (Опция) NEW
      - Вывести только указанные начальные категории в меню по ID, с "запоминанием", не нужно повторно вводить. (Опция) NEW
      - Возможность указать количество видимых пунктов/шагов по умолчанию. (Опция)
      - Указать <h3> заголовок модуля. (Опция)
      - Скрыть или показать пункты категорий в которых находимся (с помощью стилей)(читаем ниже)
      - Скрыть или показать пункты пустых подкатегорий (с помощью стилей)(читаем ниже)
      ЛОКАЛИЗАЦИЯ:
      - English.
      - Русский.
      - Украинский.
      ПРОСТАЯ УСТАНОВКА:
      Скопировать содержимое папки [upload] в корень движка.
      (структура архива соответствуют структуре папок OpenCart)
      ОБНОВЛЕНИЕ:
      Скопировать содержимое папки [upload] в корень движка, с заменой, поверх старой версии.
      ВАЖНО:
      Дополнение предоставляется по принципу "Как есть", Разработчик НЕ ГАРАНТИРУЕТ отсутствия ошибок, которые могут нарушить работу компьютера и/или сайта и/или привести к потере данных.
      Также, если в код магазина было внесено много изменений, то работоспособность модуля может быть нарушена.
      Использует ajax,
      Модуль совместим с bootstrap, (т.е. классы прописаны, и если на вашем сайте установлен bootstrap, модуль подхватит стили автоматически.)
      Модуль не затирает, не заменяет ни каких файлов движка.
      Тем не менее, рекомендуем перед установкой делать бэкап файлов и базы данных!!!
      Демонстрация магазина
      Демонстрация админки
      имя пользователя: login
      пароль: login
      ЛИЦЕНЗИЯ:
      - скачать модуль можно только на форуме опенкартфорум ком
      - на сайте r.konotop.info представлено полное описание и обсуждение багов или доработок модуля (предлагайте).
      остальные способы распространения Menu Step By Step левые и ни какого отношения к данному модулю не имеют!!!
      - Модуль реализуется по принципу "1 покупка – 1 доменное имя" (для установки на второй свой сайт, необходимо оплатить второй раз, на третий - третий раз купить модуль...)
      - Запрещается передавать файлы модуля третьим лицам, как на платной, так и на безвозмездной основе.
      ТЕХНИЧЕСКАЯ ПОДДЕРЖКА:
      Техническая поддержка доступна только пользователям, из списка покупателей модуля. Если вы обращаетесь с просьбой разобраться в проблеме то, для экономии нашего времени, укажите: 1) адрес сайта, 2) доступ в админ-панель, 3) доступ на FTP-сервер.
      ПОДРОБНЕЕ ДЛЯ РАЗРАБОТЧИКОВ
      Возможность стилизовать:
      - ещё не выбранный пункт (неактивный): class="translucent",
      - пункт совпадающий с любым id из цепочки path=, или по другому breadcrumb: class="here",
      - горизонтальный/вертикальный: class="horizontal", (можно, впринципе, использовать для любой опциональной хотелки)
      - последний в цепочке иерархии категорий, class="last"
      - скрыть или показать пункты категорий в которых находимся
      (например: .ajax-category-container .list-group-1.here{display:none} скроет первый пункт когда мы находимся в категории, но не скроет на главной, и так далее)
      - скрыть или показать пункты пустых подкатегорий (например: .ajax-category-container .last ~ .translucent{display:none} если выбрав один из пунктов он окажется последним в иерархии, то скроет все следующие за ним)
      Изменения
      Добавил Sha Добавлено 17.09.2015 Категория Модули Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart ocStore OpenCart.Pro, ocShop Обращение к серверу разработчика  
    • By Sha
      Скачать/Купить дополнение Меню Step By Step
      Menu Step By Step:
      Пошаговое меню для OpenCart, хлебные крошки с выпадающими списками.
      модуль тестировался на OpenCart 2.0.3.1, 2.3.0.2
      модуль для ocStore 1.5.5.x.x здесь >
       
      ВОЗМОЖНОСТИ:
      Пошаговый подбор товара (категории товара). Возможность указать количество видимых пунктов по умолчанию. Возможность использовать, как хлебные крошки breadcrumb с выпадающими списками (как в total commander).  
      ЛОКАЛИЗАЦИЯ:
      English. Русский. Украинский.  
      ПРОСТАЯ УСТАНОВКА:
      Скопировать содержимое папки [upload] в корень движка.
      (структура архива соответствуют структуре папок OpenCart)
       
      ВАЖНО:
      Дополнение предоставляется по принципу "Как есть", Разработчик НЕ ГАРАНТИРУЕТ отсутствия ошибок, которые могут нарушить работу компьютера и/или сайта и/или привести к потере данных.
      Также, если в код магазина было внесено много изменений, то работоспособность модуля может быть нарушена.
      Использует ajax и bootstrap.
      Модуль не затирает, не заменяет ни каких файлов движка.
      Тем не менее, рекомендуем перед установкой делать бэкап файлов и базы данных!!!
       
      ДЕМО МАГАЗИНА
      ДЕМО АДМИНИСТРАТИВНОЙ ЧАСТИ
       
      имя пользователя: login
      пароль: login
       
      ЛИЦЕНЗИЯ:
      - скачать модуль можно только на форуме opencartforum.com
      - на сайте r.konotop.info представлено полное описание и обсуждение багов или доработок модуля (предлагайте).
      остальные способы распространения Menu Step By Step левые и ни какого отношения к данному модулю не имеют!!!
      - Модуль реализуется по принципу "1 покупка – 1 доменное имя". (для установки на второй свой сайт, необходимо оплатить второй раз, на третий - третий раз купить модуль...)
      - Запрещается передавать файлы модуля третьим лицам, как на платной, так и на безвозмездной основе.
       
      ТЕХНИЧЕСКАЯ ПОДДЕРЖКА:
      Техническая поддержка доступна только пользователям, из списка покупателей модуля. Если вы обращаетесь с просьбой разобраться в проблеме то, для экономии нашего времени, укажите: 1) адрес сайта, 2) доступ в админ-панель, 3) доступ на FTP-сервер.
      Изменения:
      Добавил Sha Добавлено 02.09.2015 Категория Модули Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.0 ocStore 2.3.0.2.4
      2.3 OpenCart.Pro, ocShop Не проверялось Обращение к серверу разработчика Нет  
    • By Rammstein91
      Скачать/Купить дополнение Модуль «Категории в Хлебных крошках - Полный путь до товара [VQMod]» v.1.0 for OpenCart 1.5.2+
      Модуль «Категории в Хлебных крошках - Полный путь до товара [VQMod]» v.2.0 for OpenCart 1.5.2+
      Всегда отображать категории в хлебных крошках.
      По умолчанию OpenCart отображает категории в хлебных крошках только если Вы открыли товар со страницы категории.
      Это модифицированная версия другого модуля (http://www.opencart.com/index.php?route=extension/extension/info&extension_id=9609). Эта версия показывает наиболее вложенные категории (подкатегории) в хлебных крошках не зависимо откуда был открыт товар.
      Использует VQMod.
      УСТАНОВКА:
      1. Распаковать архив.
      2. Cодержимое папки «upload» скопировать в корень сайта.
      ДЕМО:
      Демо сайт: http://dothesite.ru/opencart-module/index.php?route=product/product&product_id=14
      ПОДДЕРЖКА:
      Андрей Лежнетев - http://dothesite.ru
      Добавил Rammstein91 Добавлено 03.03.2016 Категория Модули  
    • By Rammstein91
      Скачать/Купить дополнение Модуль «Категории в Хлебных крошках - Полный путь до товара [VQMod]» for OpenCart 1.5.2+
      Модуль «Категории в Хлебных крошках - Полный путь до товара [VQMod]» v.2.0 for OpenCart 1.5.2+
      Всегда отображать категории в хлебных крошках.
      По умолчанию OpenCart отображает категории в хлебных крошках только если Вы открыли товар со страницы категории.
      Это модифицированная версия другого модуля (http://www.opencart.com/index.php?route=extension/extension/info&extension_id=9609). Эта версия показывает наиболее вложенные категории (подкатегории) в хлебных крошках не зависимо откуда был открыт товар.
      Использует VQMod.
      УСТАНОВКА:
      1. Распаковать архив.
      2. Cодержимое папки «upload» скопировать в корень сайта.
      ДЕМО:
      Демо сайт: http://dothesite.ru/opencart-module/index.php?route=product/product&product_id=14
      ПОДДЕРЖКА:
      Андрей Лежнетев - http://dothesite.ru
      Добавил Rammstein91 Добавлено 08.04.2016 Категория Модули Системные требования vqmod Метод активации Ioncube Loader OpenCart ocStore OpenCart.Pro, ocShop Обращение к серверу разработчика  
    • By Mishanya1
      Здравствуйте,
      Периодически приходит от Гугла такой мэил:
       
      Отсутствует поле  "ItemListElemnt"
       

       

       
      Пример страницы с проблемой:
      https://shukrehut.co.il/naushniki-igrovye-as03-v-izraile
       
      Собственно, отмечены все страницы сайта.
      Выделен красным этот кусок:

       
      <ul class="breadcrumb tab_mob_child" itemscope itemtype="http://schema.org/BreadcrumbList">
      <li class="tab_mob_grandchild"><a href="https://shukrehut.co.il/" class="current-link"><i class="fa fa-home"></i></a></li>
      </ul>
       
      Я думаю, что проблема в файле product.twig
       
      Вот в этом кусочке:
      <ul class="breadcrumb tab_mob_child" itemscope itemtype="http://schema.org/BreadcrumbList">
      {% for i,breadcrumb in breadcrumbs %}
          {% if (i == 0) %}
              <li class="tab_mob_grandchild"><a href="{{ breadcrumb['href'] }}" class="current-link">{{ breadcrumb['text'] }}</a></li>
          {% elseif (breadcrumbs|length > i+1 ) %}
              <li class="tab_mob_grandchild" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
                  <a href="{{ breadcrumb['href'] }}" itemprop="item" itemscope itemtype="https://schema.org/Thing" itemid="{{ breadcrumb['href'] }}" title="{{ breadcrumb['text'] }}">
                      <span itemprop="name">{{ breadcrumb['text'] }}</span>
                  </a>
                  <meta itemprop="position" content="{{ i }}">
              </li>
          {% endif %}
      {% endfor %}
      </ul>
       
      Скорее всего в строчку 
      <li class="tab_mob_grandchild"><a href="{{ breadcrumb['href'] }}" class="current-link">{{ breadcrumb['text'] }}</a></li>
      нужно добавить itemprop="itemListElement".

      Я пытался, но получал другие ошибки: отсутствует "name" или "item.name".
      Что исправить, чтобы Гугл не ругался?
       
      Кстати, может быть кто-то уже решал эту проблему. Вот этот шаблон:
      Спасибо.
      product.twig
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.