[Решено] Запрет заказывать больше чем есть в наличии

Тема в разделе "OpenCart", создана пользователем skiv14, 9 янв 2016.

  1. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Зависит от вашего шаблона. Надо на сайт посмотреть.
     
  2. Krikona

    Krikona

    Регистрация:
    31 мар 2017
    Сообщения:
    3
    Симпатии:
    0
    У меня шаблон Journal, но я думаю, что смогу адаптировать под свой шаблон решение для стандартной темы opencart. На сайте у меня получилось сделать только так: благодаря вам в корзину сейчас не добавляется товар больше остатков, но уведомление о нехватке вылезает только если попробовать разом добавить больше, чем есть. К примеру, если есть 10 шт, то при попытке добавить в корзину более 10 снизу появится ошибка о нехватке, а если сначала добавить 6 шт, а потом попытаться закинуть в корзину еще 5 шт, то эти 5 не добавятся, но и ошибка не появится. Поэтому понимаю, что сама я вывод ошибки настроила не очень хороший. Вот сайт, этого товара в наличии 30 шт: https://elloi.ru/podhvaty-dlya-shtor/podhvat-dlya-shtor-bubency-01
     
  3. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Я думаю, проще всего будет просто переименовать в контроллере
    PHP:
    $json['error']['stock']
    на
    PHP:
    $json['error']['quantity']
    Тогда js на странице сам подхватит сообщение об ошибке.
     
  4. Krikona

    Krikona

    Регистрация:
    31 мар 2017
    Сообщения:
    3
    Симпатии:
    0
    Так просто оказалось. Сама бы я не догадалась :Blush: Спасибо огромнейшее, теперь все работает как надо!
     
  5. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    900
    Симпатии:
    218
    Покажите что у кого получилось)
    может себе заделаю.
     
  6. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Выше же есть ссылка от Krikona.
     
  7. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    900
    Симпатии:
    218
    И так залил себе. Кнопка если число больше наличия - блокируется, но сообщение о ошибке не вызывает. Как делали его?


    --- Добавлено, 2 апр 2018 ---
    Или я как всегда не так читаю)
    файл /system/library/cart.php, добавляем это:

    PHP:
    public function checkStock($product_id$qty){
        
    $canAdd true;
        
    $count 0;
        
    $cartProducts $this->getProducts();
     
        if(!empty(
    $cartProducts)){
            
    $products_ids = array();

            foreach (
    $cartProducts as $pData) {
                if(isset(
    $products_ids[$pData['product_id']])){
                    
    $products_ids[$pData['product_id']] += (int)$pData['quantity'];
                } else {
                    
    $products_ids[$pData['product_id']] = (int)$pData['quantity'];
                }
            }

            if(isset(
    $products_ids[$product_id])){
                
    $count $products_ids[$product_id];
            }
        }

        
    $stock $this->db->query("SELECT quantity FROM " DB_PREFIX "product p
                        WHERE p.product_id = '" 
    . (int)$product_id "'
                        AND p.date_available <= NOW() AND p.status = '1'"
    )->row;

        if(
    $stock['quantity'] - $count $qty 0){
            
    $canAdd false;
        }

        return 
    $canAdd;
    }
    Файл /catalog/controller/checkout/cart.php, метод add, перед
    PHP:
    if (!$json) {
                    
    $this->cart->add($this->request->post['product_id'], $quantity$option$profile_id);
    вставляем и получаем:
    PHP:
    $canAdd $this->cart->checkStock($this->request->post['product_id'], $quantity);
                if(!
    $canAdd){
                
    $json['error']['quantity'] = 'Error message';
                }
               
                if (!
    $json) {
                    
    $this->cart->add($this->request->post['product_id'], $quantity$option$profile_id);
    --- Добавлено, 2 апр 2018 ---
    Или этого не достаточно для вывода ошибки и нужно еще прописать в языковых файлах?
     
    Последнее редактирование: 2 апр 2018
  8. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Всё дело в шаблоне - этот шаблон не предполагает ошибок количества, поэтому они не подхватываются. Надо код вручную добавить.

    В шаблоне страницы товара внутри блока
    Код:
    $('#button-cart').bind('click', function() {
    после
    Код:
    if (json['error']) {
    добавить
    Код:
    if (json['error']['quantity']) {
        $('#notification').html('<div class="error">' + json['error']['quantity'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>');
    }
    И надо будет ещё над стилями поработать, а то это сообщение шапкой почти полностью накрывается.
     
  9. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    900
    Симпатии:
    218
    показывает в хедере
    Error message[​IMG]

    Это должно показывать сообщение?

    внес если кому интересно этот кусок кода в
    Код:
    catalog/view/theme/default/template/product/product.tpl
    --- Добавлено, 4 апр 2018 ---
    Получается нужно прописать для <div id="notification"><div class="error">Error message<img src="catalog/view/theme/default/image/close.png" alt="" class="close"></div></div> что бы его сместить? Или он задействуется еще где-то?
     
  10. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Что в контроллере забито, то и показывает:
    PHP:
    $json['error']['quantity'] = 'Error message';
    Это ж был просто пример. А дальше уже надо в языковой файл добавить нужный текст и подставить его в контроллере вместо заглушки из примера.
     
  11. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    900
    Симпатии:
    218
    Вносить к примеру
    Код:
    $_['quantity_error']       = 'К сожалению, к покупке доступно только: %S';
    в языковый файл cart или же продукт?

    И тогда 'Error message'; заменяем на quantity_error?
     
  12. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    В языковой файл соответствующего контроллера. Всегда вносится или в языковой файл текущего контроллера или в базовый языковой файл!
    Но %s чтоб работало, нужно ещё в контроллере поработать (и в нижнем регистре писать надо).
     
  13. max307

    max307

    Регистрация:
    20 фев 2015
    Сообщения:
    1
    Симпатии:
    0
    А как это сделать для опций?
    У меня тоже шаблон Journal
    --- Добавлено, 15 июл 2018 ---
    Opencart 2.3
     
  14. Андррей

    Андррей

    Регистрация:
    21 авг 2018
    Сообщения:
    17
    Симпатии:
    0
    Здравствуйте. Во первых, спасибо за тему!!!! Все получилось кроме вывода сообщения об превышении количества товара, кнопка купить срабатывает на максимально возможное количество товара на складе. Версия опенкарт 1.5.5.1.2. Подскажите если тема еще поддерживается. Спасибо.
     
  15. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Всё зависит от шаблона, надо смотреть сайт вживую.
     
  16. Андррей

    Андррей

    Регистрация:
    21 авг 2018
    Сообщения:
    17
    Симпатии:
    0
    Адрес сайта http://champion-sport.ru/ Все перечисленные операции проводил на локальном хосте. На рабочем сайте изменений не вносил. Если это необходимо то сделаю.
     
  17. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Делайте.
    И дайте потом ссылку на товар, где маленькое наличие.
     
  18. Андррей

    Андррей

    Регистрация:
    21 авг 2018
    Сообщения:
    17
    Симпатии:
    0
    На рабочем хостинге сообщение появилось в правом верхнем углу. В нужное для меня место, я так понимаю, нужно стилями ставить? Ссылка http://champion-sport.ru/100%-gold-standard-casein-(909-г).html
    --- Добавлено, 22 авг 2018 ---
    Не срабатывает заглушка в языковом файле контроллера.
     
  19. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Да.

    Вы уверены, что в правильный файл добавили?
     
  20. Андррей

    Андррей

    Регистрация:
    21 авг 2018
    Сообщения:
    17
    Симпатии:
    0
    Добавил сюда в раздел //Error \catalog\language\russian\checkout\cart.php
    Да, и крестик закрывающий сообщение ('<img src="catalog/view/theme/default/image/close.png" alt="" class="close" />) не срабатывает. Получается вообще его убрать надо.