Jump to content
Sign in to follow this  
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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

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

Share this post


Link to post
Share on other sites

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

  • Закомментировать строки
$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;
	}
}

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By s7r0ng
      Здравствуйте!
      Такой вопрос. При оформлении заказа не выводится вариант "Доставка в зависимости от веса".
      1) Модуль включен, расценки прописаны, класс налога не задан
      2) В Настройках магазина опция "Показывать вес в корзине" включена
      3) В товарах "Необходима доставка: ДА"
      Другие варианты отображаются без проблем. Что этому нужно, не пойму..
       
      Также не отображается вес товаров в корзине.
      Подскажите, пожалуйста, в чем может быть причина? Спасибо
       
       
      ocStore 2.3.0.2.3
      Шаблон Aridius Modern v2
    • By 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.х  
    • By 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
       
      Смотрите также другие модули по ссылке
  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.