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

Доставка в зависимости от веса, суммировать доставки по всем товарам

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

ocStore 1.5.5.1.1

Здравствуйте

Нужно подкорректировать модуль доставки в зависимости от веса так что бы он выводил сумму доставок отдельно по каждому товару в корзине. По-умолчанию он суммирует вес товаров и возвращает стоимость пересылки одной посылки с этим весом. А мне надо чтоб он считал доставку отдельно по каждому товару, и выводил суммарную стоимость.

Я ковыряю файл \catalog\model\shipping\weight.php. Вот слепил вот такой код

$cost = '';
$rates = explode(',', $this->config->get('weight_' . $result['geo_zone_id'] . '_rate'));
$products = $this->cart->getProducts();
foreach ($products as $product) {
	if ($product['shipping']) {
		$weight = $this->weight->convert($product['weight'], $product['weight_class_id'], $this->config->get('config_weight_class_id'));
			foreach ($rates as $rate) {
				$data = explode(':', $rate);									
				if ($data[0] >= $weight) {
					if (isset($data[1])) {
						$cost += $data[1];
					}
					break;
				}
			}
	}
}

И он, как ни странно, работает! Вот только если в корзине несколько одинаковых товаров, он по-старинке сначала суммирует их вес, и только потом вычисляет стоимость доставки. Я с моими !знаниями php пока не рискую лезть в getProducts(). Как я понимаю надо или ее менять или как-то вычислять одинаковые товары в корзине и делить вес на их количество. Тут я надеюсь на вашу поддержку. Или может я лезу "в дебри" и есть проще решение? Готовый модуль? Не нашел, честно.

weight.php

weight_ver1_1.php

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


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

Решено. Как все просто!

foreach ($products as $product) {
			if ($product['shipping']) {
				$weight = $this->weight->convert($product['weight']/$product['quantity'], $product['weight_class_id'], $this->config->get('config_weight_class_id'));
					foreach ($rates as $rate) {
						$data = explode(':', $rate);									
						if ($data[0] >= $weight) {
							if (isset($data[1])) {
								$cost += $data[1] * $product['quantity'];
							}
					
							break;
						}
					}
				
			}
}

Полезно иногда отдохнуь и взглянуть на задачу "свежим" глазом)

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


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

Здравствуйте, SantSany.

 

А не подскажете, как сделать так, чтобы вес всех товаров в заказе не суммировался, а выбирался наибольший?

Буду очень признателен за любой ответ )

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


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

В том же файле:

  • Закомментировать строки
$weight = $this->cart->getWeight();



foreach ($rates as $rate) {
	$data = explode(':', $rate);
	if ($data[0] >= $weight) {
		if (isset($data[1])) {
			$cost = $data[1];
		}

		break;
}
  • ​После строки $products = $this->cart->getProducts(); вставить следующее:
$weight = 0;
foreach ($products as $product) {
	$weigh_t = $this->weight->convert($product['weight']/$product['quantity'], $product['weight_class_id'], $this->config->get('config_weight_class_id'));
	if ($product['shipping']) {
		if ($weigh_t > $weight) {
			$weight = $weigh_t;
		}
	}
}
foreach ($rates as $rate) {
	$data = explode(':', $rate);									
	if ($data[0] >= $weight) {
		if (isset($data[1])) {
			$cost = $data[1];
		}

		break;
	}
}

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


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

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

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

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

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

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

Войти

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

Войти

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

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


      20 клонов доставки в зависимости от веса+ (weight) для OC2
      Клоны стандартного модуля доставка в зависимости от веса (Weight Based Shipping) для версий магазинов 2.0.x-2.1.x
      Клоны для ос 2.3 по ссылке
      + Добавлена возможность задать название доставки для каждой гео зоны.
      *Не заменяет системных файлов
      *Не требует Vqmod
      *Все клоны разделены на папки (устанавливаете столько сколько Вам надо)
      *Работает с модулем simple
      Демо
      http://dev38.pe-art.ru/
      admin panel
      http://dev38.pe-art.ru/admin
      login: demo
      passwd: demo
       
      Смотрите также другие модули по ссылке
      Добавил ashap Добавлено 10.07.2015 Категория Доставки Системные требования Сайт разработчика https://store.pe-art.ru/ Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.1
      2.0 ocStore 2.1 OpenCart.Pro, ocShop Opencart.pro 2.1
      OcShop 2.0.3.х  
    • От ashap
      Клоны стандартного модуля доставка в зависимости от веса (Weight Based Shipping) для версий магазинов 2.0.x-2.1.x
      Клоны для ос 2.3 по ссылке
      + Добавлена возможность задать название доставки для каждой гео зоны.
      *Не заменяет системных файлов
      *Не требует Vqmod
      *Все клоны разделены на папки (устанавливаете столько сколько Вам надо)
      *Работает с модулем simple
      Демо
      http://dev38.pe-art.ru/
      admin panel
      http://dev38.pe-art.ru/admin
      login: demo
      passwd: demo
       
      Смотрите также другие модули по ссылке
  • Последние посетители   0 пользователей онлайн

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

×

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

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