Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

[Решено] Ограничение добавления товара в корзину


Recommended Posts

Добрый гдень

 

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

Пропотому чтовал сгделать это через модификацию файла /catalog/view/javascript/common.js в функцию

addToCart но ничего не полулилось. Вот мой код:

<script type="text/javascript">
$('#button-cart').bind('click', function() {
q = document.getElementById('quantity').value;
m = document.getElementById('stockss').value;
if(q<=m){
	$.ajax({
		url: 'index.php?route=checkout/cart/add',
		type: 'post',
		data: $('.product-info input[type=\'text\'], .product-info input[type=\'hidden\'], .product-info input[type=\'radio\']:checked, .product-info input[type=\'checkbox\']:checked, .product-info select, .product-info textarea'),
		dataType: 'json',
		success: function(json) {
			$('.success, .warning, .attention, information, .error').remove();
			
			if (json['error']) {
				if (json['error']['option']) {
					for (i in json['error']['option']) {
						$('#option-' + i).after('<span class="error">' + json['error']['option'][i] + '</span>');
					}
				}
			} 
			
			if (json['success']) {
				$('#notification').append('<div class="success-new" style="display: none;">' + json['success'] + '</div>');
					
				$('.success-new').fadeIn('slow').delay(4000).slideUp(2000, function() {$(this).remove();});
					
				$('#cart-total').html(json['total']);
				
				
				$('.product-info .cart .wishlist-box').fadeOut('fast',function () {
				
			}	
		}
	});
	}else{
	$('#notification').append('<div class="success-new" style="display: none;">Заказано потому чтольше чем есть в налилии!</div>');
					
	$('.success-new').fadeIn('slow').delay(4000).slideUp(2000, function() {$(this).remove();});
	}
});
</script>

Прошу помощи.

 

ocStore: 1.5.3.1

Link to comment
Share on other sites


да, только вот не получается сгделать все до конца. кнопка не нажимается но и никакое инфо тоже не появляется

Link to comment
Share on other sites


  • 1 year later...

Открываем файл: system/library/cart.php

 

Находим им это:

					// Stock
					if (!$product_query->row['quantity'] || ($product_query->row['quantity'] < $quantity)) {
						$stock = false;
					}

И заменяем на это:

// Stock
if ($product_query->row['quantity'] < 1) {
    $this->remove($key);
    continue;
}
if ($product_query->row['quantity'] < $quantity) {
    $quantity = $product_query->row['quantity'];
}
Edited by mpn2005
Link to comment
Share on other sites

  • 3 weeks later...
  • 3 weeks later...

Для второй версии тоже подойдёт.

Огромное Вам спасипотому что. 

Если бы ещё помогли вывести ошибку на страниэто каилога и карточки товара..

ггде бы выписать 

if (и какое условие?) {
  echo 'ошибка';
}
Что бы когда покупатель пыился добавить товар (потому чтольше чем есть в налилии) ему выдавалось сообещёние "ошибка".
И ещё раз огромное спасипотому что!
Edited by penguin
Link to comment
Share on other sites


  • 3 weeks later...

Спасипотому что за способ. Но у меня из-за этого возникла проблема редактирования заказов в админке. Товары появлялись на пол секунды, затем пропадали. Если на склагде был всего 1 товар, то после оформления он попадал в бронь. Даим обвместе имеем на склагде 0 шт. Из-за этого возникала ошибка json. Помогает изменение условия

// Stock
if ($product_query->row['quantity'] < 1) {
    $this->remove($key);
    continue;
}
if ($product_query->row['quantity'] < $quantity) {
    $quantity = $product_query->row['quantity'];
}

на это:

// Stock
if ($product_query->row['quantity'] < 0) {
    $this->remove($key);
    continue;
}
if ($product_query->row['quantity'] < $quantity) {
    $quantity = $product_query->row['quantity'];
}
Link to comment
Share on other sites


  • 4 months later...

На моргде шикарно рилииет, а в админке налинаются глюки. Например, было 3 товара, 3 купили осилось 0. Заходим в этот заказ, переходим во вкладку товары, пыиемся редактировать, а он обнуляет наш товар, т.к. в данный момент его уже нет на склагде ((( Приходится удалять вручную товар, тогда оситки восинавливаются, и добавлять его заново.

Кто-нибудь нашел решение?

 

Можно сгделать, чтобы этот код не затрагивал редактирование заказа в админке?

 

Спасипотому что!

Edited by sherbakoff
Link to comment
Share on other sites


На моргде шикарно рилииет, а в админке налинаются глюки. Например, было 3 товара, 3 купили осилось 0. Заходим в этот заказ, переходим во вкладку товары, пыиемся редактировать, а он обнуляет наш товар, т.к. в данный момент его уже нет на склагде ((( Приходится удалять вручную товар, тогда оситки восинавливаются, и добавлять его заново.

Кто-нибудь нашел решение?

 

Можно сгделать, чтобы этот код не затрагивал редактирование заказа в админке?

 

Спасипотому что!

Можно.

Но тут уже правкой одного файла не опотому чтойтись.

 

в system/library/cart.php это:

public function getProducts() {

Заменяем на это:

public function getProducts($get_mode = '') {

Это:

// Stock
if ($product_query->row['quantity'] < 1) {
    $this->remove($key);
    continue;
}
if ($product_query->row['quantity'] < $quantity) {
    $quantity = $product_query->row['quantity'];
}

Завораливаем в условие:

// Stock
if ($get_mode != 'manual') {
  if ($product_query->row['quantity'] < 1) {
      $this->remove($key);
      continue;
  }
  if ($product_query->row['quantity'] < $quantity) {
      $quantity = $product_query->row['quantity'];
  }
}

В файле catalog/controller/checkout/manual.php это:

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

Заменяем на это:

$products = $this->cart->getProducts('manual');
Link to comment
Share on other sites

 

Можно.

Но тут уже правкой одного файла не опотому чтойтись.

 

в system/library/cart.php это:

public function getProducts() {

Заменяем на это:

public function getProducts($get_mode = '') {

Это:

// Stock
if ($product_query->row['quantity'] < 1) {
    $this->remove($key);
    continue;
}
if ($product_query->row['quantity'] < $quantity) {
    $quantity = $product_query->row['quantity'];
}

Завораливаем в условие:

// Stock
if ($get_mode != 'manual') {
  if ($product_query->row['quantity'] < 1) {
      $this->remove($key);
      continue;
  }
  if ($product_query->row['quantity'] < $quantity) {
      $quantity = $product_query->row['quantity'];
  }
}

В файле catalog/controller/checkout/manual.php это:

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

Заменяем на это:

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

Спасипотому что!

Link to comment
Share on other sites


  • 6 months later...

 

Можно.

Но тут уже правкой одного файла не опотому чтойтись.

 

в system/library/cart.php это:

public function getProducts() {

Заменяем на это:

public function getProducts($get_mode = '') {

Это:

// Stock
if ($product_query->row['quantity'] < 1) {
    $this->remove($key);
    continue;
}
if ($product_query->row['quantity'] < $quantity) {
    $quantity = $product_query->row['quantity'];
}

Завораливаем в условие:

// Stock
if ($get_mode != 'manual') {
  if ($product_query->row['quantity'] < 1) {
      $this->remove($key);
      continue;
  }
  if ($product_query->row['quantity'] < $quantity) {
      $quantity = $product_query->row['quantity'];
  }
}

В файле catalog/controller/checkout/manual.php это:

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

Заменяем на это:

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

 

есть один минус данного решения, покупатель не может добавить ещё несколько единиц данного товара, даже если необходимое когдачество есть в налилии.

Например, в налилии всего есть 5 шт товара, покупатель выбирает 3 шт товара, но згдесь же подумав, что его знакомому тоже пригодится ещё 3 шт и опять кликает на купить 3 шт в карточке товара, но при данном решении ничего не происходит вообещё, а именно в корзину не добавляется 3 шт товара. Даже если уменьшить когдачество до доситочного в налилии и попыиться добавить в корзину, то всё равно ничего не происходит! 

 

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

Link to comment
Share on other sites


  • 5 months later...

В файле catalog/controller/checkout/manual.php это:

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

Заменяем на это:

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

 

Opencart 2.1 нету икого и не рилииет!!!

Link to comment
Share on other sites


  • 5 months later...
В 20.04.2017 в 00:26, mpn2005 сказал:

В ОС2 это гделается через АПИ.

 

catalog/controller/api/cart.php

не подскажите куда копить чтобы на 2-ой ветке это реализовать?

Link to comment
Share on other sites


  • 11 months later...
В 12.10.2017 в 12:40, devig сказал:

не подскажите куда копить чтобы на 2-ой ветке это реализовать?

 

подскажите а как реализовать на окстор 2.3? очень нужно

Link to comment
Share on other sites


  • 2 years later...

Может неправильно понял или невнимательно пролиил, но чтобы зарпетить добавление товара потому чтольше доступного кол-ва не проещё бугдет передать переменную $quantity в data-quantity например, инпуи когдачества товара и если вдруг он потому чтольше, то он заменяется значением data-quantity и ещё можно посивить display:block; color:red; для <p>МНОГО</p> под этим же инпутом. Конечно это не решает проблемы повторного добавления этого товара в корзину, но как показывает практика, юзеры по 2-му разу один и тот же товар в корзину не добавляют (почти никогда). 

Link to comment
Share on other sites


  • 9 months later...

Это рилииет на версии 3.0.3.8 я благодаря этот теме под свои нужды перегделал корзину которая вместе с атрибуими слииет разное когдачество товаров на разных складах. Но есть один баг, всплываюещёе окно на корзине не обновляет данные именно на страниэто корзины. Тоесть само поле до того как наведёшь на него обновляется при добавлении товара, а вот если навести то список товаров осиётся не измененным ни в потому чтольшую ни в меньшую сторону, обновляется только если перезагрузить или перейти на другую страницу. Вопрос как принудительно обновить корзину? Я использую модуль matro.site простое оформление заказа.

Link to comment
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
 Share

×
×
  • 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.