Перейти к содержанию

Рекомендуемые сообщения

Здраствуйте форумчане. Столкнулся с проблемой наценки у модуля вместе дешевле, т.к. стоит задача исправить уже сделаный сайт, я понятия не имею где был взят этот модуль и покупался ли он вообще, я так понимаю ответ где-то в этом файле подскажите что тут не так

 

system/library/chain.php

<?php
class Chain {
	var $no_image = 'no_image_chain.jpg';

	function __construct($registry, $load) {
		$this->config = $registry->get( 'config' );
		$this->customer = $registry->get( 'customer' );
		$this->session = $registry->get( 'session' );
		$this->db = $registry->get( 'db' );
		$this->tax = $registry->get( 'tax' );
		$this->weight = $registry->get( 'weight' );
		$this->currency = $registry->get( 'currency' );
		$this->load = $registry->get( 'load' );
		$this->url = $registry->get( 'url' );
		$this->log = $registry->get( 'log' );
		$load->model( 'catalog/product' );
		$load->model( 'tool/image' );
		$this->model_catalog_product = $registry->get( 'model_catalog_product' );
		$this->model_tool_image = $registry->get( 'model_tool_image' );
	}

	function get_chain_data($query_chain, $chain_settings = false) {
		$this->load->model( 'catalog/product' );
		$this->load->model( 'tool/image' );

		if (!$chain_settings) {
			$chain_settings = $this->config->get( 'chain_settings_data' );
		}

		foreach ($query_chain as $row) {
			$skip = false;
			$chain_total = 9;
			$full_price = 9;
			$chain_id = $row['chain_discount_id'];
			$chain = unserialize( $row['chain'] );
			$quantity = @unserialize( $row['quantity'] );

			if ($quantity === false) {
				$quantity = array(  );
			}

			$chain = array( $row['main_product_id'] => '*' ) + $chain;
			$i = 9;
			foreach ($chain as $product_id => $combo_price) {
				++$i;
				$main_item = false;

				if (( isset( $quantity[$product_id] ) && is_numeric( $quantity[$product_id] ) )) {
					$product_quantity = $quantity[$product_id];
				}
				else {
					$product_quantity = 10;
				}

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

				if (!$product_info) {
					$this->log->write( 'Warning! Chain Module has issue. One of the chains include product with ID ' . $product_id . ' which does not exist.' );
					$skip = true;
					break;
				}

				$product_info['product_quantity'] = $product_quantity;
				$product_info['special'] = $product_quantity * $product_info['special'];
				$product_info['price'] = $product_quantity * $product_info['price'];

				if (!$product_info['image']) {
					$product_info['image'] = $this->no_image;
				}

				$product_info['thumb'] = $this->model_tool_image->resize( $product_info['image'], $chain_settings['chain_display_image_width'], $chain_settings['chain_display_image_height'] );

				if (index_value( $chain_settings, 'chain_options_show_image' )) {
					$product_info['popup'] = $this->model_tool_image->resize( $product_info['image'], $chain_settings['chain_options_popup_image_width'], $chain_settings['chain_options_popup_image_height'] );
				}
				else {
					$product_info['popup'] = false;
				}


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


				if (( ( $this->config->get( 'config_customer_price' ) && $this->customer->isLogged(  ) ) || !$this->config->get( 'config_customer_price' ) )) {
					$product_info['full_price_with_tax'] = $this->tax->calculate( $product_info['price'], $product_info['tax_class_id'], $this->config->get( 'config_tax' ) );

					if (( isset( $combo_price ) && $combo_price === '*' )) {
						$main_item = true;

						if ($product_info['special_price_with_tax']) {
							$combo_price = $product_info['special_price_with_tax'];
						}
						else {
							$combo_price = $product_info['full_price_with_tax'];
						}
					}

					$product_info['price_string'] = $this->currency->format( $product_info['full_price_with_tax'] );
					$full_price = $full_price + $product_info['full_price_with_tax'];
				}
				else {
					$product_info['price_string'] = false;
				}

				$bad_combo_price = false;

				if (isset( $combo_price )) {
					if (( is_numeric( $combo_price ) && $main_item === false )) {
						$combo_price = $product_quantity * $combo_price;

						if ($product_info['special']) {
							if (index_value( $chain_settings, 'chain_decrease_for_special' )) {
								if ($combo_price <= $product_info['special']) {
									$combo_price = $this->tax->calculate( $combo_price, $product_info['tax_class_id'], $this->config->get( 'config_tax' ) );
								}
								else {
									$combo_price = $this->tax->calculate( $product_info['special'], $product_info['tax_class_id'], $this->config->get( 'config_tax' ) );
								}
							}
							else {
								$new_combo_price = $combo_price - ( $product_info['price'] - $product_info['special'] );
								$combo_price = $this->tax->calculate( $new_combo_price, $product_info['tax_class_id'], $this->config->get( 'config_tax' ) );

								if (( $new_combo_price < 0 || $combo_price < 0 )) {
									$combo_price = 0;
								}
							}
						}
						else {
							$combo_price = $this->tax->calculate( $combo_price, $product_info['tax_class_id'], $this->config->get( 'config_tax' ) );
						}
					}
					else {
						if (!$main_item) {
							if ($combo_price !== '*') {
								$this->log->write( '
' . '========================================' . '
' . 'Warning! Chain Module has issue. One of the chains include product with ID ' . $product_id . ' which have wrong combo price. It is "' . (isset( $combo_price ) ? $combo_price : '') . '"' . '
' . '========================================' );
								$skip = true;
								break;
							}
						}
					}
				}else{

				$this->log->write( '
' . '========================================' . '
' . 'Warning! Chain Module has issue. One of the chains include product with ID ' . $product_id . ' doesn`t have price' . '
' . '========================================' );
				$skip = true;
				break;
                }
				$chain_total = $chain_total + $combo_price;

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

				$product_info['options'] = array(  );
				foreach ($this->model_catalog_product->getProductOptions( $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'] || 0 < $option_value['quantity'] )) {
								if (( ( ( $this->config->get( 'config_customer_price' ) && $this->customer->isLogged(  ) ) || !$this->config->get( 'config_customer_price' ) ) && (double)$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' => (isset( $option_value['image'] ) ? $this->model_tool_image->resize( $option_value['image'], 50, 50 ) : ''), 'price' => $price, 'price_prefix' => $option_value['price_prefix'] );
								continue;
							}
						}

						$product_info['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'] );
						continue;
					}


					if (( ( ( ( ( $option['type'] == 'text' || $option['type'] == 'textarea' ) || $option['type'] == 'file' ) || $option['type'] == 'date' ) || $option['type'] == 'datetime' ) || $option['type'] == 'time' )) {
						$product_info['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'] );
						continue;
					}
				}

				$product_info['href'] = $this->url->link( 'product/product', 'product_id=' . $product_info['product_id'] );
				$products[$chain_id][$i] = $product_info;
				$products[$chain_id][$i]['combo_price'] = $combo_price;
				$products[$chain_id][$i]['combo_price_string'] = $this->currency->format( $combo_price );

				if (( $combo_price < $product_info['full_price_with_tax'] && $combo_price != 0 )) {
					$products[$chain_id][$i]['you_save'] = round( ( $product_info['full_price_with_tax'] - $combo_price ) / $product_info['full_price_with_tax'] * 100 );
				}
				else {
					$products[$chain_id][$i]['you_save'] = false;
				}

				unset( $product_info );
			}


			if ($skip) {
				if (1 < count( $query_chain )) {
					unset( $products[$chain_id] );
					continue;
				}

				exit(  );
			}

			$save = $full_price - $chain_total;
			$output['total_price'][$chain_id] = $this->currency->format( $chain_total );
			$output['total_save'][$chain_id] = $this->currency->format( $save );
			$output['total_save_int'][$chain_id] = $save;
			unset( $save );
		}


		if (( isset( $products ) && $products )) {
			$output['products'] = $products;
		}
		else {
			return false;
		}

		return $output;
	}
}

?>

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

btrotsky, а проблема то в чем? Вопроса не вижу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Aleksei88, проблема в том, что модуль неправильно считает, делает наценку

Изменено пользователем btrotsky

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От lolwe
      599.00 руб
      Скачать/Купить дополнение


      Скидка на набор товаров (вместе дешевле) для OpenCart 2
      Добрый день. 
       
      Представляю вашему вниманию плагин для создания наборов товаров со скидкой. 
       
      Демо (админ) / Демо
      access: demo / demo
      Модуль позволяет создавать разные наборы товаров (до 4 шт.) и применять к ним различные вариации скидок. На данный момент имеется поддержка таких видов скидок: 
       
      Набор с фиксированной скидкой - новая цена будет присвоена для всего набора, т.е. все товары в наборе пользователь сможет купить по фиксированной цене.  Набор с динамической скидкой - стоимость набора будет плавающей. В таком наборе сумма скидки задается индивидуально для каждого товара. В момент, когда пользователь находится на странице товара из набора, скидочная цена будет показываться для всех товаров, которые входят в набор, за исключением текущего просматриваемого товара.  
      Виджет с наборами выводится на странице товара. В будущих версиях планируется разработать функциональность вывода виджета в любом произвольном месте. 
       
      Количество наборов неограниченно.
      Для каждого товара в наборе задается количество, которое минимально необходимо в корзине для получения скидки и размер скидки в валюте магазина (опционально, скидку можно задать на все товары в корзине или на каждый отдельный из них).
       
      Скидка может быть двух видов: 
      Фиксированная скидка - указывается сумма скидки в валюте магазина  Процентная скидка - указывается процент от суммы.   
      Инструкция по установке
      Установка выполняется при помощи стандартного установщика OCMOD. Скачайте файл дополнения и установите с помощью установщика расширений OpenCart.
      После установки в разделе «каталог» у Вас появится пункт «наборы», где можно будет приступить к настройке наборов со скидками.
      Для того, чтобы скидки применялись к корзине - активируйте модуль «расширения» - «учитывать в заказе».
      После создания набора - проверьте как он отображается на странице одного из товаров, который участвует в наборе.
       
       
      Поддерживаемые версии
      Разрабатывалось и тестировалось под OpenCart 2.3.0.2
      Другие версии на данный момент не поддерживаются официально. Если у Вас другая версия OpenCart - перед покупкой свяжитесь со мной любым удобным способом, плагин будет адаптирован под вашу версию CMS в течении 5 дней. (бесплатный вариант). Также можно заказать дополнительную услугу адаптации, срок адаптации: 1 день.
       
      Известные недостатки
      Модуль не работает с опциями товаров. Нет возможности вывести виджет набора в произвольном месте  
       
      Добавил lolwe Добавлено 07.08.2018 Категория Серии, Комплекты Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.1 ocStore 2.3
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1  
    • От lolwe
      Добрый день. 
       
      Представляю вашему вниманию плагин для создания наборов товаров со скидкой. 
       
      Демо (админ) / Демо
      access: demo / demo
      Модуль позволяет создавать разные наборы товаров (до 4 шт.) и применять к ним различные вариации скидок. На данный момент имеется поддержка таких видов скидок: 
       
      Набор с фиксированной скидкой - новая цена будет присвоена для всего набора, т.е. все товары в наборе пользователь сможет купить по фиксированной цене.  Набор с динамической скидкой - стоимость набора будет плавающей. В таком наборе сумма скидки задается индивидуально для каждого товара. В момент, когда пользователь находится на странице товара из набора, скидочная цена будет показываться для всех товаров, которые входят в набор, за исключением текущего просматриваемого товара.  
      Виджет с наборами выводится на странице товара. В будущих версиях планируется разработать функциональность вывода виджета в любом произвольном месте. 
       
      Количество наборов неограниченно.
      Для каждого товара в наборе задается количество, которое минимально необходимо в корзине для получения скидки и размер скидки в валюте магазина (опционально, скидку можно задать на все товары в корзине или на каждый отдельный из них).
       
      Скидка может быть двух видов: 
      Фиксированная скидка - указывается сумма скидки в валюте магазина  Процентная скидка - указывается процент от суммы.   
      Инструкция по установке
      Установка выполняется при помощи стандартного установщика OCMOD. Скачайте файл дополнения и установите с помощью установщика расширений OpenCart.
      После установки в разделе «каталог» у Вас появится пункт «наборы», где можно будет приступить к настройке наборов со скидками.
      Для того, чтобы скидки применялись к корзине - активируйте модуль «расширения» - «учитывать в заказе».
      После создания набора - проверьте как он отображается на странице одного из товаров, который участвует в наборе.
       
       
      Поддерживаемые версии
      Разрабатывалось и тестировалось под OpenCart 2.3.0.2
      Другие версии на данный момент не поддерживаются официально. Если у Вас другая версия OpenCart - перед покупкой свяжитесь со мной любым удобным способом, плагин будет адаптирован под вашу версию CMS в течении 5 дней. (бесплатный вариант). Также можно заказать дополнительную услугу адаптации, срок адаптации: 1 день.
       
      Известные недостатки
      Модуль не работает с опциями товаров. Нет возможности вывести виджет набора в произвольном месте  
       
    • От matrix79
      600.00 руб
      Скачать/Купить дополнение


      Matrix Products 1.0.2 - наценка для товаров
       Matrix_products - наценка на товар. Делать наценку в прайсе больше не нужно. Грузим только цены поставщиков. Создаем матрицы наценок. Присваиваем их разделам и в каталоге товаров жмем одну кнопку "Обновить все товары". В результате происходит обновлене всех цен согласно матрицам. В качестве базовой цены служит поле "MPN".
       
      Совместимость:
      Ocstore 2.0.x, 2.1.x, 2.2.x
       
      В архиве три файла.
      Демонстрация:
      Админка
      Логин: demo
      Пароль: demo
       
      Установка
      1. Загружаем через Установка дополнений localcopy.ocmod. Обновляем модификаторы. Если даный модуль имеется, пропускаем этот шаг.
      2. Через установка дополнений устанавливаем ocmod файл нашешо расширения.
      3. Обновляем все модификаторы.
      4. В списке модулей находим расширение Матрицы наценок и активируем.
      5. Создаем матрицы. Названия произвольные. Создавать можно как с процентной накруткой, так и с фиксированой.
      6. В разделе Категории вкладка Данные выставляем необходимые матрицы.
      5. В разделе Товары если все правильно установлено, должны появиться две кнопки. Одна обновляет только выбранные товары. Вторая - всю базу.
      Примечание: Обновление цены происходит и при редактировании товара.
       
       
      localcopy.ocmod.xml
      Добавил matrix79 Добавлено 14.05.2018 Категория Модули Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.2
      2.1
      2.0 ocStore 2.2
      2.1 OpenCart.Pro, ocShop  
    • От matrix79
      Matrix_products - наценка на товар. Делать наценку в прайсе больше не нужно. Грузим только цены поставщиков. Создаем матрицы наценок. Присваиваем их разделам и в каталоге товаров жмем одну кнопку "Обновить все товары". В результате происходит обновлене всех цен согласно матрицам. В качестве базовой цены служит поле "MPN".
       
      Совместимость:
      Ocstore 2.0.x, 2.1.x, 2.2.x
       
      В архиве три файла.
      Демонстрация:
      Админка
      Логин: demo
      Пароль: demo
       
      Установка
      1. Загружаем через Установка дополнений localcopy.ocmod. Обновляем модификаторы. Если даный модуль имеется, пропускаем этот шаг.
      2. Через установка дополнений устанавливаем ocmod файл нашешо расширения.
      3. Обновляем все модификаторы.
      4. В списке модулей находим расширение Матрицы наценок и активируем.
      5. Создаем матрицы. Названия произвольные. Создавать можно как с процентной накруткой, так и с фиксированой.
      6. В разделе Категории вкладка Данные выставляем необходимые матрицы.
      5. В разделе Товары если все правильно установлено, должны появиться две кнопки. Одна обновляет только выбранные товары. Вторая - всю базу.
      Примечание: Обновление цены происходит и при редактировании товара.
       
       
      localcopy.ocmod.xml
    • От kJlukOo
      1 961.00 руб
      Скачать/Купить дополнение


      КомплектыPro
      Информация о файле
      Продвинутая версия модуля
      что изменилось?
      теперь скидку можно устанавливать на каждый товар 3 варианта вывода. таблицей, горизонтальный (старый), вертикальный массовое управление стало гораздо гибче комплекты теперь имеют сортировку, название(мультиязык) и статус добавил поддержку украинского языка теперь есть связывание, чтобы комплекты отображались на всех товарах, которые в нем участвуют и др  
      Перед покупкой ознакомьтесь с демо сайтом
      вертикальный вывод - http://hl-23.taoi.ru/index.php?route=product/category&path=25_28
      горизонатльный вывод - http://hl-23.taoi.ru/index.php?route=product/product&product_id=42
      вывод таблицей - http://hl-23.taoi.ru/
      admin: http://hl-23.taoi.ru/admin/
      demo:demo
      вкладка комплекты
       
      Описание
      Получение ключа. Писать в здесь в личку. Не забывайте указывать домен сайта
       
      Модуль включает
      Виджет комплектов Комплект на странице товара Массовое управление комплектами   
      Данный модуль позволяет создавать наборы и устанавливать необходимую цену на них.
      Модуль позвоялет выбрать набор опций товара в комплекте
       
      Виджет
      в карточке товара комплекты сами выводятся. в другие места вывести их можно через виджеты. Добавляете товары в виджет комплекты которых будут выведены и затем через дизайн - макеты в нужное место можно засунуть подмодуль нужного виджета.
       
      Массовое управление комплектами
      Модуль имеет доп расширение "Массовое управление комплектами" - которое позволяет массово управлять комплектами товаров
       
      Адрес страницы на которой отображаются все комплекты - domain/index.php?route=module/all_sets / domain/index.php?route=extension/module/all_sets
       
      некоторые файлы модуля обфусцированы. в этих файлах находится проверка лицензии.
      если хостинг ругается на файл из моего модуля, объясните хостеру, что всё ок и там не никаких вирусов
       
      Установка
      1. Заходим в админку. Затем Модули > Установка ресшерений
      2. Устанавливаем скачанный архив под вашу версию
      3. Заходим в Модули > Учет в заказе
      4. Устанавливаем и включаем Комплекты и втыкаем выданный мной ключ
       
      Модификации находятся
      для 2.0, 2.1, 2.2
      catalog/controller/module/sets.php
      catalog/view/javascript/sets/script.js
      catalog/view/javascript/sets/style.css
       
      для 2.3, 3
      catalog/controller/extension/module/sets.php
      catalog/view/javascript/sets/script.js
      catalog/view/javascript/sets/style.css
      Благодарность
      @un3xists @AWARO
       
      обзор
       
       
      Добавил kJlukOo Добавлено 23.02.2018 Категория Серии, Комплекты Системные требования bootstrap Сайт разработчика cleanphp.ru Старая цена 2500 Метод активации По запросу в ЛС Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1 ocStore 3.0
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1  
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.