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

бесплатная доставка от определенной суммы + условие опреленной категории товаров


Recommended Posts

Всем привет.

Поомогите пожалуйста добавить условие  в" бесплатную доставку" чтобы учитывалась не только минимальная сумма но еще и категория товара определенная:

 

if (isset($this->request->post['free_total'])) {
            $data['free_total'] = $this->request->post['free_total'];
        } else {
            $data['free_total'] = $this->config->get('free_total');
        }

Змінено користувачем munhgauzen
Надіслати
Поділитися на інших сайтах


1 час назад, munhgauzen сказал:

Всем привет.

Поомогите пожалуйста добавить условие  в" бесплатную доставку" чтобы учитывалась не только минимальная сумма но еще и категория товара определенная:

 

if (isset($this->request->post['free_total'])) {
            $data['free_total'] = $this->request->post['free_total'];
        } else {
            $data['free_total'] = $this->config->get('free_total');
        }

Версия какая?

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

13 минут назад, munhgauzen сказал:

2.1

В catalog/model/shipping/free.php

нужно подгрузить товары 

$products = $this->cart->getProducts();

Потом проверить на категорию эти товары.

И добавить проверку в:

if ($this->cart->getSubTotal() < $this->config->get('free_total')) {
	$status = false;
}

 

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

Ок спасибо. Я так понимаю если категория называется Насосы то проверка будет выглядеть так?

 

if ($this->cart->getSubTotal() < $this->config->get('free_total') && $this->cart->getProducts() == !categorу_id=20 ) {
    $status = false;
}

Змінено користувачем munhgauzen
Надіслати
Поділитися на інших сайтах


2 минуты назад, munhgauzen сказал:

Ок спасибо. Я так понимаю если категория называется Насосы то проверка будет выглядеть так?

 

if ($this->cart->getSubTotal() < $this->config->get('free_total') && $this->cart->getProducts() == !$categories['Насосы'] ) {
    $status = false;
}

Вот тут получаем массив товаров в корзине:

$products = $this->cart->getProducts();

Категории в массиве нет вообще, нужно по product_id найти id категории.

Потом проверить что все товары принадлежат этой самой категории.

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

ОНО?

в данном случае категория насосы имеет id 20

 

$products = $this->cart->getProducts();

$categories =   $this->model_catalog_category->getCategory($category_id);

 

 

 

