Не работает обязательные поля в опциях

Тема в разделе "Общие вопросы", создана пользователем garfild304, 2 дек 2020.

  1. garfild304

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

    Сообщения:
    128
    Симпатии:
    1
    Здравствуйте. Сделал модальное оформление заказа. Если строки не заполнены то появляется ошибка. А вот опции не работают. Если сделать их обязательными все равно пропускает заказ на оформление. Если вывести опцию datatime то появляется предупреждение что поле пустое.

    Опция <?php if ($opval['type'] == 'select') { ?> как сделать обязательной к выбору что бы ошибка выходила если не выбрать.



    Файл вывода в шаблон :

    PHP:
     <div id="zapis">

                 <?php foreach ($opvals as $opval) { ?>
                
                        <?php if ($opval['type'] == 'select') { ?>
                        <div class="form-group <?php if($opval['top']) { ?>required<?php ?>">
                        <label class="control-label2"><?php echo $opval['name']; ?></label>
                            <?php if($opval['top']) { ?><?php ?>
                                <label class="control-label"  for="input-option<?php echo $opval['product_op_val_id']; ?>"><?php echo $opval['name']; ?></label>
                                <select  name="op[<?php echo $opval['product_op_val_id']; ?>]" id="input-option<?php echo $opval['product_op_val_id']; ?>" class="form-control2">
                                    <option value=""><?php echo $text_select?></option>
                                    <?php foreach ($opval['value'] as $op_value) { ?>
                                    <option value="<?php echo $op_value['option_value_id']; ?>"><?php echo $op_value['name']; ?></option>
                                    <?php ?>
                                </select>
                            </div>
                            
                                     <?php ?>
                        
                        <?php if ($opval['type'] == 'radio') { ?>
                            <div class="form-group <?php if($opval['top']) { ?>required<?php ?>">
                                <label class="control-label2 "><?php echo $opval['name']; ?></label>
                                <div id="input-option<?php echo $opval['product_op_val_id']; ?>">
                                    <?php foreach ($opval['value'] as $op_value) { ?>
                                    <div class="radio">
                                        <label>
                                            <input type="radio" name="op[<?php echo $opval['product_op_val_id']; ?>]" value="<?php echo $op_value['option_value_id']; ?>" />
                                            <?php if ($op_value['image']) { ?>
                                                <img src="<?php echo $op_value['image']; ?>" alt="<?php echo $op_value['name']; ?>" class="img-thumbnail" />
                                            <?php ?>                   
                                            <?php echo $op_value['name']; ?>
                                        </label>
                                    </div>
                                    <?php ?>
                                </div>
                            </div>
                        <?php ?>
                        
                        <?php if ($opval['type'] == 'checkbox') { ?>
                            <div class="form-group <?php if($opval['top']) { ?>required<?php ?>">
                                <label class="control-label2"><?php echo $opval['name']; ?></label>
                                <div id="input-option<?php echo $opval['product_op_val_id']; ?>">
                                    <?php foreach ($opval['value'] as $op_value) { ?>
                                        <div class="checkbox">
                                            <label>
                                                <input type="checkbox" name="op[<?php echo $opval['product_op_val_id']; ?>][]" value="<?php echo $op_value['option_value_id']; ?>" />
                                                <?php if ($op_value['image']) { ?>
                                                <img src="<?php echo $op_value['image']; ?>" alt="<?php echo $op_value['name']; ?>" class="img-thumbnail" />
                                                <?php ?>
                                                <?php echo $op_value['name']; ?>
                                            </label>
                                        </div>
                                    <?php ?>
                                </div>
                            </div>
                        <?php ?>
                        
                        <?php if ($opval['type'] == 'text') { ?>
                            <?php if(($opval['ogr'] > 0) && ($opval['mas'])) { ?>
                                <input type="hidden" name="q" value="1" data-qq="<?php echo $opval['ogr']; ?>" />
                            <?php ?>
                            <div class="form-group <?php if($opval['top']) { ?>required<?php ?>">
                                <label class="control-label2" for="input-option<?php echo $opval['product_op_val_id']; ?>"><?php echo $opval['name']; ?></label>
                                <input type="text" name="op[<?php echo $opval['product_op_val_id']; ?>]" value="" placeholder="<?php echo $opval['text']; ?>" id="input-option<?php echo $opval['product_op_val_id']; ?>" class="form-control2" <?php if($opval['top']) { ?>data-validate<?php ?> />
                            </div>
                            <?php if($opval['ogr'] > 0) { ?><?php ?>
                            <?php if($opval['mas']) { ?>
                                <div class="form-group hh-repeatable-field js-repeatable-field__prayer-names-data">
                                    <a href="javascript:void(0)" class="hh-repeatable-field__add-button hh-repeatable-field__add-button-left-margin js-repeater__add-button"><i class="fa fa-plus"></i> Добавить имя</a>
                                </div>
                            <?php ?>   
                        <?php ?>
                        
                        <?php if ($opval['type'] == 'textarea') { ?>
                            <div class="form-group <?php if($opval['top']) { ?>required<?php ?>">
                                <label class="control-label2"   for="input-option<?php echo $opval['product_op_val_id']; ?>"><?php echo $opval['name']; ?></label>
                                <textarea name="op[<?php echo $opval['product_op_val_id']; ?>]" rows="5" placeholder="<?php echo $opval['text']; ?>" id="input-option<?php echo $opval['product_op_val_id']; ?>" class="form-control2"></textarea>
                            </div>
                        <?php ?>
                        
                        <?php if ($opval['type'] == 'file') { ?>
                        
                        
                        
                        
                        
                    
                        <?php ?>
                        
                        <?php if ($opval['type'] == 'date') { ?>
                            <div class="form-group <?php if($opval['top']) { ?>required<?php ?>">
                                <label class="control-label"   for="input-option<?php echo $opval['product_op_val_id']; ?>"><?php echo $opval['name']; ?></label>
                                <div class="input-group date">
                                    <input type="text" name="op[<?php echo $opval['product_op_val_id']; ?>]" value="" data-date-format="YYYY-MM-DD" id="input-option<?php echo $opval['product_op_val_id']; ?>" class="form-control2" <?php if($opval['top']) { ?>data-validate<?php ?> />
                                    <span class="input-group-btn">
                                        <button class="btn btn-default" type="button"><i class="fa fa-calendar"></i></button>
                                    </span>
                                </div>
                            </div>
                        <?php ?>
                        
                        <?php if ($opval['type'] == 'datetime') { ?>
                    
                        <?php ?>
                        
                        <?php if ($opval['type'] == 'time') { ?>
                    
                        <?php ?>
                    <?php ?>
                    <input type="hidden" name="quantity" value="1" />
                    <input type="hidden" name="product_id" value="<?php echo $product_id?>" />
                    <div id="collapse-payment-method"></div>
                    
                    <div class="buttons">
                        <div class="pull-center" style="text-align: center;">
                            <button type="button" id="button-cart" data-loading-text="<?php echo $text_loading?>" class="btn btn-hoka btn-lg">Отправить</button>
                            <button type="button" id="button-wishlist" data-loading-text="<?php echo $text_loading?>" class="btn btn-hoka btn-lg">В избранное</button>
                            <input type="hidden" name="s" id="sys" value="0" />
                        </div>
                    </div>
                </div>
     
  2. garfild304

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

    Сообщения:
    128
    Симпатии:
    1
    Вывод ошибки через JS

    Код:
    Вот JS для вывода ошибки:
    
    [CODE]$('#button-cart').on('click', function() {
        $('.alert-success, .alert-danger').remove();
        $('#sys').val('1');
        var field = [];
        
                $("#product").find("input[data-validate]").each(function() {
                    field.push('input[data-validate]');
                    var value = $(this).val();
            
                    for(var i=0;i<field.length;i++) {
                        if( !value ) {
                            $('#sys').val('0');
                            
                            $(this).addClass('some-form__line-required');
                            setTimeout(function() {
                                $(this).removeClass('some-form__line-required')
                            }.bind(this),2000);
                        }
                    }
                ;   
               });
    if($("input").is('[name=\'q\']')) {           
    q = Number($('#product input[name=\'q\']').val());
    } else {
    q = 1;
    }
    g = q - 1;
    t = q;
    
    if(g != 0) {
       for (i = 1; i < g; i++) {
           zxc = $('#product input[name=\'op[d' + i + ']\']').val();
           if(zxc == '') {
               $('#product input[name=\'op[d' + i + ']\']').remove();
               t = t - 1;
            }
       }
    }
    eklmn = $('#sys').val();           
    if(eklmn != 0) {
        $.ajax({
            url: 'index.php?route=checkout/cart/add&q=' + t,
            type: 'post',
            data: $('#product input[type=\'text\'], #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\']:checked, #product select, #product textarea'),
            dataType: 'json',
            beforeSend: function() {
                $('#button-cart').button('loading');
            },
            complete: function() {
                $('#button-cart').button('reset');
            },
            success: function(json) {
                $('.alert, .text-danger').remove();
                $('.form-group').removeClass('has-error');
    
                if (json['error']) {
                    if (json['error']['option']) {
                        for (i in json['error']['option']) {
                            var element = $('#input-option' + i.replace('_', '-'));
    
                            if (element.parent().hasClass('input-group')) {
                                element.parent().after('<div class="text-danger">' + json['error']['option'][i] + '</div>');
                            } else {
                                element.after('<div class="text-danger">' + json['error']['option'][i] + '</div>');
                            }
                        }
                    }
    
                    if (json['error']['recurring']) {
                        $('select[name=\'recurring_id\']').after('<div class="text-danger">' + json['error']['recurring'] + '</div>');
                    }
                    
                    if (json['error']['product']) {
                        $('.breadcrumb').after('<div class="text-danger">' + json['error']['product'] + '</div>');
                    }
                    
                    
                    
                     for (i in json['error']) {
              var element = $('#input-payment-' + i.replace('_', '-'));
    
              if ($(element).parent().hasClass('input-group')) {
                $(element).parent().after('<div class="text-danger">' + json['error'][i] + '</div>');
              } else {
                $(element).after('<div class="text-danger">' + json['error'][i] + '</div>');
              }
            }
    
                    // Highlight any found errors
                    $('.text-danger').parent().addClass('has-error');
                }
    
                if (json['success']) {
                    $('#cart > button').html('<span id="cart-total"><i class="fa fa-shopping-cart"></i> ' + json['total'] + '</span>');
    
                    $('#cart > ul').load('index.php?route=common/cart/info ul li');
                    $.ajax({
                        url: 'index.php?route=product/form/payment',
                        dataType: 'html',
                        success: function(html) {
                            $('#zapis').html(html);
                            $('.user').css('display','block');
                        },
                        error: function(xhr, ajaxOptions, thrownError) {
                            alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
                        }
                    });
                    
                }
            },
            error: function(xhr, ajaxOptions, thrownError) {
                alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
            }
        });
        } else {
            $('#collapse-payment-method').html('<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> Есть не заполненные поля ! </div>');
        }
    });
    [/CODE]
     
  3. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    в контроллере cart, изменяли проверку опций?
    так идет добавление в корзину, ести нет ошибок. может там что намудрили?
     
  4. garfild304

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

    Сообщения:
    128
    Симпатии:
    1
    Да добавлял для вывода. Но datatime проверка работает)
     

    Вложения:

    • cart.php
      Размер файла:
      24,3 КБ
      Просмотров:
      2
  5. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    а в контроллере
    if (isset($this->request->post['option'])) {
     
  6. garfild304

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

    Сообщения:
    128
    Симпатии:
    1

    Вставил но не сработало if (isset($this->request->post['option'])) {

    Если не сложно напиши подробней, я тебя денюжкой отблагодарю
     
  7. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    что вставил?
    я показал что в html, name у опций op[]
    а в контроллере проверка post['option']
    имя опции on, а в контроллере ожидается option
    так понятно?
     
  8. garfild304

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

    Сообщения:
    128
    Симпатии:
    1
    if (isset($this->request->post['op'])) {
    $op = array_filter($this->request->post['op']);
    // $this->log->write(print_r($op,true));
    } else {
    $op = array();
    }
     
  9. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    да, но дальше
    PHP:
                foreach ($product_options as $product_option) {
                    if (
    $product_option['required'] && empty($option[$product_option['product_option_id']])) {
                        
    $json['error']['option'][$product_option['product_option_id']] = sprintf($this->language->get('error_required'), $product_option['name']);
                    }
                }
     
  10. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    empty($op[..........................
     
  11. garfild304

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

    Сообщения:
    128
    Симпатии:
    1
    не сработала... возможно ещё поменять на product_op_val_id
     
  12. garfild304

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

    Сообщения:
    128
    Симпатии:
    1
    заметил что в другом файле все это работает
     

    Вложения:

    • confirm.php
      Размер файла:
      17,7 КБ
      Просмотров:
      0
  13. garfild304

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

    Сообщения:
    128
    Симпатии:
    1
    а тут происходит работа самой формы
     

    Вложения:

    • form.php
      Размер файла:
      10,4 КБ
      Просмотров:
      0
  14. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    нет. я вообще не понимаю, нафига вы изуродовали индесы в массиве опций.
    что у вас в product_op_val_id
     
  15. garfild304

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

    Сообщения:
    128
    Симпатии:
    1
    Нужен был дополнительный функционал...на одной странице форма , которая пропускает корзину
     
  16. garfild304

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

    Сообщения:
    128
    Симпатии:
    1
    Может есть простой способ заставить человека выбрать опцию....
     
  17. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    и при чем тут опции. вы используете стандартный функционал(проверка выбора опций) , только в модалке. зачем при этом уродовать получение и вывод опций?
    а чем способ из коробки не нравится?
     
  18. garfild304

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

    Сообщения:
    128
    Симпатии:
    1
    Нужно было перепелить движок полностью под функционал