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

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


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

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


  • 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'];
}
Змінено користувачем mpn2005
Надіслати
Поділитися на інших сайтах

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

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

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

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

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

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


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


  • 4 months later...

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

 

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

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


  • 5 months later...
  • 5 months later...
  • 11 months later...
  • 2 years later...

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

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


  • 9 months later...

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

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


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.