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

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


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
Надіслати
Поділитися на інших сайтах


  В 04.08.2018 в 12:54, 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');
        }

Expand  

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

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

  В 04.08.2018 в 14:08, munhgauzen сказав:

2.1

Expand  

В 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
Надіслати
Поділитися на інших сайтах


  В 04.08.2018 в 14:34, munhgauzen сказав:

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

 

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

Expand  

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

$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
Надіслати
Поділитися на інших сайтах


  В 04.08.2018 в 15:14, nikifalex сказав:

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

Expand  

 

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

 

  В 04.08.2018 в 14:54, munhgauzen сказав:

!$categories == 20

Expand  

 

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

  В 04.08.2018 в 15:34, munhgauzen сказав:

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

Expand  
$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
Надіслати
Поділитися на інших сайтах

  В 04.08.2018 в 15:16, mazein сказав:

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

Expand  

ага

  В 04.08.2018 в 14:34, munhgauzen сказав:

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

Expand  

 

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

спасибо Gaziz .

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

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

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

 

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


  В 04.08.2018 в 18:24, munhgauzen сказав:

спасибо Gaziz .

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

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

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

 

Expand  

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

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

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

  В 04.08.2018 в 18:50, Gaziz сказав:

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

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

Expand  

тут главное чтобы товары определенной категории соответствовали  указанной в конфиге "бесплатной доставки" минимальной сумме, например если товары категории "насосы" не набрали  указанную сумму в конфиге ( $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 продукта из одной категории то данное условие не подходит

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


  В 04.08.2018 в 21:31, munhgauzen сказав:

Спасибо Gaziz

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

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

Expand  

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

foreach($products as $product) {

}

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

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

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

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


  В 05.08.2018 в 06:39, munhgauzen сказав:

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

Expand  

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

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

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


  В 05.08.2018 в 09:15, 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;
  }
    ///////////////////////////       

Expand  

Тогда уж так

		$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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.