if ($this->cart->getSubTotal() < $this->config->get('free_total') &&  !$categories == 20) {
    $status = false;

Змінено користувачем munhgauzen
попытка 3
Надіслати
Поділитися на інших сайтах


1 минуту назад, nikifalex сказал:

Этоже не пикабу всеже

 

Но шутки-то хорошие

 

22 минуты назад, munhgauzen сказал:

!$categories == 20

 

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

18 минут назад, munhgauzen сказал:

спасибо всем за хорошие рекомендации. Разберусь выложу ответ.

$products = $this->cart->getProducts();

foreach($products as $product) {
	$categories = $this->model_catalog_product->getCategories($product['product_id']);
	$product_categories = array();
	foreach($categories as $category) {
		$product_categories[] = $category['category_id'];
	}
	if (!in_array(20, $product_categories)) {
		$status = false;
	}
}

Не проверял, но должно работать.

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

1 час назад, mazein сказал:

Но шутки-то хорошие

ага

2 часа назад, munhgauzen сказал:

$this->cart->getProducts() == !categorу_id=20

 

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

спасибо Gaziz .

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

Необходимо чтобы товаров определенной категории было на сумму не менее той что указана в условии:

if ($this->cart->getSubTotal() < $this->config->get('free_total') )

 

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


18 минут назад, munhgauzen сказал:

спасибо Gaziz .

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

Необходимо чтобы товаров определенной категории было на сумму не менее той что указана в условии:

if ($this->cart->getSubTotal() < $this->config->get('free_total') )

 

Ну так изначально пишите что нужно.

А если в корзине 5 товаров с одной категории и 1 товар с другой. И эти 5 товаров соответствуют сумме?

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

1 час назад, Gaziz сказал:

Ну так изначально пишите что нужно.

А если в корзине 5 товаров с одной категории и 1 товар с другой. И эти 5 товаров соответствуют сумме?

тут главное чтобы товары определенной категории соответствовали  указанной в конфиге "бесплатной доставки" минимальной сумме, например если товары категории "насосы" не набрали  указанную сумму в конфиге ( $this->config->get('free_total') )  то "бесплатная доставка" не работает:

$status = false;
Надіслати
Поділитися на інших сайтах


  /*if ($this->cart->getSubTotal() < $this->config->get('free_total')) {
  	$status = false;
  }*/

  $products = $this->cart->getProducts();

  $category_total = 0;

  foreach($products as $product) {
  	$categories = $this->model_catalog_product->getCategories($product['product_id']);
  	$product_categories = array();
  	foreach($categories as $category) {
  		$product_categories[] = $category['category_id'];
  	}
  	if (!in_array(20, $product_categories)) {
  		$status = false;
  	} else {
  		$category_total =+ $product['total'];
  	}
  }

  if ($category_total < $this->config->get('free_total')) {
  	$status = false;
  }

 

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

Спасибо Gaziz

Почти получилось но в данном условии учитывается id 1-го продукта а в категории продуктов то много..(

тоесть если уже 2 продукта из одной категории то данное условие не подходит

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


33 минуты назад, munhgauzen сказал:

Спасибо Gaziz

Почти получилось но в данном условии учитывается id 1-го продукта а в категории продуктов то много..(

тоесть если уже 2 продукта из одной категории то данное условие не подходит

Вы хоть проверили?

foreach($products as $product) {

}

обозначает для каждого товара в корзине!!!

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

Gazis проверил, срабатывает условие только в случае если товар в корзине 1-й категории и 1-го вида, еcли 1-й категории и 2-х видов(id) то условие не срабатывает.

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


21 минуту назад, munhgauzen сказал:

Gazis проверил, срабатывает условие только в случае если товар в корзине 1-й категории и 1-го вида, еcли 1-й категории и 2-х видов(id) то условие не срабатывает.

За Вас все сделать надо? Найдите отличия:

$category_total += $product['total'];
$category_total =+ $product['total'];

 

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

Gaziz  спасибо .

 

Но нужна небольшая правка тогда все работает ОК

 

////////////////////
$products = $this->cart->getProducts();

  $category_total = 0;

  foreach($products as $product) {
      $categories = $this->model_catalog_product->getCategories($product['product_id']);
      $product_categories = array();
      foreach($categories as $category) {
          $product_categories[] = $category['category_id'];
      }
      if (!in_array(20, $product_categories)) {
          //$status = false; // ничего не делаем
        
      } else {

    $category_total += $product['total']; //условие срабатывает на все товары  с заданной категории(20)
      }
  }

  if ($category_total < $this->config->get('free_total')) {
      $status = false;
  }
    ///////////////////////////       

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


1 минуту назад, munhgauzen сказал:

Gaziz  спасибо .

 

Но нужна небольшая правка тогда все работает ОК

 

////////////////////
$products = $this->cart->getProducts();

  $category_total = 0;

  foreach($products as $product) {
      $categories = $this->model_catalog_product->getCategories($product['product_id']);
      $product_categories = array();
      foreach($categories as $category) {
          $product_categories[] = $category['category_id'];
      }
      if (!in_array(20, $product_categories)) {
          //$status = false; // ничего не делаем
        
      } else {

    $category_total += $product['total']; //условие срабатывает на все товары  с заданной категории(20)
      }
  }

  if ($category_total < $this->config->get('free_total')) {
      $status = false;
  }
    ///////////////////////////       

Тогда уж так

		$products = $this->cart->getProducts();
		
		$category_total = 0;
		
		foreach($products as $product) {
			$categories = $this->model_catalog_product->getCategories($product['product_id']);
			$product_categories = array();
			foreach($categories as $category) {
				$product_categories[] = $category['category_id'];
			}
			if (in_array(20, $product_categories)) {
				$category_total += $product['total'];
			}
		}
		
		if ($category_total < $this->config->get('free_total')) {
			$status = false;
		}

 

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

  • 1 month later...

Хм обнаружил очень неясный момент. Условие срабатывает если заказ делает незарегистрированный пользователь (соответственно попутно происходит его регистрация).

Но если пользователь уже зарегистрирован и вошел под своим логином на сайт то условие как будто полностью отсутствует - не срабатывает.

Вообще не пойму причем тут это.

Змінено користувачем munhgauzen
Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Вхід

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

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

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

Important Information

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