Jump to content
Sign in to follow this  
wasia

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

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

Share this post


Link to post
Share on other sites

document.getElementById('stockss')

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Открываем файл: 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

Share this post


Link to post
Share on other sites

mpn2005, спасибо. Это для ОС 1.5.6.4 или 2.х тоже подойдет?

Share this post


Link to post
Share on other sites

mpn2005, спасибо. Это для ОС 1.5.6.4 или 2.х тоже подойдет?

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

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

 

Спасибо!

Edited by sherbakoff

Share this post


Link to post
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');

Share this post


Link to post
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');

Спасибо!

Share this post


Link to post
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');

 

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

 

catalog/controller/api/cart.php

Share this post


Link to post
Share on other sites
В 20.04.2017 в 00:26, mpn2005 сказал:

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

 

catalog/controller/api/cart.php

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

Share this post


Link to post
Share on other sites
В 12.10.2017 в 12:40, devig сказал:

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By Teron
      300.00 руб
      Скачать/Купить дополнение


      Скидки в корзине от суммы и количества
      Модуль предоставляет возможность установить следующие скидки:

      1. Скидка в % от определенной суммы товаров в корзине.

      2. Скидка в % от количества товаров в корзине, скидка применяется (на выбор):
      * к самому дешевому товару в корзине
      * к самому дорогому товару в корзине
      * к сумме товаров в корзине

      3. Скидка в % от количества товаров из одной категории в корзине, скидка применяется (на выбор):
      * к самому дешевому товару в корзине
      * к самому дорогому товару в корзине
      * к сумме товаров в корзине

      Дополнительные возможности
      1. Модуль игнорирует товары, на которые уже действует скидка, например акции, позволяя избежать суммирования скидок.

      2. Возможность выбора приоритета скидок, например, если совпадают одновременно условия скидки от суммы товаров в корзине и скидки от количества товаров, сработает только одна из скидок, приоритет которой выбран в настройках модуля, позволяя избежать суммирования скидок.

      3. Возможность выбора групп покупателей, для которых будут доступны скидки.

      4. Скидки рассчитываются только на основании стоимости товаров, стоимость доставки и прочие наценки на сумму скидки не влияют.

      Совместим с simplecheckout.

      Демо
      Сайт: http://demo1.myocart.ru
      Админка: http://demo1.myocart.ru/admin
      логин: demo
      пароль: demo
      Добавил Teron Добавлено 28.09.2020 Категория Учет в заказе Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3 ocStore 3.0
      2.3 OpenCart.Pro, ocShop Обращение к серверу разработчика Нет Старая цена 0  
    • By matroskin92
      В административной панели сайта - экспорт выбранных заказов в один файл .XLSX
      Экспорт корзины клиента (в любом месте шаблона), а так же экспорт заказа из личного кабинета интернет-магазина
      Отправка корзины в формате .XLSX при создании заказа определенному Вами списку email-адресов
      Подойдет для генерирования коммерческого предложения.
       
      Модуль не зависит от используемого шаблона и работает со всеми популярными модулями оформления заказа. 
       
      ЧТО МОЖНО ВЫВЕСТИ ПО ТОВАРУ
      Название Описание Теги Изображения Модель (Код) Артикул Вес Количество Цена Стоимость Атрибуты (в рамках доработки еще все-что угодно, пишите)  
      ДОПОЛНИТЕЛЬНО
      Контактные данные магазина Итоговые данные (сумма, купон, доставка и т.д.) Строка с замечаниями (заметками)  
      КРОМЕ ЭТОГО МОЖНО
      Настроить отправку заказов в формате XLSX заданному списку email Раскрасить в дополнительный цвет ячейку с данными, если в ней содержится любое из ключевых слов  
      ЭКСПОРТ ЗАКАЗОВ
      Возможен одного заказа, так и нескольких (с объединением или нет) одинаковых товаров Как в административной панели, так и в корзине или на странице заказа в личном кабинете пользователя  
      ОФОРМЛЕНИЕ EXCEL-ЛИСТА ПОД СТИЛЬ МАГАЗИНА
      Гибкое оформление данных с выводом логотипа  
      ПРОСТАЯ УСТАНОВКА
      Установите библиотеку PHPExcel как обычный модуль Установите модуль для Вашей версии Opencart Активируйте в списке модулей и произведите необходимую настройку модуля. Добавьте вывод модуля в нужный в макет корзины, либо в макет отображения заказа в личном кабинете. Обновите кэш модификаторов По результатам работы модуля, пожалуйста, напишите отзыв.  
      ДЕМО
      OPENCART 3 / OCSTORE 3
      OPENCART 2.3 / OCSTORE 2.3
      Логин: demo
      Пароль: demo
       
      ДОРАБОТКИ ПОД ВАШИ ТРЕБОВАНИЯ
      За дополнительную плату модуль можно доработать до ваших требований выгрузки заказов (корзины).
       
      ПОДДЕРЖКА
      Техническая поддержка по электронной почте [email protected]
       
      ОСТАЛИСЬ ВОПРОСЫ?
      Напишите в личные сообщения.
    • By matroskin92
      990.00 руб
      Скачать/Купить дополнение


      Экспорт корзины/заказов в Excel
      В административной панели сайта - экспорт выбранных заказов в один файл .XLSX
      Экспорт корзины клиента (в любом месте шаблона), а так же экспорт заказа из личного кабинета интернет-магазина
      Отправка корзины в формате .XLSX при создании заказа определенному Вами списку email-адресов
      Подойдет для генерирования коммерческого предложения.
       
      Модуль не зависит от используемого шаблона и работает со всеми популярными модулями оформления заказа. 
       
      ЧТО МОЖНО ВЫВЕСТИ ПО ТОВАРУ
      Название Описание Теги Изображения Модель (Код) Артикул Вес Количество Цена Стоимость Атрибуты (в рамках доработки еще все-что угодно, пишите)  
      ДОПОЛНИТЕЛЬНО
      Контактные данные магазина Итоговые данные (сумма, купон, доставка и т.д.) Строка с замечаниями (заметками)  
      КРОМЕ ЭТОГО МОЖНО
      Настроить отправку заказов в формате XLSX заданному списку email Раскрасить в дополнительный цвет ячейку с данными, если в ней содержится любое из ключевых слов  
      ЭКСПОРТ ЗАКАЗОВ
      Возможен одного заказа, так и нескольких (с объединением или нет) одинаковых товаров Как в административной панели, так и в корзине или на странице заказа в личном кабинете пользователя  
      ОФОРМЛЕНИЕ EXCEL-ЛИСТА ПОД СТИЛЬ МАГАЗИНА
      Гибкое оформление данных с выводом логотипа  
      ПРОСТАЯ УСТАНОВКА
      Установите библиотеку PHPExcel как обычный модуль Установите модуль для Вашей версии Opencart Активируйте в списке модулей и произведите необходимую настройку модуля. Добавьте вывод модуля в нужный в макет корзины, либо в макет отображения заказа в личном кабинете. Обновите кэш модификаторов По результатам работы модуля, пожалуйста, напишите отзыв.  
      ДЕМО
      OPENCART 3 / OCSTORE 3
      OPENCART 2.3 / OCSTORE 2.3
      Логин: demo
      Пароль: demo
       
      ДОРАБОТКИ ПОД ВАШИ ТРЕБОВАНИЯ
      За дополнительную плату модуль можно доработать до ваших требований выгрузки заказов (корзины).
       
      ПОДДЕРЖКА
      Техническая поддержка по электронной почте [email protected]
       
      ОСТАЛИСЬ ВОПРОСЫ?
      Напишите в личные сообщения.
      Добавил matroskin92 Добавлено 07.03.2019 Категория Обмен данными Системные требования PHPExcel Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3 ocStore 3.0
      2.3 OpenCart.Pro, ocShop Opencart.pro 2.3 Обращение к серверу разработчика Нет Старая цена 0  
    • By RimskayaDaria
      Нужен специалист для долгосрочного сотрудничества по доработкам сайта hobby-idea.ru
       
      Сейчас нужно: Настройка ландшафта (прод, тест, резервная копия)
      1. Настроить купленный шаблон дизайна:
      -Добавить больше кнопок социальных сетей в подвале
      -Добавить фильтр по цвету (на товаре добавить атрибут «ближайший цвет»)
      -Настроить кросс-фильтры (не только переключение между категориями)
      -Настроить визуальную часть всплывающей части меню «бренды»
       
      2. Настроить купленный модуль корзины и доставок:
      -Настройка модуля корзины (модуль уже оплачен и установлен)
      -Настройка способов оплаты -Настройка подбора спобова доставки
      -Настройка возможности покупки товаров за балы или бесплатных товаров
       
      3. Настройка шаблонов писем (Сами шаблоны настраивать не нужно, нужно показать, где это делать)
       
      4. Интеграция с системой Мой склад (Будет проведена покупка готового конектора, по которому есть тех поддержка)
       
      5. Подключить https
       
      Прошу в ответе прислать: 1. Приблизительную оценку стоимости работ по описанным пунктам 2. Ссылки на сайты со сложной системой фильтров для поиска товаров, которые Вы настраивали 3. Подтвердить готовность выполнить все работы в ноябре 4. Подтвердить готовность работать по договору с закрывающими документами
       
      Выбор исполнителя планируется провести до 2 ноября. Спасибо!
       
      Мои контакты [email protected]
    • By DontCallMeSerg
      Пропали заголовки спойлеров. Не знаю в чем заключается проблема, возможно конфликтует с каким либо модулем?
      эта проблема только в корзине, в оформлении заказа, сайт master-parts.by
      Установленная тема - Nou
      Установлена давно и с ней проблем не было.
       
  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.