Как сделать чтобы 0 опций на складе нельзя было купить?

Тема в разделе "Общие вопросы", создана пользователем VIk, 18 ноя 2015.

  1. VIk

    VIk Новичок

    Сообщения:
    21
    Симпатии:
    0
    здравствуйте
    подскажите, вот допустим у меня в карточке товара есть несколько объемов - 10 20 50 100мл
    в админке в опции карточки товара напротив 50мл стоит количество 0, но выбрать его и добавить в корзину все равно можно - только добавляется с ценой 0.
    Как сделать так, чтобы товары, у которых остаток 0 становились невозможными к покупке или данный объем вообще исчезал? (нежелательный вариант, но вариант).
     
  2. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    Если что, к дизайну ваша тема никак не относится..

    это что то новое.. Мне кажется вы что то напортачили.

    так у товара или у опции?
     
  3. VIk

    VIk Новичок

    Сообщения:
    21
    Симпатии:
    0
    у опции.
    у товара количество 100, опций в товаре несколько, у каких-то стоит количество 100, т.к. есть, у некоторых стоит 0, т.к. нет в наличии.
    возможно как-то сделать невозможность добавления опции товара в корзину, у которой 0 в остатке?

    возможно и напортачил, здесь изменена система добавления товара в корзину, которая обсуждается много где - в общем реализовано добавление товару опций, у которых могут быть разные цены и в корзину они добавляются без плюсования или минусования.
     
  4. Vlad

    Vlad Эксперт

    Сообщения:
    4.128
    Симпатии:
    999
    скрывайте опцию в зависимости от кол-ва или делайте readonly через свойства элемента
    Количество опций спокойно есть в массиве опций, см. контроллер товара.
     
  5. kurs

    kurs Пользователь

    Сообщения:
    67
    Симпатии:
    4
    Влад, а можно пожалуйста чуть поподробнее, а то очень животрепещущая тема..

    У меня опции в виде переключателя, тоже не смотря на количество товара в самой опции = 0, все равно разрешает добавлять товар в корзину и только на последних этапах оформления сообщает, типо извиняй товарищ, нет товара :) как-то не очень вариант..

    Хотелось бы не скрывать радио кнопки, дабы покупатель видел, что товар бывает в наличии, а именно блокировать, если количество =0.
    И было бы просто роскошно сделать всплывающий тайтл на заблокированной кнопке = "временно нет в наличии".
    Подсоби как обычно, куда лезть, где копаться, чего писать ))
     
  6. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Делал что-то аналогичное пару дней назад для ver.1.5
    Вот код для ver.2.X вдруг поможет.

    1. В /catalog/controller/product/product.php
    Находите вот этот кусок:
    PHP:
    $product_option_value_data[] = array(
                                
    'product_option_value_id' => $option_value['product_option_value_id'],
                                
    'option_value_id'         => $option_value['option_value_id'],
                                
    'name'                    => $option_value['name'],
                                
    'image'                   => $this->model_tool_image->resize($option_value['image'], 5050),
                                
    'price'                   => $price,
                                
    'price_prefix'            => $option_value['price_prefix']
                            );
    И в него добавляете во внутрь:
    PHP:
    'quantity'                    => $option_value['quantity'],
    2. В /catalog/view/theme/ВАША_ТЕМА/template/product/product.tpl
    Находите:
    PHP:
    <?php if ($option['type'] == 'radio') { ?>
        <div class="form-group<?php echo ($option['required'] ? ' required' ''); ?>">
            <label class="control-label"><?php echo $option['name']; ?></label>
            <div id="input-option<?php echo $option['product_option_id']; ?>">
                <?php foreach ($option['product_option_value'] as $option_value) { ?>
                    <div class="radio">
                        <label>
                            <input type="radio" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option_value['product_option_value_id']; ?>" />
                            <?php echo $option_value['name']; ?>
                            <?php if ($option_value['price']) { ?>
                                (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
                            <?php ?>
                        </label>
                    </div>
                <?php ?>
            </div>
        </div>
    <?php ?>    
    Заменить на:
    PHP:
    <?php if ($option['type'] == 'radio') { ?>
        <div class="form-group<?php echo ($option['required'] ? ' required' ''); ?>">
            <label class="control-label"><?php echo $option['name']; ?></label>
            <div id="input-option<?php echo $option['product_option_id']; ?>">
                <?php foreach ($option['product_option_value'] as $option_value) { ?>
                    <?php if($option_value['quantity'] == "0") {  ?>
                        <div class="radio">
                            <label>
                                <input type="radio" title="Нет в наличии" disabled="disabled" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option_value['product_option_value_id']; ?>" />
                                <?php echo $option_value['name']; ?> - <span style="color:#ff0000">Нет в наличии</span>
                            </label>
                        </div>
                    <?php } else { ?>
                        <div class="radio">
                            <label>
                                <input type="radio" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option_value['product_option_value_id']; ?>" />
                                <?php echo $option_value['name']; ?>
                                <?php if ($option_value['price']) { ?>
                                    (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
                                <?php ?>
                            </label>
                        </div>
                    <?php ?>
                <?php ?>
            </div>
        </div>
    <?php ?>    
    В итоге у Вас будет в опциях для "Radio"
    Если количество равно 0 то:
    Заблокир. Переключатель_Название опции - Нет в наличии
    Иначе
    Включенный Переключатель_Название опции (Цена)
     
    Последнее редактирование: 29 июл 2016
    tsvirov, Romans и Vlad нравится это.
  7. kurs

    kurs Пользователь

    Сообщения:
    67
    Симпатии:
    4
    Вообще шикарно) Спасибо большое, завтра буду копаться, думаю код отлично пойдет, ибо версия как раз 2.0.3 :)
     
  8. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Если вдруг возникнет вопрос реализации для чекбоксов, то возможно. Главное посмотрите как реализовано и потом по аналогии можно сделать.
     
  9. kurs

    kurs Пользователь

    Сообщения:
    67
    Симпатии:
    4
    А кстати, а что происходит если допустим количество в наличии 3 шт, в настройках стоит галка вычитать со склада, а клиент сразу пытается заказать 4?
     
  10. kurs

    kurs Пользователь

    Сообщения:
    67
    Симпатии:
    4
    К сожалению как-то не совсем все успешно..
    .
    А 365 строка это
    Код:
    'value'                => $option['value'],
    в блоке
    Код:
    $data['options'][] = array(
    'product_option_id'    => $option['product_option_id'],
    'product_option_value' => $product_option_value_data,
    'option_id'            => $option['option_id'],
    'name'                 => $option['name'],
    'type'                 => $option['type'],
    'value'                => $option['value'],
    'required'             => $option['required']
    );
     
    Последнее редактирование: 15 дек 2015
  11. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    В корзине будет выводится сообщение "Товары отмеченные *** отсутствуют в нужном количестве или их нет на складе!"

    Пришлите файл. Гляну что не так.

    Проверьте, возможно вы вставили
    PHP:
    'quantity'                    => $option_value['quantity'],
    между
    PHP:
    'price_prefix'            => $option_value['price_prefix']
                            );
    Тогда у вас должно получиться так
    PHP:
    'price_prefix'            => $option_value['price_prefix'],
    'quantity'                    => $option_value['quantity']
                            );
     
    Последнее редактирование: 15 дек 2015
  12. kurs

    kurs Пользователь

    Сообщения:
    67
    Симпатии:
    4
    Все верно, спасибо RoS, моя ошибка) Вставил 'quantity' в конце и в предыдущей строке прозевал запятую.
    Повторно все аккуратно добавил, все отлично работает :) Большое спасибо!
     
  13. kurs

    kurs Пользователь

    Сообщения:
    67
    Симпатии:
    4
    Приветствую! Вспомнилась старая тема..
    Подскажите пожалуйста, ранее делали, чтобы при количестве 0 и функции Вычитать со склада:Нет, радио-кнопка блокировалась и выводилось сообщение "нет в наличии", все отлично, НО! Если включаю функцию Вычитать со склада: Да, при достижении количества 0 - опция скрывается..
    Как сделать чтобы вместо скрытия, блокировалась также как при отключенной функции Вычитать со склада?
     
  14. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Здравствуйте!
    Попробуйте сделать так.
    В /catalog/controller/product/product.php
    PHP:
    if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {
    Заменить на
    PHP:
    if (!$option_value['subtract'] || ($option_value['quantity'] >= 0)) {
     
    kurs нравится это.
  15. kurs

    kurs Пользователь

    Сообщения:
    67
    Симпатии:
    4
    Большое спасибо, все работает!
     
  16. vovan_r

    vovan_r Новичок

    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте, очень помог данный совет, если можете подскажите пожалуйста что нужно прописать чтоб при значении 0, при отсутствии на складе возле опции выводилось предупреждение типо "под заказ".
     
  17. kwakin

    kwakin Пользователь

    Сообщения:
    69
    Симпатии:
    2
    а как для версии ocstore 2.3 шаблон unishop сделать ?
    может это все можно ocmod
     
    Последнее редактирование: 29 янв 2020
  18. Bkmz

    Bkmz Продвинутый пользователь

    Сообщения:
    440
    Симпатии:
    106
    аналогично, ocmod'ом делают под дефолтный шаблон,который есть у всех.
    ocmod под unishop сделает тот у кого есть шаблон unishop, и возможно, поделится с вами.

    логично?:)