Перейти к содержимому


Как Ограничить Время Доставки?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 300

#21 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 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');
	}
  });
}


#22 Kengashop

Kengashop

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

  • Пользователи
  • PipPip
  • 49 сообщений
  • ГородПермь

Отправлено 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 часовым интервалом!!! ScreenShot 14.jpg
То есть клиент выставил начальное время и конечное ОДИН раз и вроде все ок, НО,,,

2. Допустим клиент передумал и говорит, дай-ка я поменяю начальный интервал. Заходит в графу "С" и видит там, что ему уже можно указать начало интервала раньше ТЕКУЩЕГО времени. ScreenShot 15.jpg

3. Но вот заходишь допустим в другое число, завтра или через неделю и видишь, что система выдает тебе начало времени доставки в соответствии с текущим временем (см. пункт 1) (((( ScreenShot 16.jpg

P.S.: надеюсь, что упорство - это наш с вами взаимный конек, и мы справимся с этой задачкой))) очень скоро)

СПАСИБО!!!

Может что в шаблоне оформления заказа поменять...)))?

#23 Kengashop

Kengashop

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

  • Пользователи
  • PipPip
  • 49 сообщений
  • ГородПермь

Отправлено 17 Январь 2013 - 16:43

Так прямо хотелось уже с этой темой про интервалы закончить сегодня))) Может кто поправит код? А? :)

#24 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 17 Январь 2013 - 23:17

Так поля доступные раньше интервала выбрать нельзя, они отключены. По сути их можно удалить, для этого достаточно в коде заменить

attr('disabled','disabled')

на

remove()


Не совсем только понятна причина изменения поля С если изменить значение в поле До. По идее такой реакции быть не должно, не могли бы вы привести пример такого поведения у вас на сайте, может у вас используется еще какой-то код, который создает такую ситуацию.

#25 Kengashop

Kengashop

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

  • Пользователи
  • PipPip
  • 49 сообщений
  • ГородПермь

Отправлено 20 Январь 2013 - 15:12

Просмотр сообщенияVaccina (17 Январь 2013 - 23:17) писал:

Так поля доступные раньше интервала выбрать нельзя, они отключены. По сути их можно удалить, для этого достаточно в коде заменить

attr('disabled','disabled')

на

remove()


Не совсем только понятна причина изменения поля С если изменить значение в поле До. По идее такой реакции быть не должно, не могли бы вы привести пример такого поведения у вас на сайте, может у вас используется еще какой-то код, который создает такую ситуацию.

Выждал несколько дней... Думал может что исправиться))) Но...
Когда вставил вышеобозначенный код, время, которое должно быть недоступно для заказа скрылось! И это уже само по себе суперррррр))).
Но вот загвоздка... Привязка текущего времени и начала времени в графе "С" связано не только с текущей датой, но и со всеми последующими. То есть, если текущее время допустим 15 часов, то в графе "С" отображается время, начиная с 17 часов, что правильно для текущей даты, а вот почему это же время отражается и для последующих дней???

Для примера - 2 пары скриншотов (первый - все правильно, второй - с датой позднее текущей):
ScreenShot 18.jpg ScreenShot 19.jpg
ScreenShot 22.jpg ScreenShot 24.jpg

#26 Kengashop

Kengashop

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

  • Пользователи
  • PipPip
  • 49 сообщений
  • ГородПермь

Отправлено 20 Январь 2013 - 15:30

Просмотр сообщенияVaccina (17 Январь 2013 - 23:17) писал:

Так поля доступные раньше интервала выбрать нельзя, они отключены. По сути их можно удалить, для этого достаточно в коде заменить

attr('disabled','disabled')

на

remove()


Не совсем только понятна причина изменения поля С если изменить значение в поле До. По идее такой реакции быть не должно, не могли бы вы привести пример такого поведения у вас на сайте, может у вас используется еще какой-то код, который создает такую ситуацию.

На всякий случай прикрепляю свои коды в "Оформление заказа" и "main.js". Точнее только последний... второй не прикрепился... в течение 10 минут выдавал мне ошибку IO

Прикрепленные файлы

  • Прикрепленный файл  main.js.txt   27,13К   485 Количество загрузок:


#27 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 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 Kengashop

Kengashop

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

  • Пользователи
  • PipPip
  • 49 сообщений
  • ГородПермь

Отправлено 22 Январь 2013 - 09:04

А вставить туда же, после

$(document).ready(function(){    и  до кода // Кнопки на сайте если подгружен модуль Jquery.UI

в шаблон main.js ???

#29 Koderhan

Koderhan

    Активный участник

  • Модератоpы
  • 6 227 сообщений

Отправлено 22 Январь 2013 - 15:43

$(document).ready(function(){
Код внутри этого блока будет выполняться только после загрузки всей страницы.

Цитата

в шаблон main.js ???
да. JavaScript код обычно пишется в main.js

#30 Kengashop

Kengashop

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

  • Пользователи
  • PipPip
  • 49 сообщений
  • ГородПермь

Отправлено 22 Январь 2013 - 16:34

:) :) :) !!!
ай, спасибо! вроде работает)))
СПАСИБО!!!

