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


Доставка


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

#1 Samonr

Samonr

    Новичок

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

Отправлено 28 Июль 2011 - 13:59

Как сделать чтобы доставку клиент мог выбирать не так как сейчас ДАТУ и интервал времени С и ДО любые цифры и потом клиенту сложно объяснить что с 9 до 11 это мало очень времени для курьера.
а мне надо ДАТУ выбирает и интервал уже готовый с 10.00 до 15.00 или с 13.00 до 18.00 или с 15.00 до 20.00
Вот и еще но это уже не обязательно, но хотелось бы чтобы дату не ранее чем через день.

#2 support

support

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

  • Модераторы
  • 3 683 сообщений
  • ГородМосква

Отправлено 01 Август 2011 - 20:51

Просмотр сообщенияSamonr (28 Июль 2011 - 13:59) писал:

Как сделать чтобы доставку клиент мог выбирать не так как сейчас ДАТУ и интервал времени С и ДО любые цифры и потом клиенту сложно объяснить что с 9 до 11 это мало очень времени для курьера.
а мне надо ДАТУ выбирает и интервал уже готовый с 10.00 до 15.00 или с 13.00 до 18.00 или с 15.00 до 20.00
Вот и еще но это уже не обязательно, но хотелось бы чтобы дату не ранее чем через день.
Это можно реализовать с помощью использования JS логики, например при выборе времени "С" не давать выбрать время "По" с интервалом меньше 4 часов и наоборот для поля "С". Сделав проверку на заполненность поля.

Для даты можно использовать аналогичный алгоритм, запретив указывать дату меньше определённой, например так:
minDate: new Date(2011,08-1,05)

Собственно код для обоих настроек для раздела "Сайт" > "Редактор тем" файл main.js:

Вставляем в самый конец, перед скобочками, вот этими:
});

  // Обозначаем переменные для более удобного доступа
  // Поле выбора времени "с"
  var OrderDeliveryTimeFrom = $('select[name="form[delivery][convenient_time_from]"]');
  // Поле выбора времени "По"
  var OrderDeliveryTimeTo = $('select[name="form[delivery][convenient_time_to]"]');
  // Минимальный диапазон для доставки
  var OrderDeliveryTimeMinRange = 3;

  // Функция сверки правильности дат
  function OrderDeliveryTimeVerify () {
	if(OrderDeliveryTimeTo.val() > 0 && OrderDeliveryTimeFrom.val() > 0 && OrderDeliveryTimeTo.val() - OrderDeliveryTimeMinRange < OrderDeliveryTimeFrom.val()) {
	  alert('Минимальный диапазон для доставки составляет ' + OrderDeliveryTimeMinRange + ' часа. Пожалуйста укажите другое время.');
	  return false;
	} else {
	  return true;
	}
  }
  
  // Действие при смене поля удобного времени, с которого можно производить доставку
  OrderDeliveryTimeFrom.change(function(){
	
	// Изменение возможной выбираемой даты в зависимости от выбранного минимального времени доставки
	if(OrderDeliveryTimeFrom.val()>0) {
	  var min = parseInt(OrderDeliveryTimeFrom.val()) + OrderDeliveryTimeMinRange;
	  
	  // Проставляем блокировки полей выбора
	  OrderDeliveryTimeTo.find('option').each(function(){
		
		if( $(this).attr('value') < min ) {
		  $(this).attr('disabled', true);
		} else {
		  $(this).attr('disabled', false);
		} 
	  })
	} else {
	  // Снимаем блокировки полей выбора максимально даты
	  OrderDeliveryTimeTo.find('option').attr('disabled', false);
	}
	
	// Собственно возвращаем результат проверки валидности данных.
	return OrderDeliveryTimeVerify();
  });
  
  // Действие при смене поля удобного времени, до которого можно производить доставку
  OrderDeliveryTimeTo.change(function(){
	
	// Изменение возможной выбираемой даты в зависимости от выбранного максимального времени доставки
	if(OrderDeliveryTimeTo.val()>0) {
	  var max = parseInt(OrderDeliveryTimeTo.val()) - OrderDeliveryTimeMinRange;
	  
	  // Проставляем блокировки полей выбора
	  OrderDeliveryTimeFrom.find('option').each(function(){
		if( $(this).attr('value') > max ) {
		  $(this).attr('disabled', true);
		} else {
		  $(this).attr('disabled', false);
		} 
	  })
	} else {
	  // Снимаем блокировки полей выбора максимально даты
	  OrderDeliveryTimeFrom.find('option').attr('disabled', false);
	}
	
	// Собственно возвращаем результат проверки валидности данных.
	return OrderDeliveryTimeVerify();
  });

В итоге это позволит не давать пользователю выбирать не верное время.

