$(function () { $('[name="form[delivery][convenient_date]"]') .attr('readonly', true); var hour = (new Date()) .getHours(); $('[name="form[delivery][convenient_time_from]"] option') .each(function () { if (parseInt($(this) .val()) < hour) { $(this) .attr('disabled', true); } }) .filter('[value]:not(:disabled):first') .attr('selected', true) .parent() .change(function () { var timeFrom = parseInt($(this) .val()); var timeInterval = 2; $('[name="form[delivery][convenient_time_to]"] option') .each(function () { $(this) .removeAttr('disabled'); if (parseInt($(this) .val()) < (timeFrom + timeInterval)) { $(this) .attr('disabled', true); } }) .filter('[value]:not(:disabled):first') .attr('selected', true) .parent() .trigger('change'); }) .trigger('change'); $('[name="form[delivery][convenient_time_to]"]') .change(function () { var deliverDate = $('#deliveryConvenientDate'); var date = new Date(); if (parseInt($(this) .val()) < 16) { date.setDate(date.getDate() + 1); deliverDate.datepicker('option', 'minDate', date); } else { date.setDate(date.getDate() + 2); deliverDate.datepicker('option', 'minDate', date); } }) .trigger('change'); });
Как Ограничить Время Доставки?
#101
Отправлено 09 Сентябрь 2014 - 00:34
#102
Отправлено 09 Сентябрь 2014 - 09:04
Сake (12 Август 2014 - 03:12) писал:
firstDay : 1
и замените её на
firstDay : 1, beforeShowDay : function(date) {return([date.getDay() != 0, ''])}
далее в самый конец файла добавьте код
$(function () { $('[name="form[delivery][convenient_date]"]').attr('readonly', true); $('[name="form[delivery][convenient_time_from]"]').change(function () { var timeFrom = $(this).val(); var timeInterval = 2; $('[name="form[delivery][convenient_time_to]"] option').each(function () { $(this).removeAttr('disabled'); if (parseInt($(this).val()) < (parseInt(timeFrom) + timeInterval)) { $(this).attr('disabled', true); } }).filter(':first').attr('selected', true); }); });
Воскресенье убрала, а можно сделать условие для субботы:
чтобы, если заказывают в пятницу после 12:00, то суббота была недоступна для заказа?
#103
Отправлено 09 Сентябрь 2014 - 23:52
$(function () { $('[name="form[delivery][convenient_date]"]') .attr('readonly', true); var hour = (new Date()) .getHours(); $('[name="form[delivery][convenient_time_from]"] option') .each(function () { if (parseInt($(this) .val()) < hour) { $(this) .attr('disabled', true); } }) .filter('[value]:not(:disabled):first') .attr('selected', true) .parent() .change(function () { var timeFrom = parseInt($(this) .val()); var timeInterval = 2; $('[name="form[delivery][convenient_time_to]"] option') .each(function () { $(this) .removeAttr('disabled'); if (parseInt($(this) .val()) < (timeFrom + timeInterval)) { $(this) .attr('disabled', true); } }) .filter('[value]:not(:disabled):first') .attr('selected', true) .parent() .trigger('change'); }) .trigger('change'); $('[name="form[delivery][convenient_time_to]"]') .change(function () { var deliverDate = $('#deliveryConvenientDate'); var date = new Date(); if ((parseInt($(this) .val()) > 12 && date.getDay() == 5) || parseInt($(this) .val()) > 16) { date.setDate(date.getDate() + 2); } else { date.setDate(date.getDate() + 1); } deliverDate.datepicker('option', 'minDate', date); }) .trigger('change'); });
#104
Отправлено 10 Сентябрь 2014 - 00:04
Сake (09 Сентябрь 2014 - 23:52) писал:
$(function () { $('[name="form[delivery][convenient_date]"]').attr('readonly', true); var hour = (new Date()).getHours(); $('[name="form[delivery][convenient_time_from]"] option').each(function () { if (parseInt($(this).val()) < hour) { $(this).attr('disabled', true); } }).filter('[value!]:not(:disabled):first').attr('selected', true).parent().change(function () { var timeFrom = parseInt($(this).val()); var timeInterval = 2; $('[name="form[delivery][convenient_time_to]"] option').each(function () { $(this).removeAttr('disabled'); if (parseInt($(this) .val()) < (timeFrom + timeInterval)) { $(this).attr('disabled', true); } }).filter('[value!]:not(:disabled):first').attr('selected', true).parent().trigger('change'); }).trigger('change'); $('[name="form[delivery][convenient_time_to]"]').change(function () { var deliverDate = $('#deliveryConvenientDate'); var date = new Date(); if ((parseInt($(this).val()) > 12 && date.getDay() == 5) || parseInt($(this).val()) > 16) { date.setDate(date.getDate() + 2); } else { date.setDate(date.getDate() + 1); } deliverDate.datepicker('option', 'minDate', date); }).trigger('change'); });
JS ошибка
#105
Отправлено 10 Сентябрь 2014 - 00:17
#106
Отправлено 10 Сентябрь 2014 - 00:25
Сake (10 Сентябрь 2014 - 00:17) писал:
А еще страница никак не может до конца загрузиться, внизу какой-то де тунт грузится
И из категории каталога не сделать Быстрый заказ, зависает.
Вернула назад
#107
Отправлено 10 Сентябрь 2014 - 01:04
.filter('[value!]:not(:disabled):first').attr('selected', true).parent().trigger('change');
и
.filter('[value!]:not(:disabled):first').attr('selected', true).parent().change(function ()
Вставленный вами код не влияет на скорость загрузки страницы.
Цитата
Возможно у вас используется какой-то счетчик или плагин и сервер данного плагина не доступен или перегружен.
#108
Отправлено 10 Сентябрь 2014 - 01:20
Сake (10 Сентябрь 2014 - 01:04) писал:
.filter('[value!]:not(:disabled):first').attr('selected', true).parent().trigger('change');
и
.filter('[value!]:not(:disabled):first').attr('selected', true).parent().change(function ()
Изменения оставила пока. Ошибка висит и из каталога не оформить
#109
Отправлено 10 Сентябрь 2014 - 01:29
#111
Отправлено 10 Сентябрь 2014 - 10:03
Сake (09 Сентябрь 2014 - 00:34) писал:
$(function () { $('[name="form[delivery][convenient_date]"]') .attr('readonly', true); var hour = (new Date()) .getHours(); $('[name="form[delivery][convenient_time_from]"] option') .each(function () { if (parseInt($(this) .val()) < hour) { $(this) .attr('disabled', true); } }) .filter('[value]:not(:disabled):first') .attr('selected', true) .parent() .change(function () { var timeFrom = parseInt($(this) .val()); var timeInterval = 2; $('[name="form[delivery][convenient_time_to]"] option') .each(function () { $(this) .removeAttr('disabled'); if (parseInt($(this) .val()) < (timeFrom + timeInterval)) { $(this) .attr('disabled', true); } }) .filter('[value]:not(:disabled):first') .attr('selected', true) .parent() .trigger('change'); }) .trigger('change'); $('[name="form[delivery][convenient_time_to]"]') .change(function () { var deliverDate = $('#deliveryConvenientDate'); var date = new Date(); if (parseInt($(this) .val()) < 16) { date.setDate(date.getDate() + 1); deliverDate.datepicker('option', 'minDate', date); } else { date.setDate(date.getDate() + 2); deliverDate.datepicker('option', 'minDate', date); } }) .trigger('change'); });
Сделал.
Тестирую 10.09.2014 в 10:56: щелкаю на дату - завтрашнее число (11-е) не доступно (что не ок) (скрин)
А должно быть: сегодня до 16-00 доступно завтра (и далее), сегодня после 16:00 (по Московскому серверному времени) доступно послезавтра (и далее кроме выходных).
#112
Отправлено 11 Сентябрь 2014 - 01:05
if (parseInt($(this) .val()) < 16) {
на строку
if (parseInt($(this) .val()) <= 16) {
#113
Отправлено 11 Сентябрь 2014 - 17:51
Сake (11 Сентябрь 2014 - 01:05) писал:
if (parseInt($(this) .val()) < 16) {
на строку
if (parseInt($(this) .val()) <= 16) {
Вопрос не в этом.
Вопрос в том, что когда я тестировал 10.09.2014 в 10:56, то при выборе даты, должна быть доступно 11-е число. А оно дало только 12-е.
#114
Отправлено 12 Сентябрь 2014 - 00:25
if (parseInt($(this) .val()) < 16) { date.setDate(date.getDate() + 1); deliverDate.datepicker('option', 'minDate', date); } else { date.setDate(date.getDate() + 2); deliverDate.datepicker('option', 'minDate', date); }
на
if (date.getHours() < 16) { date.setDate(date.getDate() + 1); deliverDate.datepicker('option', 'minDate', date); } else { date.setDate(date.getDate() + 2); deliverDate.datepicker('option', 'minDate', date); }
#115
Отправлено 12 Сентябрь 2014 - 11:33
Дата доставки предлагается правильно 15.09, это то что нужно.
Но стала проблема со временем доставки, почему-то дает только диапазон с 15 до 21-00 (см.скрин 1)
Просьба допилить (см.скрин 2):
1. Сделать чтобы поле дата доставки не было серым - а то выглядит как будто для только чтения.
2. В поле дата доставки автоматом проставлялась предлагаемая дата (т.е. 15.09)
3. Время доставки автоматом не предлагалось.
Заранее спасибо!
#116
Отправлено 13 Сентябрь 2014 - 00:47
Цитата
Какой правильный или возможный диапазон в данном случае должен быть? Присутствует ли он в виде заблокированных полей?
1. Удалите строку
$('[name="form[delivery][convenient_date]"]') .attr('readonly', true);
2. Вы хотите чтобы подставлялась минимальная дата с учетом текущего времени?
3. Ранее вы задавали противоположный вопрос http://forum.storela..._80#entry156340 (вопрос 1).
#117
Отправлено 25 Сентябрь 2014 - 21:03
Подскажите, как я могу решить следующую задачу:
Интернет-магазин осуществляет доставку продуктов только в субботу и воскресенье. Заказчик может осуществить заказ на субботу не позднее четверга 16-00, на воскресенье не позднее пятницы 16-00.
Отсюда вопрос, как реализовать данные условия.
1. В календаре выбора даты доставки клиент мог выбрать только сб и вс, будни должны быть серого цвета неактивны.
2. Если клиент осуществляет заказ до 16-00 четверга, то для него активны все последующие дни субботы и воскресенья.
3. Если клиент осуществляет заказ в промежуток между 16-00 четверга и 16-00 пятницы, для него активно только воскресенье текущей недели и сб и вс следующих недель.
4. Если клиент осуществляет заказ после 16-00 пятницы, для него неактивны сб и вс текущей недели.
5. Для выбора времени доставки было только два варианта "до 14-00" и "после 14-00"
Заранее премного благодарен за ответ
#119
Отправлено 11 Октябрь 2014 - 05:31
$("#deliveryConvenientDate").datepicker({ dayNames : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'], dayNamesMin : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ], closeText : 'Готово', currentText : 'Сегодня' , duration : '', monthNames : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'], yearRange : "-6:+6", dateFormat : 'dd.mm.yy', minDate : new Date(), firstDay : 1 });
и замените его на
var minDate = new Date(); if ((minDate.getHours() >= 16 && minDate.getDay() == 4) || (minDate.getHours() <= 16 && minDate.getDay() == 5)) { minDate.setDate(minDate.getDate() + (minDate.getDay() == 4 ? 3 : 2)); } $("#deliveryConvenientDate").datepicker({ dayNames : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'], dayNamesMin : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ], closeText : 'Готово', currentText : 'Сегодня' , duration : '', monthNames : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'], yearRange : "-6:+6", dateFormat : 'dd.mm.yy', minDate : minDate, firstDay : 1, beforeShowDay : function(date) {return([date.getDay() == 0 || date.getDay() == 6, ''])} });
далее в шаблоне "Оформление заказа" или "Быстрый заказ" найдите код
<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 %} <option value="{convenient_time_from_list.HOUR_INT}" {% IF convenient_time_from_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_from_list.HOUR}</option> {% ENDFOR %} </select> до <select name="form[delivery][convenient_time_to]"> <option></option> {% FOR convenient_time_to_list %} <option value="{convenient_time_to_list.HOUR_INT}" {% IF convenient_time_to_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_to_list.HOUR}</option> {% ENDFOR %} </select>
и замените его на
<input id="deliveryConvenientDate" name="form[delivery][convenient_date]" value="{ORDER_FORM_DELIVERY_CONVENIENT_DATE}" {% IF SETTINGS_ORDER_FIELDS_CONVENIENT_TIME=1 %}class="required"{% ENDIF %} /> до <select name="form[delivery][convenient_time_from]"> <option></option> {% FOR convenient_time_from_list %}{% 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 %}{% ENDFOR %} </select>
#120
Отправлено 17 Октябрь 2014 - 09:21
Сake (11 Октябрь 2014 - 05:31) писал:
$("#deliveryConvenientDate").datepicker({ dayNames : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'], dayNamesMin : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ], closeText : 'Готово', currentText : 'Сегодня' , duration : '', monthNames : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'], yearRange : "-6:+6", dateFormat : 'dd.mm.yy', minDate : new Date(), firstDay : 1 });
и замените его на
var minDate = new Date(); if ((minDate.getHours() >= 16 && minDate.getDay() == 4) || (minDate.getHours() <= 16 && minDate.getDay() == 5)) { minDate.setDate(minDate.getDate() + (minDate.getDay() == 4 ? 3 : 2)); } $("#deliveryConvenientDate").datepicker({ dayNames : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'], dayNamesMin : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ], closeText : 'Готово', currentText : 'Сегодня' , duration : '', monthNames : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'], yearRange : "-6:+6", dateFormat : 'dd.mm.yy', minDate : minDate, firstDay : 1, beforeShowDay : function(date) {return([date.getDay() == 0 || date.getDay() == 6, ''])} });
далее в шаблоне "Оформление заказа" или "Быстрый заказ" найдите код
<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 %} <option value="{convenient_time_from_list.HOUR_INT}" {% IF convenient_time_from_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_from_list.HOUR}</option> {% ENDFOR %} </select> до <select name="form[delivery][convenient_time_to]"> <option></option> {% FOR convenient_time_to_list %} <option value="{convenient_time_to_list.HOUR_INT}" {% IF convenient_time_to_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_to_list.HOUR}</option> {% ENDFOR %} </select>
и замените его на
<input id="deliveryConvenientDate" name="form[delivery][convenient_date]" value="{ORDER_FORM_DELIVERY_CONVENIENT_DATE}" {% IF SETTINGS_ORDER_FIELDS_CONVENIENT_TIME=1 %}class="required"{% ENDIF %} /> до <select name="form[delivery][convenient_time_from]"> <option></option> {% FOR convenient_time_from_list %}{% 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 %}{% ENDFOR %} </select>
Сake (11 Октябрь 2014 - 05:31) писал:
$("#deliveryConvenientDate").datepicker({ dayNames : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'], dayNamesMin : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ], closeText : 'Готово', currentText : 'Сегодня' , duration : '', monthNames : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'], yearRange : "-6:+6", dateFormat : 'dd.mm.yy', minDate : new Date(), firstDay : 1 });
и замените его на
var minDate = new Date(); if ((minDate.getHours() >= 16 && minDate.getDay() == 4) || (minDate.getHours() <= 16 && minDate.getDay() == 5)) { minDate.setDate(minDate.getDate() + (minDate.getDay() == 4 ? 3 : 2)); } $("#deliveryConvenientDate").datepicker({ dayNames : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'], dayNamesMin : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ], closeText : 'Готово', currentText : 'Сегодня' , duration : '', monthNames : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'], yearRange : "-6:+6", dateFormat : 'dd.mm.yy', minDate : minDate, firstDay : 1, beforeShowDay : function(date) {return([date.getDay() == 0 || date.getDay() == 6, ''])} });
далее в шаблоне "Оформление заказа" или "Быстрый заказ" найдите код
<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 %} <option value="{convenient_time_from_list.HOUR_INT}" {% IF convenient_time_from_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_from_list.HOUR}</option> {% ENDFOR %} </select> до <select name="form[delivery][convenient_time_to]"> <option></option> {% FOR convenient_time_to_list %} <option value="{convenient_time_to_list.HOUR_INT}" {% IF convenient_time_to_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_to_list.HOUR}</option> {% ENDFOR %} </select>
и замените его на
<input id="deliveryConvenientDate" name="form[delivery][convenient_date]" value="{ORDER_FORM_DELIVERY_CONVENIENT_DATE}" {% IF SETTINGS_ORDER_FIELDS_CONVENIENT_TIME=1 %}class="required"{% ENDIF %} /> до <select name="form[delivery][convenient_time_from]"> <option></option> {% FOR convenient_time_from_list %}{% 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 %}{% ENDFOR %} </select>
К сожалению, по поводу первой замены, у меня нет этого блока в в main.js.
По второй замене, нашёл, заменил, но ничего не произошло, все осталось по-старому. В чём может быть проблема? как её можно решить?
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных