Jump to content
покупайте без комиссии
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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


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

Edited by munhgauzen
Link to post
Share on other sites

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

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

Link to post
Share on other sites
13 минут назад, munhgauzen сказал:

2.1

В catalog/model/shipping/free.php

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

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

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

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

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

 

Link to post
Share on other sites

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

 

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

Edited by munhgauzen
Link to post
Share on other sites

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

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

 

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

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

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

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

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

Link to post
Share on other sites

сори не посмотрел что каткгории обозначаются id но все равно выходит абракадабра (

Link to post
Share on other sites

ОНО?

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

Edited by munhgauzen
попытка 3
Link to post
Share on other sites

мне кажется вам надо хоть книжку почитать какую-нибудь.

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

Link to post
Share on other sites
1 минуту назад, nikifalex сказал:

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

 

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

 

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

!$categories == 20

 

Link to post
Share on other sites

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

Link to post
Share on other sites

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
Link to post
Share on other sites
1 час назад, mazein сказал:

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

ага

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

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

 

Link to post
Share on other sites

спасибо Gaziz .

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

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

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

 

Link to post
Share on other sites

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

спасибо Gaziz .

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

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

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

 

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

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

Link to post
Share on other sites
1 час назад, Gaziz сказал:

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

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

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

$status = false;
Link to post
Share on other sites

  /*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
Link to post
Share on other sites

Спасибо Gaziz

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

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

Link to post
Share on other sites

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

Спасибо Gaziz

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

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

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

foreach($products as $product) {

}

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

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

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

 

  • +1 1
Link to post
Share on other sites

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

Link to post
Share on other sites

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
Link to post
Share on other sites
  • 1 month later...

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

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

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

Edited by munhgauzen
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

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.