#31 Kengashop

Kengashop

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

  • Пользователи
  • PipPip
  • 49 сообщений
  • ГородПермь

Отправлено 23 Январь 2013 - 16:09

Нет предела совершенству... :)
Поэтому еще пара вопросов по интервалам доставки:
1. Какой параметр в вышеобозначенном коде (Vaccina, 22.01.2013 в 03.15) отвечает за минимальную разницу между временем в графе "С" и временем в графе "До"?
Сейчас стоит два часа. Как я могу самостоятельно менять этот интервал допустим с 2-х часов на 1 час, или на 3 часа?

2. Возможна ли привязка способа доставки к алгоритму выведения времени с графах "С" и "ДО"?
То есть, при выборе варианта "Доставка до дома и офиса", алгоритм как сейчас: разница между текущим временем и временем начала интервала 2 часа, а также  разница между временем в графе "С" и временем в графе "До" также 2 часа.
А при выборе варианта "Самовывоз" - алгоритм немного другой: разница между текущим временем и временем начала интервала 2 часа, а разница между временем в графе "С" и временем в графе "До"  1 час или не регламентируется.

#32 Koderhan

Koderhan

    Активный участник

  • Модератоpы
  • 6 227 сообщений

Отправлено 23 Январь 2013 - 17:46

Цитата

1. Какой параметр в вышеобозначенном коде (Vaccina, 22.01.2013 в 03.15) отвечает за минимальную разницу между временем в графе "С" и временем в графе "До"?
Попробуйте изменить значение у переменной interval.

Цитата

2. Возможна ли привязка способа доставки к алгоритму выведения времени с графах "С" и "ДО"?
Насколько мне известно, к сожалению такое реализовать  нет возможности.

#33 Kengashop

Kengashop

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

  • Пользователи
  • PipPip
  • 49 сообщений
  • ГородПермь

Отправлено 24 Январь 2013 - 11:55

Насколько мне известно, к сожалению такое реализовать нет возможности.

Как бы мне точно определиться? Можно или нет?

Попробуйте изменить значение у переменной interval.
Пробовал - менял...
В коде я так понимаю есть два интервала:
- один отражает разницу между текущим временем и начальным временем в графе "С"
- второй отражает минимальный интервал между временем в графе "С" и "ДО".

Какие параметры нужно менять, чтобы регулировать оба эти интервала самостоятельно и независимо друг от друга?
У меня меняется только первый интервал...(

#34 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 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 Kengashop

Kengashop

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

  • Пользователи
  • PipPip
  • 49 сообщений
  • ГородПермь

Отправлено 27 Январь 2013 - 11:06

Vaccina, спасибо! Боюсь сглазить, но вроде все работает... :)

#36 Kengashop

Kengashop

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

  • Пользователи
  • PipPip
  • 49 сообщений
  • ГородПермь

Отправлено 27 Январь 2013 - 11:11

Возможна ли привязка способа доставки к алгоритму выведения времени с графах "С" и "ДО"?
А вот вышеобозначенная привязка  все-таки точно невозможна???
Мне в идеале нужно, чтобы при выборе одного способа доставки я мог поставить одни интервалы (см. выше), а при другом способе другие интервалы...

#37 Koderhan

Koderhan

    Активный участник

  • Модератоpы
  • 6 227 сообщений

Отправлено 27 Январь 2013 - 11:34

К сожалению интервал не возможно привязать к способу доставки.

#38 Kengashop

Kengashop

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

  • Пользователи
  • PipPip
  • 49 сообщений
  • ГородПермь

Отправлено 31 Январь 2013 - 20:34

ААА!!! Помогите!
Что-то с выбором интервалов для доставки... До этого все работало отлично. Сейчас косяк! А у меня ночь - это хлебное время для заказов!!!

Время вечер 31 числа, а он мне выдает все интервалы доставки (с 10 до 22 часов), время текущее уже полдвенадцатого!!!
А если переключаешь на февраль, то вообще графы не активны и выдаются пустыми. А IE графы выдаются, но они не активны.

Может быть, что-то с датами в коде напутано... Тут еще стыковка двух месяцев???
Помогите...
ScreenShot 28.jpg ScreenShot 29.jpg ScreenShot 30.jpg

#39 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 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 eee1973

eee1973

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 203 сообщений

Отправлено 14 Март 2013 - 08:35

Здравствуйте, скачал с форума код, чтобы время доставки можно было выбрать только из двух интервалов. Помогите пожалуйста его переделать, чтобы можно было выбирать из трех интервалов: с 10 до 14, с 14 до 18 и с 18 до 21.

<!-- Если запрашивается поле удобного времени доставки  -->
								{% 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 анонимных