Перейти к содержанию
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');
        }

Изменено пользователем 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 но все равно выходит абракадабра (

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


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

ОНО?

в данном случае категория насосы имеет 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

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


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

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

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

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

Изменено пользователем munhgauzen

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


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

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

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

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

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

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

Войти

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

Войти

  • Последние посетители   0 пользователей онлайн

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

×

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

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