Для даты я изменил старый код с:
$("#deliveryConvenientDate").datepicker({
	dayNames		: ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'],
	dayNamesMin	  : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ],
	closeText		: 'Готово',
	currentText	  : 'Сегодня' ,
	duration		: '',
	monthNames	  : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Окрябрь','Ноябрь','Декабрь'],
	monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'],
	yearRange		: "-6:+6",
	dateFormat	  : 'dd.mm.yy',
	minDate		 : new Date(),
	firstDay		: 1
  });

на:
  // Сегдоня
  var myDate = new Date();
  
  // Добавляем день
  myDate.setDate(myDate.getDate() + 1);

   $("#deliveryConvenientDate").datepicker({
	dayNames		: ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'],
	dayNamesMin	  : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ],
	closeText		: 'Готово',
	currentText	  : 'Сегодня' ,
	duration		: '',
	monthNames	  : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Окрябрь','Ноябрь','Декабрь'],
	monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'],
	yearRange		: "-6:+6",
	dateFormat	  : 'dd.mm.yy',
	minDate		 : myDate,
	firstDay		: 1
  });

Дата теперь выбирается только следующего дня.

Скриншоты прилагаются:
change-time1.jpg
change-time2.jpg
change-time3.jpg

#3 Samonr

Samonr

    Новичок

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

Отправлено 02 Август 2011 - 10:56

а как убрать ненужное время т.е. 1.00 2.00 и т.д.
У нас доставка с 9 до 22.00 т.е. цифры в этих пределах только и оставить

#4 support

support

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

  • Модераторы
  • 3 683 сообщений
  • ГородМосква

Отправлено 05 Август 2011 - 16:08

Просмотр сообщенияSamonr (02 Август 2011 - 10:56) писал:

а как убрать ненужное время т.е. 1.00 2.00 и т.д.
У нас доставка с 9 до 22.00 т.е. цифры в этих пределах только и оставить
Для этого будет достаточно добавить условие в поле вывода времени, заменив старый код в разделе "Сайт" > "Редактор тем" в шаблоне "оформление заказа" с:
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>

на:
c <select name="form[delivery][convenient_time_from]">
  <option></option>
	{% FOR convenient_time_from_list %}
	  {% IF convenient_time_from_list.HOUR_INT>9 %}
		{% IF convenient_time_from_list.HOUR_INT<22 %}
		  <option value="{convenient_time_from_list.HOUR_INT}" {% IF convenient_time_from_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_from_list.HOUR}</option>
		{% ENDIF %}
	  {% ENDIF %}
	{% ENDFOR %}
  </select>
до
  <select name="form[delivery][convenient_time_to]">
	<option></option>
	{% FOR convenient_time_to_list %}
	  {% IF convenient_time_to_list.HOUR_INT>9 %}
		{% IF convenient_time_to_list.HOUR_INT<22 %}
		  <option value="{convenient_time_to_list.HOUR_INT}" {% IF convenient_time_to_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_to_list.HOUR}</option>
		{% ENDIF %}
	  {% ENDIF %}
	{% ENDFOR %}
  </select>


#5 Samonr

Samonr

    Новичок

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

Отправлено 05 Август 2011 - 19:22

выдает ошибку когда выбираю дату и потом выбираю время 9.00 то всплывают несколько окон.
можете сами попробывать www.5baby.ru
просьба скорее исправить

#6 Vaccina

Vaccina

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

  • Модераторы
  • 23 736 сообщений

Отправлено 06 Август 2011 - 00:19

Хм. попробуйте в данном блоке

if( $(this).attr('value') < min ) {
		  $(this).attr('disabled', true);
		  alert($(this).attr('value') + ' ' + min);
		} else {
		  $(this).attr('disabled', false);
		}

удалить строчку

alert($(this).attr('value') + ' ' + min);

данный блок находиться в файле main.js

#7 Samonr

Samonr

    Новичок

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

Отправлено 06 Август 2011 - 09:40

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

#8 support

support

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

  • Модераторы
  • 3 683 сообщений
  • ГородМосква

Отправлено 11 Август 2011 - 15:32

Просмотр сообщенияSamonr (06 Август 2011 - 09:40) писал:

Да заработало, спасибо. А как убрать воскресенье из выбора или это нереально? У нас доставка с понедельника по субботу, чтобы клиент уже автоматом воскресенье не мог выбирать.
Здесь можно сделать проверку после ввода даты, проверять, если дата - воскресенье, то выдавать сообщение о том что заказ будет доставлен в понедельник и автоматически менять дату на +1. Наверняка есть возможность сделать как-то с datapicker-ом, но я к сожалению в документации не увидел как это сделать.

#9 Pitrof

Pitrof

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

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

Отправлено 02 Ноябрь 2011 - 20:35

А Изменить временные рамки в субботу возможно?

#10 Vaccina

Vaccina

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

  • Модераторы
  • 23 736 сообщений

Отправлено 03 Ноябрь 2011 - 18:59

Думаю что к сожалению не получиться.




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных