Здравствуйте. Сделал модальное оформление заказа. Если строки не заполнены то появляется ошибка. А вот опции не работают. Если сделать их обязательными все равно пропускает заказ на оформление. Если вывести опцию 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>
Вывод ошибки через 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]
в контроллере cart, изменяли проверку опций? так идет добавление в корзину, ести нет ошибок. может там что намудрили?
Вставил но не сработало if (isset($this->request->post['option'])) { Если не сложно напиши подробней, я тебя денюжкой отблагодарю
что вставил? я показал что в html, name у опций op[] а в контроллере проверка post['option'] имя опции on, а в контроллере ожидается option так понятно?
if (isset($this->request->post['op'])) { $op = array_filter($this->request->post['op']); // $this->log->write(print_r($op,true)); } else { $op = array(); }
да, но дальше 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']); } }
нет. я вообще не понимаю, нафига вы изуродовали индесы в массиве опций. что у вас в product_op_val_id
и при чем тут опции. вы используете стандартный функционал(проверка выбора опций) , только в модалке. зачем при этом уродовать получение и вывод опций? а чем способ из коробки не нравится?