Jump to content
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.


  • Similar Content

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


      Экспорт корзины/заказов в Excel
      В административной панели сайта - экспорт выбранных заказов в один файл .XLSX
      Экспорт корзины клиента (в любом месте шаблона), а так же экспорт заказа из личного кабинета интернет-магазина.
      Подойдет для генерирования коммерческого предложения.
       
      Модуль не зависит от используемого шаблона и работает со всеми популярными модулями оформления заказа. 
       
      УСТАНОВКА
      Установите библиотеку PHPExcel как обычный модуль Установите модуль для Вашей версии Opencart Активируйте в списке модулей и произведите необходимую настройку модуля. Добавьте вывод модуля в нужный в макет корзины, либо в макет отображения заказа в личном кабинете. Обновите кэш модификаторов По результатам работы модуля, пожалуйста, напишите отзыв.  
      ДЕМО
      OPENCART 3 / OCSTORE 3
      OPENCART 2.3 / OCSTORE 2.3
      Логин: demo
      Пароль: demo
       
      РАЗВИТИЕ МОДУЛЯ
      Если у вас есть идея, либо необходимость дополнительного функционала - смело пишите в личные сообщения. Если функционал покажется мне интересным, он будет добавлен в следующей версии модуля. Если модуль приобретается с дополнительными опциями - новые функции появляются значительно быстрее (больше кофе - меньше сна! Заряди разработчика по полной).
       
      ПОДДЕРЖКА
      Поддержка в личных сообщениях и в комментариях в соответствующей теме на форуме. 
      Если у Вас не получилось установить модуль, либо он работает не корректно, пожалуйста, прежде чем оставить отзыв модулю - напишите в личные сообщения, отвечаю оперативно.
       
      ОСТАЛИСЬ ВОПРОСЫ?
      Напишите в личные сообщения.
      Добавил matroskin92 Добавлено 07.03.2019 Категория Обмен данными Системные требования Сайт разработчика matro.site Старая цена 590 Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3 ocStore 3.0
      2.3 OpenCart.Pro, ocShop Opencart.pro 2.3 Обращение к серверу разработчика Нет  
    • By Valery332
      Доброго времени суток. Я вывел корзину в модальном окне при добавлении в нее товаров, но в контроллере корзины есть такой фрагмент кода, который при изменении кол-ва товара редиректит на страницу корзины. Если просто удаляю редирект, то после нажатия меня перебрасывает на url: 'index.php?route=checkout/cart/edit', из common.js Как сделать что-бы пользователь оставался на той-же странице где он вызывает модальное окно корзины, в идеале без перезагрузки страницы?
       
      catalog/controller/checkout/cart.php
      // update
       $this->response->redirect($this->url->link('checkout/cart'));
       
      catalog/view/javascript/common.js
      'update': function(key, quantity) {
              $.ajax({
                  url: 'index.php?route=checkout/cart/edit',
    • By YoshiAdw
      Всем привет, знает ли кто модуль на 3 opencart, который в корзине выводит общую сумму скидки? Например человек покупает два товара по 1000р на которые скидка 200р, то есть сумма скидки (его экономия) 400 рублей, и вот ищу модуль которые может вывести подобное в корзину
       
      UPD: А если он еще и две цены будет в корзину выводить (акционную и обычную, как в товаре) то вообще идеально
    • By seregakot1994
      Всем привет. Очень прошу помочь разобраться в проблеме при оформлении заказа, а именно при процедуре способа оплаты. Не могу понять в чем дело. Заранее спасибо! 

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


      Всплывающая корзина PRO
      ❖ ОПИСАНИЕ
      Модуль - всплывающая корзина. Этот модуль обеспечивает быстрый и комфортный доступ к корзине покупок. Большая и расширенная система настроек делают этот модуль абсолютно уникальным и гибким для каждого магазина.
       
      ❖ DEMO САЙТ
      Админка: demo / demo | Смотреть
      Каталог: Смотреть
       
      ❖ СОВМЕСТИМОСТЬ С OPENCART
      ❏ 2.0.0.0, 2.0.1.0, 2.0.1.1, 2.0.2.0, 2.0.3.1, 2.1.0.1, 2.1.0.2, 2.2.0.0, 2.3.0.2, 3.0.0.0, 3.0.1.1, 3.0.1.2, 3.0.2.0
       
      ❖ СОВМЕСТИМОСТЬ С OCSTORE
      ❏ 2.1.0.1, 2.1.0.1.1, 2.1.0.2, 2.1.0.2.1, 2.3.0.2, 2.3.0.2.1, 2.3.0.2.2, 2.3.0.2.3
       
      ❖ ВСТРОЕННЫЙ ПЕРЕВОД
      Украинский, Русский, Английский
       
      ❖ ДРУГИЕ МОДУЛИ ИЗ ЭТОЙ КОЛЛЕКЦИИ
      ❏ Всплывающая корзина PRO+

      ❖ ПРЕДПРОСМОТР

       
      ❖ ОСНОВНЫЕ ВОЗМОЖНОСТИ

       
      ❖ ДЕТАЛИЗИРОВАННЫЙ СПИСОК ВОЗМОЖНОСТЕЙ
      ❏ Модуль работает во всплывающем окне.
      ☒ Вы можете выбрать опции продукта, прежде чем добавлять их в корзину.
      ☒ Вы можете минимизировать JS-файл модуля (низкий и средний уровни).
      ☒ Вы можете восстановить ранее сохраненные продукты во всплывающем окне.
      ☒ Вы можете изменить содержимое блока Totals во всплывающем окне.
      ❏ Вы можете выбрать некоторые параметры продукта, что отображаются в всплывающем окне.
      ☒ Вы можете редактировать и восстанавливать CSS файлы модуля.
      ❏ Живая обработка (через Ajax).
      ❏ Многоязычная поддержка.
      ❏ Поддержка нескольких магазинов.
      ❏ Вы можете настраивать текстовые данные модуля.
      ❏ Вы можете переключать RTL или LTR текстовое направление в модуле.
      ❏ Вы можете выбрать с какой группой клиентов следует работать модулю.
      ❏ Вы можете настройте фон для модуля.
      ☒ Вы можете настроить эффекты анимации для модуля.
      ❏ Вы можете отображать блоки: купон, подарочный сертификат, бонусы, расчет доставки.
      ❏ Простая установка по OCmod.
      ❏ Дружелюбный для мобильных устройств.
      ☒ Функция «Сохранить продукты» на E-mail пользователя. Данные автоматически сохраняются в БД магазина. Вы можете увидеть эту информацию.
      ❏ Карусель для Up-sell и Cross-sell товаров.
      ❏ Вы можете выбирать товары для Cross-sell из: категорий, брендов или вручную из продуктов.
      ❏ Вы можете выбирать товары Up-sell.
      ❏ Вы можете создать свои собственные html шаблоны для e-mail уведомлений.
      ❏ Вы можете сохранить и восстановить настройки модуля.
      ❏ Модуль требует активацию лицензии.
      [NEW] в версии 1.0.3
      ❏ защита от спама Google reCAPTCHA v2 только для функций Сохранения товаров.
      ☒ - функциональные возможности модуля, которые отмеченные этим знаком доступны только для версии модуля PRO+.
       
      ❖ СИСТЕМНЫЕ ТРЕБОВАНИЯ
      ❏ Перед покупкой, пожалуйста воспользуйтесь бесплатной утилитой "Проверка совместимости системы", для проверки совместимости вашей системы с требованиями модуля.
      ❏ PHP: >= 5.6.
      ❏ Установленная cURL библиотека.
      ❏ Установленный ionCube Loader v10.2.
      ❏ Модуль работает и на localhost, но требует активного подключения к Интернет.
       
      ❖ ПОДДЕРЖКА
      ❏ Пожалуйста, используйте мою службу поддержки, чтобы запросить помощь или сообщить о ошибке.
      ❏ Пожалуйста, не используйте комментарии для сообщений об ошибках.
      ❏ Техническая поддержка предоставляется бесплатно. Обратите внимание, что платная техническая поддержка выполняется в случаях, когда существует конфликт с внешними модулями/продуктами/шаблонами. Пожалуйста, примите это с пониманием того, что разработчик не может сделать собственный модуль на 100% совместимым со всеми внешними расширениями. Вот почему в некоторых случаях необходимо адаптировать модуль к нестандартной конфигурации и системным настройкам магазина. Поэтому решение таких проблем будет оплачиваться отдельно от стоимости модуля.
       
      ❖ ЛИЦЕНЗИЯ
      ❏ Вы можете использовать модуль только на одном своем домене (например http://site.com), а также на под доменах этого домена (например http://test.site.com или http://site.com/test/).
      ❏ Вы не можете продавать или перепродавать этот модуль без письменного разрешения от автора (OCdevWizard).
      ❏ Вы не можете давать в качестве подарка или распространять этот модуль без письменного разрешения от автора (OCdevWizard).
      ❏ Вы не можете представлять этот модуль как ваш собственный. Пожалуйста уважайте время и труд, которое автор потратил на создание этого модуля.
      ❏ Вы не можете удалять копирайт из файлов модуля от автора (OCdevWizard).
      ❏ Вы должны использовать мою службу поддержки для активации лицензии модуля.
       
      ❖ НЕСОВМЕСТИМЫЕ МОДУЛИ (НЕ ВЕСЬ СПИСОК)
      ❏ Mijoshop, Aceshop
      Добавил OCdevWizard Добавлено 13.03.2018 Категория Модули Системные требования PHP >=5.6; Mysqli; cURL; IonCube Loader v10.2 Сайт разработчика http://ocdevwizard.com/ Старая цена 1200 Метод активации По запросу в ЛС Ioncube Loader Требуется OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Не проверялось Обращение к серверу разработчика Да  
  • 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.