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

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


SantSany

Recommended Posts

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

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

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


  • 3 months later...

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

 

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

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

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


  • 2 months later...

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

  • Закомментировать строки
$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;
	}
}
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.