if($('#deliveryConvenientDate').length) { var date = new Date(); var interval = 2; var hour = ((date.getMinutes() > 30) ? (date.getHours() + 1) : date.getHours()); if(!hour) { hour = 24; } var max_hour = 24; var from_hour = hour + interval; if((hour + interval) > max_hour) { from_hour = (hour + interval) - max_hour; } var to_hour = from_hour + interval; if((from_hour + interval) > max_hour) { to_hour = (from_hour + interval) - max_hour; } var from_select = $('#deliveryConvenientDate').parent().find('[name="form[delivery][convenient_time_from]"]'); $(from_select).find('[value="' + from_hour + '"]').attr("selected", "selected"); $(from_select).find('option').each(function() { if(parseInt($(this).val()) < from_hour) { $(this).attr('disabled','disabled'); } }); var to_select = $('#deliveryConvenientDate').parent().find('[name="form[delivery][convenient_time_to]"]'); $(to_select).find('[value="' + to_hour + '"]').attr("selected", "selected"); $(to_select).find('option').each(function() { if(parseInt($(this).val()) < to_hour) { $(this).attr('disabled','disabled'); } }); }
Как Ограничить Время Доставки?
#21
Отправлено 17 Январь 2013 - 00:07
#22
Отправлено 17 Январь 2013 - 09:33
Vaccina (17 Январь 2013 - 00:07) писал:
if($('#deliveryConvenientDate').length) { var date = new Date(); var interval = 2; var hour = ((date.getMinutes() > 30) ? (date.getHours() + 1) : date.getHours()); if(!hour) { hour = 24; } var max_hour = 24; var from_hour = hour + interval; if((hour + interval) > max_hour) { from_hour = (hour + interval) - max_hour; } var to_hour = from_hour + interval; if((from_hour + interval) > max_hour) { to_hour = (from_hour + interval) - max_hour; } var from_select = $('#deliveryConvenientDate').parent().find('[name="form[delivery][convenient_time_from]"]'); $(from_select).find('[value="' + from_hour + '"]').attr("selected", "selected"); $(from_select).find('option').each(function() { if(parseInt($(this).val()) < from_hour) { $(this).attr('disabled','disabled'); } }); var to_select = $('#deliveryConvenientDate').parent().find('[name="form[delivery][convenient_time_to]"]'); $(to_select).find('[value="' + to_hour + '"]').attr("selected", "selected"); $(to_select).find('option').each(function() { if(parseInt($(this).val()) < to_hour) { $(this).attr('disabled','disabled'); } }); }
Ну... Эт снова я! Такое ощущение, что с вставкой последнего кода ничего не поменялось(((
А что же происходит:
1. Доходишь до второго шага оформления заказа до выбора времени доставки и видишь первое начальное возможное время в графе "С" стоит правильно!!! - с интервалом 2 часа от текущего времени, а время в графе "ДО" тоже стоит правильно и тоже с 2 часовым интервалом!!!
То есть клиент выставил начальное время и конечное ОДИН раз и вроде все ок, НО,,,
2. Допустим клиент передумал и говорит, дай-ка я поменяю начальный интервал. Заходит в графу "С" и видит там, что ему уже можно указать начало интервала раньше ТЕКУЩЕГО времени.
3. Но вот заходишь допустим в другое число, завтра или через неделю и видишь, что система выдает тебе начало времени доставки в соответствии с текущим временем (см. пункт 1) ((((
P.S.: надеюсь, что упорство - это наш с вами взаимный конек, и мы справимся с этой задачкой))) очень скоро)
СПАСИБО!!!
Может что в шаблоне оформления заказа поменять...)))?
#23
Отправлено 17 Январь 2013 - 16:43
#24
Отправлено 17 Январь 2013 - 23:17
attr('disabled','disabled')
на
remove()
Не совсем только понятна причина изменения поля С если изменить значение в поле До. По идее такой реакции быть не должно, не могли бы вы привести пример такого поведения у вас на сайте, может у вас используется еще какой-то код, который создает такую ситуацию.
#25
Отправлено 20 Январь 2013 - 15:12
Vaccina (17 Январь 2013 - 23:17) писал:
attr('disabled','disabled')
на
remove()
Не совсем только понятна причина изменения поля С если изменить значение в поле До. По идее такой реакции быть не должно, не могли бы вы привести пример такого поведения у вас на сайте, может у вас используется еще какой-то код, который создает такую ситуацию.
Выждал несколько дней... Думал может что исправиться))) Но...
Когда вставил вышеобозначенный код, время, которое должно быть недоступно для заказа скрылось! И это уже само по себе суперррррр))).
Но вот загвоздка... Привязка текущего времени и начала времени в графе "С" связано не только с текущей датой, но и со всеми последующими. То есть, если текущее время допустим 15 часов, то в графе "С" отображается время, начиная с 17 часов, что правильно для текущей даты, а вот почему это же время отражается и для последующих дней???
Для примера - 2 пары скриншотов (первый - все правильно, второй - с датой позднее текущей):
#26
Отправлено 20 Январь 2013 - 15:30
Vaccina (17 Январь 2013 - 23:17) писал:
attr('disabled','disabled')
на
remove()
Не совсем только понятна причина изменения поля С если изменить значение в поле До. По идее такой реакции быть не должно, не могли бы вы привести пример такого поведения у вас на сайте, может у вас используется еще какой-то код, который создает такую ситуацию.
На всякий случай прикрепляю свои коды в "Оформление заказа" и "main.js". Точнее только последний... второй не прикрепился... в течение 10 минут выдавал мне ошибку IO
Прикрепленные файлы
#27
Отправлено 22 Январь 2013 - 00:15
function update_select_time() { if($('#deliveryConvenientDate').length) { var date = new Date(); var interval = 2; var hour = ((date.getMinutes() > 30) ? (date.getHours() + 1) : date.getHours()); if(!hour) { hour = 24; } var max_hour = 24; var from_hour = hour + interval; if((hour + interval) > max_hour) { from_hour = (hour + interval) - max_hour; } var to_hour = from_hour + interval; if((from_hour + interval) > max_hour) { to_hour = (from_hour + interval) - max_hour; } var from_select = $('#deliveryConvenientDate').parent().find('[name="form[delivery][convenient_time_from]"]'); $(from_select).find('[value="' + from_hour + '"]').attr("selected", "selected"); $(from_select).find('option').each(function() { if(parseInt($(this).val()) < from_hour) { $(this).attr('disabled','disabled').hide(); } }); var to_select = $('#deliveryConvenientDate').parent().find('[name="form[delivery][convenient_time_to]"]'); $(to_select).find('[value="' + to_hour + '"]').attr("selected", "selected"); $(to_select).find('option').each(function() { if(parseInt($(this).val()) < to_hour) { $(this).attr('disabled','disabled').hide(); } }); } } update_select_time(); $('#deliveryConvenientDate').change(function() { var select = parseInt($(this).val().replace(/\./g, '')); var date = new Date(); var month = (date.getMonth() + 1) < 10 ? ('0' + (date.getMonth() + 1)) : (date.getMonth() + 1); var current = parseInt(date.getDate() + '' + month + '' + date.getFullYear() + ''); console.log(select, current); if(select < current) { $('#deliveryConvenientDate').parent().find('select option').attr('disabled','disabled').hide(); } else if(select > current) { $('#deliveryConvenientDate').parent().find('select option').removeAttr('disabled').show(); } else { update_select_time(); } });
#28
Отправлено 22 Январь 2013 - 09:04
$(document).ready(function(){ и до кода // Кнопки на сайте если подгружен модуль Jquery.UI
в шаблон main.js ???
#29
Отправлено 22 Январь 2013 - 15:43
$(document).ready(function(){Код внутри этого блока будет выполняться только после загрузки всей страницы.
Цитата
#30
Отправлено 22 Январь 2013 - 16:34
ай, спасибо! вроде работает)))
СПАСИБО!!!
#31
Отправлено 23 Январь 2013 - 16:09
Поэтому еще пара вопросов по интервалам доставки:
1. Какой параметр в вышеобозначенном коде (Vaccina, 22.01.2013 в 03.15) отвечает за минимальную разницу между временем в графе "С" и временем в графе "До"?
Сейчас стоит два часа. Как я могу самостоятельно менять этот интервал допустим с 2-х часов на 1 час, или на 3 часа?
2. Возможна ли привязка способа доставки к алгоритму выведения времени с графах "С" и "ДО"?
То есть, при выборе варианта "Доставка до дома и офиса", алгоритм как сейчас: разница между текущим временем и временем начала интервала 2 часа, а также разница между временем в графе "С" и временем в графе "До" также 2 часа.
А при выборе варианта "Самовывоз" - алгоритм немного другой: разница между текущим временем и временем начала интервала 2 часа, а разница между временем в графе "С" и временем в графе "До" 1 час или не регламентируется.
#32
Отправлено 23 Январь 2013 - 17:46
Цитата
Цитата
#33
Отправлено 24 Январь 2013 - 11:55
Насколько мне известно, к сожалению такое реализовать нет возможности.
Как бы мне точно определиться? Можно или нет?
Попробуйте изменить значение у переменной interval.Пробовал - менял...
В коде я так понимаю есть два интервала:
- один отражает разницу между текущим временем и начальным временем в графе "С"
- второй отражает минимальный интервал между временем в графе "С" и "ДО".
Какие параметры нужно менять, чтобы регулировать оба эти интервала самостоятельно и независимо друг от друга?
У меня меняется только первый интервал...(
#34
Отправлено 25 Январь 2013 - 00:57
function update_select_time(interval_from, interval_to) { if($('#deliveryConvenientDate').length) { var date = new Date(); interval_from = (!interval_from) ? 2 : interval_from; interval_to = (!interval_to) ? 2 : interval_to; var hour = ((date.getMinutes() > 30) ? (date.getHours() + 1) : date.getHours()); if(!hour) { hour = 24; } var max_hour = 24; var from_hour = hour + interval_from; if((hour + interval_from) > max_hour) { from_hour = (hour + interval_from) - max_hour; } var to_hour = from_hour + interval_to; if((from_hour + interval_to) > max_hour) { to_hour = (from_hour + interval_to) - max_hour; } var from_select = $('#deliveryConvenientDate').parent().find('[name="form[delivery][convenient_time_from]"]'); $(from_select).find('[value="' + from_hour + '"]').attr("selected", "selected"); $(from_select).find('option').each(function() { if(parseInt($(this).val()) < from_hour) { $(this).attr('disabled','disabled').hide(); } }); var to_select = $('#deliveryConvenientDate').parent().find('[name="form[delivery][convenient_time_to]"]'); $(to_select).find('[value="' + to_hour + '"]').attr("selected", "selected"); $(to_select).find('option').each(function() { if(parseInt($(this).val()) < to_hour) { $(this).attr('disabled','disabled').hide(); } }); } } function update_change_date() { var select = parseInt($('#deliveryConvenientDate').val().replace(/\./g, '')); var date = new Date(); var month = (date.getMonth() + 1) < 10 ? ('0' + (date.getMonth() + 1)) : (date.getMonth() + 1); var current = parseInt(date.getDate() + '' + month + '' + date.getFullYear() + ''); if(select < current) { $('#deliveryConvenientDate').parent().find('select option').attr('disabled','disabled').hide(); } else if(select > current) { $('#deliveryConvenientDate').parent().find('select option').removeAttr('disabled').show(); } else { update_select_time(); } } update_select_time(); $('#deliveryConvenientDate').change(function() { update_change_date(); }); $('#deliveryId141519').click(function() { update_select_time(); update_change_date(); }); $('#deliveryId140272').click(function() { update_select_time(2, 1); update_change_date(); });
В данном коде теперь 2 интервала interval_from и interval_to
Строки
$('#deliveryId141519').click(function() { update_select_time(); update_change_date(); }); $('#deliveryId140272').click(function() { update_select_time(2, 1); update_change_date(); });
являются жесткой привязкой к вашим полям доставки
#35
Отправлено 27 Январь 2013 - 11:06
#36
Отправлено 27 Январь 2013 - 11:11
А вот вышеобозначенная привязка все-таки точно невозможна???
Мне в идеале нужно, чтобы при выборе одного способа доставки я мог поставить одни интервалы (см. выше), а при другом способе другие интервалы...
#37
Отправлено 27 Январь 2013 - 11:34
#38
Отправлено 31 Январь 2013 - 20:34
Что-то с выбором интервалов для доставки... До этого все работало отлично. Сейчас косяк! А у меня ночь - это хлебное время для заказов!!!
Время вечер 31 числа, а он мне выдает все интервалы доставки (с 10 до 22 часов), время текущее уже полдвенадцатого!!!
А если переключаешь на февраль, то вообще графы не активны и выдаются пустыми. А IE графы выдаются, но они не активны.
Может быть, что-то с датами в коде напутано... Тут еще стыковка двух месяцев???
Помогите...
#39
Отправлено 01 Февраль 2013 - 01:02
function update_select_time(interval_from, interval_to) { if($('#deliveryConvenientDate').length) { var date = new Date(); interval_from = (!interval_from) ? 2 : interval_from; interval_to = (!interval_to) ? 2 : interval_to; var hour = ((date.getMinutes() > 30) ? (date.getHours() + 1) : date.getHours()); if(!hour) { hour = 24; } var max_hour = 24; var from_hour = hour + interval_from; if((hour + interval_from) > max_hour) { from_hour = (hour + interval_from) - max_hour; } var to_hour = from_hour + interval_to; if((from_hour + interval_to) > max_hour) { to_hour = (from_hour + interval_to) - max_hour; } var from_select = $('#deliveryConvenientDate').parent().find('[name="form[delivery][convenient_time_from]"]'); $(from_select).find('[value="' + from_hour + '"]').attr("selected", "selected"); $(from_select).find('option').each(function() { if(parseInt($(this).val()) < from_hour) { $(this).attr('disabled','disabled').hide(); } }); var to_select = $('#deliveryConvenientDate').parent().find('[name="form[delivery][convenient_time_to]"]'); $(to_select).find('[value="' + to_hour + '"]').attr("selected", "selected"); $(to_select).find('option').each(function() { if(parseInt($(this).val()) < to_hour) { $(this).attr('disabled','disabled').hide(); } }); } } function update_change_date() { var select = parseFloat($('#deliveryConvenientDate').val().replace(/\./g, '')); var date = new Date(); var month = (date.getMonth() + 1) < 10 ? ('0' + (date.getMonth() + 1)) : (date.getMonth() + 1); var current = parseFloat(date.getDate() + '' + month + '' + date.getFullYear() + ''); if(select < current) { $('#deliveryConvenientDate').parent().find('select option').attr('disabled','disabled').hide(); } else if(select > current) { $('#deliveryConvenientDate').parent().find('select option').removeAttr('disabled').show(); } else { update_select_time(); } } update_select_time(); $('#deliveryConvenientDate').change(function() { update_change_date(); }); $('#deliveryId141519').click(function() { update_select_time(); update_change_date(); }); $('#deliveryId140272').click(function() { update_select_time(2, 1); update_change_date(); });
в предыдущем коде была проблема с конвертированием строки в int
#40
Отправлено 14 Март 2013 - 08:35
<!-- Если запрашивается поле удобного времени доставки --> {% IF SETTINGS_ORDER_FIELDS_CONVENIENT_TIME<3 %} <tr> <td width="10%"> <label for="deliveryConvenientDate">Удобное время доставки:{% IF SETTINGS_ORDER_FIELDS_CONVENIENT_TIME=1 %}<span class="red">*</span>{% ENDIF %}</label> </td> <td width="90%"> <input id="deliveryConvenientDate" name="form[delivery][convenient_date]" value="{ORDER_FORM_DELIVERY_CONVENIENT_DATE}" {% IF SETTINGS_ORDER_FIELDS_CONVENIENT_TIME=1 %}class="required"{% ENDIF %} /> c <select name="form[delivery][convenient_time_from]"> <option></option> {% FOR convenient_time_from_list %} {% IF convenient_time_from_list.HOUR_INT=10 %}<option value="{convenient_time_from_list.HOUR_INT}" {% IF convenient_time_from_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_from_list.HOUR}</option>{% ENDIF %} {% IF convenient_time_from_list.HOUR_INT=14 %}<option value="{convenient_time_from_list.HOUR_INT}" {% IF convenient_time_from_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_from_list.HOUR}</option>{% ENDIF %} {% ENDFOR %} </select> до <select name="form[delivery][convenient_time_to]"> <option></option> {% FOR convenient_time_to_list %} {%IF convenient_time_to_list.HOUR_INT=14%}<option value="{convenient_time_to_list.HOUR_INT}" {% IF convenient_time_to_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_to_list.HOUR}</option>{%ENDIF%} {%IF convenient_time_to_list.HOUR_INT=21%}<option value="{convenient_time_to_list.HOUR_INT}" {% IF convenient_time_to_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_to_list.HOUR}</option>{%ENDIF%} {% ENDFOR %} </select> </td> </tr> {% ENDIF %}
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных