[Помогите] с открытием опций через onclick

Тема в разделе "OpenCart", создана пользователем etens1212, 1 июл 2016.

  1. etens1212

    etens1212

    Регистрация:
    1 май 2013
    Сообщения:
    339
    Симпатии:
    19
    Всем привет :Acute:

    У меня появилась такая задача


    вывести опции в категории и сделать кнопку, при которой они будут открываться
    это я реализовал - через:
    Код:
    <a class="button-mono" onclick="$('.options').show();"> До кошика </a>
    и появилась такая проблема
    открывает НЕ блок с настройками где нажал кнопку
    а все блоки

    как сделать, чтобы открывало только тот блок, в котором нажал кнопку?

    нажмите кнопку "До кошика"
    и вы увидите, что открывает все опции одновременно

    САЙТ
     
  2. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Конечно, все одновременно, вы же в качестве селектора используете класс.
    Вы думаете, если вы это прописали на onclick в конкретном теге, то это уже ограничивает контекст только этим тегом?

    Выкиньте onclick вообще, и добавьте на страницу такой код:

    Код:
    $(document).on('click', '.cart-button', function(e){
        e.preventDefault();
        var $context = $(this).closest('.product-block');
        $('.options', $context).show();
    });
    На ссылку "До кошика" нужно повесить класс cart-button, а на блок с товаром, на котором сейчас вообще опознавательных знаков нет, нужно повесить класс product-block.
     
    etens1212 нравится это.
  3. etens1212

    etens1212

    Регистрация:
    1 май 2013
    Сообщения:
    339
    Симпатии:
    19
    большое спасибо
    все получилось
    а можно еще поставить кнопку, которая будет закрывать?
     
  4. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Всё то же самое, только в коде замените .cart-button на класс кнопки закрытия, а show на hide.
     
    etens1212 нравится это.
  5. etens1212

    etens1212

    Регистрация:
    1 май 2013
    Сообщения:
    339
    Симпатии:
    19
    Большое спасибо
    все получилось

    еще 1 такой нюанс
    когда делаю кнопку купить такой

    <input type="button" value="<?php echo $button_cart; ?>" onclick="addToCartQty('<?php echo $product['product_id']; ?>', this);" class="button-mono-open" />
    то не работает

    а когда такой, то работает. но не учитывает количество
    <input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button-mono-open" />

    хотя в категориях обычных работает
    а с опциями я прописываю в файле xml

    вот мой файл xml
    где не работает кнопка



    а вот мой файл обычной категории где работает

    именно через + Qty = addToCartQty
    перестает работать
    addToCart

    я уже не знаю, что с этим сделать (
     
  6. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Прежде всего смотрите консоль браузера - если что-то не работает, вероятно, там будут какие-то ошибки.
    И убедитесь, что у вас на странице обїявлена функция addToCartQty.
     
    etens1212 нравится это.
  7. etens1212

    etens1212

    Регистрация:
    1 май 2013
    Сообщения:
    339
    Симпатии:
    19
    функцию addToCartQty я объявил, кнопка начала работать, но не учитывает количество

    возможно это из-за
    в обычных категориях выглядит так data
    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'),

    в моем xml

    data = $('#option_'+product_id+' input[type=\'text\'], #option_'+product_id+' input[type=\'radio\']:checked, #option_'+product_id+' input[type=\'checkbox\']:checked, #option_'+product_id+' select, #option_'+product_id+' textarea');
    $.ajax({
    url: 'index.php?route=checkout/cart/add',
    type: 'post',
    data: data.serialize() + '&product_id=' + product_id,
     
  8. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Ну, так её не просто объявить надо, а скопировать туда код, с той страницы. где всё работает, как надо.

    Какой у неё код внутри?
     
    etens1212 нравится это.
  9. etens1212

    etens1212

    Регистрация:
    1 май 2013
    Сообщения:
    339
    Симпатии:
    19
    вот скрипт где работает
    Код:
    <script type="text/javascript"><!--
    $('#button-cart').bind('click', function() {
        $.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').html('<div class="success" style="display: none;">' + json['success'] + '</div>');
                       
                    $('.success').fadeIn('slow');
                       
                    $('#cart-total').html(json['total']);
                   
                    setTimeout ("$('.success').fadeOut('slow');", 3000);
                   
                   
                }   
            }
        });
    });
    //--></script>


    а тут вот где не работает - (опции учитывает, а количество нет)

    Код:
    <script type="text/javascript">
                    function add_bc(product_id) {
                        data = $('#option_'+product_id+' input[type=\'text\'], #option_'+product_id+' input[type=\'radio\']:checked, #option_'+product_id+' input[type=\'checkbox\']:checked, #option_'+product_id+' select, #option_'+product_id+' textarea');
                        $.ajax({
                                url: 'index.php?route=checkout/cart/add',
                                type: 'post',
                                data: data.serialize() + '&product_id=' + product_id,
                                dataType: 'json',
                                beforeSend: function(){
                                },
                                    success: function(json) {
                                        $('.success, .warning, .attention, information, .error').remove();
                                        if (json['error']) {
                                            if (json['error']['warning']) {
                                                $('#notification').html('<div class="warning" style="display: none;">' + json['error']['warning'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>');
                                           
                                                $('.warning').fadeIn('slow');
                                            }
                                           
                                            for (i in json['error']) {
                                                $('#option-' + i).after('<span class="error">' + json['error'][i] + '</span>');
                                            }
                                        }     
                                                   
                                        if (json['success']) {
                                            $('#notification').html('<div class="success" style="display: none;">' + json['success'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>');
                       
                                            $('.success').fadeIn('slow');
                       
                                            $('#cart-total').html(json['total']);
                   
                                            setTimeout ("$('.success').fadeOut('slow');", 3000);
                                        }   
                                    }
                            });
                    }
                    </script>
     
  10. etens1212

    etens1212

    Регистрация:
    1 май 2013
    Сообщения:
    339
    Симпатии:
    19

    там именно проблема здесь:


    Код:
        <operation error="skip">
                <search position="replace"><![CDATA[
                    addToCartQty
                ]]></search>
                <add><![CDATA[
                    add_bc
                ]]></add>
            </operation>

    а там где работает

    Код:
    <search position="replace"><![CDATA[<input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button" />]]></search>
    но, если я копирую код где работает, то не учитывает опцию и переходит на страницу товара, чтобы выбрать опциии
     
  11. Dotrox

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

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