Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


 Погделиться

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

Добрый гдень

 

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

Пропотому чтовал сгделать это через модификацию файла /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 и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.