Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


 Поделиться

Рекомендованные сообщения

Добрый день

 

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

Пробовал сделать это через модификацию файла /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

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


document.getElementById('stockss')

Это - поле ввода <input>?

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

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

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


  • 1 год спустя...
Ссылка на комментарий
Поделиться на других сайтах


Открываем файл: 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'];
}
Изменено пользователем mpn2005
Ссылка на комментарий
Поделиться на других сайтах

  • 3 недели спустя...
  • 3 недели спустя...

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

Огромное Вам спасибо. 

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

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

if (и какое условие?) {
  echo 'ошибка';
}
Что бы когда покупатель пытался добавить товар (больше чем есть в наличии) ему выдавалось сообщение "ошибка".
И ещё раз огромное спасибо!
Изменено пользователем penguin
Ссылка на комментарий
Поделиться на других сайтах


  • 3 недели спустя...

Спасибо за способ. Но у меня из-за этого возникла проблема редактирования заказов в админке. Товары появлялись на пол секунды, затем пропадали. Если на складе был всего 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'];
}
Ссылка на комментарий
Поделиться на других сайтах


  • 4 месяца спустя...

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

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

 

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

 

Спасибо!

Изменено пользователем sherbakoff
Ссылка на комментарий
Поделиться на других сайтах


На морде шикарно работает, а в админке начинаются глюки. Например, было 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');
Ссылка на комментарий
Поделиться на других сайтах

 

Можно.

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

 

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

Спасибо!

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


  • 6 месяцев спустя...

 

Можно.

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

 

в 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 шт товара. Даже если уменьшить количество до достаточного в наличии и попытаться добавить в корзину, то всё равно ничего не происходит! 

 

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

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


  • 5 месяцев спустя...

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

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

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

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

 

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

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


  • 5 месяцев спустя...
В 20.04.2017 в 00:26, mpn2005 сказал:

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

 

catalog/controller/api/cart.php

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

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


  • 11 месяцев спустя...
В 12.10.2017 в 12:40, devig сказал:

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

 

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

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


  • 2 года спустя...

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

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


  • 9 месяцев спустя...

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

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


Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

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

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