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


Компактный Список Способов Доставки


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

#1 keadis

keadis

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

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

Отправлено 30 Сентябрь 2014 - 13:01

Здравствуйте!

Сейчас при оформлении заказа раскрывается весь список способов доставки вместе с подпунктами (Зонами доставки).
См изображение
Доставка.jpg

Обратите внимание, что там ещё километр прокрутки.

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

Тот вариант, которые есть сейчас отпугнёт кого угодно. И уж точно не похож на быстрый заказ.

Спасибо!

#2 Ирина345

Ирина345

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

  • Модераторы
  • 5 709 сообщений

Отправлено 30 Сентябрь 2014 - 15:25

Просмотр сообщенияkeadis (30 Сентябрь 2014 - 13:01) писал:

Здравствуйте!

Сейчас при оформлении заказа раскрывается весь список способов доставки вместе с подпунктами (Зонами доставки).
См изображение
Прикрепленный файл Доставка.jpg

Обратите внимание, что там ещё километр прокрутки.

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

Тот вариант, которые есть сейчас отпугнёт кого угодно. И уж точно не похож на быстрый заказ.

Спасибо!
Здравствуйте, Вам будет полезна данная тема форума
http://forum.storela...-зоны-доставки/

http://forum.storela...сок-в-доставке/

#3 keadis

keadis

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

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

Отправлено 02 Октябрь 2014 - 17:40

Просмотр сообщенияИрина345 (30 Сентябрь 2014 - 15:25) писал:

Здравствуйте, Вам будет полезна данная тема форума
http://forum.storela...-зоны-доставки/

http://forum.storela...сок-в-доставке/
Проблема решилась частично.  Выпадающие списки с Зонами доставки появились, но при выборе Зоны - нигде не отображается Цена этой зоны.
Ну или не подставляется в место основного способа.

Прошу протестировать: posterof.ru. Только добавьте в корзину недорогой товар, чтобы видеть изменение цены при смене способа, а то для большинства Зон стоит правило "0 руб при заказе свыше 5000р.".

Я предполагаю, всё же, что шаблон "Оформление заказа" в новой теме "Хамелеон"  изменён и к нему в полной мере не подходят инструкции из предыдущих тем.
И файл main.js не содержит тех блоков, о которых говорилось в указанных вами инструкциях. Но в любом случае я вставил везде, где требуется нужные блоки.

Спасибо.

#4 Ирина345

Ирина345

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

  • Модераторы
  • 5 709 сообщений

Отправлено 05 Октябрь 2014 - 14:12

Просмотр сообщенияkeadis (02 Октябрь 2014 - 17:40) писал:

Проблема решилась частично.  Выпадающие списки с Зонами доставки появились, но при выборе Зоны - нигде не отображается Цена этой зоны.
Ну или не подставляется в место основного способа.

Прошу протестировать: posterof.ru. Только добавьте в корзину недорогой товар, чтобы видеть изменение цены при смене способа, а то для большинства Зон стоит правило "0 руб при заказе свыше 5000р.".

Я предполагаю, всё же, что шаблон "Оформление заказа" в новой теме "Хамелеон"  изменён и к нему в полной мере не подходят инструкции из предыдущих тем.
И файл main.js не содержит тех блоков, о которых говорилось в указанных вами инструкциях. Но в любом случае я вставил везде, где требуется нужные блоки.

Спасибо.
Здравствуйте, уточните какие изменения Вы успели произвести

#5 keadis

keadis

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

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

Отправлено 05 Октябрь 2014 - 14:49

Просмотр сообщенияИрина345 (05 Октябрь 2014 - 14:12) писал:

Здравствуйте, уточните какие изменения Вы успели произвести

В файл main.js вставил код
$(function() {
if($('.deliveryRadio').length) {
		 $('.deliveryRadio:checked').closest('form').submit(function() {
		 var tbody = $('.deliveryRadio:checked').closest('tbody');
		 if(!tbody.find('select').length || parseInt(tbody.find('select').val())) {
				 return(true);
		 }
		 alert('Пожалуйста, выберите зону доставки');
		 return(false);
		 });
}
});
// Смена стоимости доставки при выборе конкретной зоны доставки
$('.orderInfo select').change(function(){
var value = $(this).find('option:selected').attr('data-price');
$('tbody[rel="' + $(this).attr('data-deliveryid') + '"] .orderStageDeliveryDefaultPrice .num').text(value);
// Установка шарика на пункт зоны доставки
$('#deliveryId' + $(this).attr('data-deliveryid')).click();
});

Хочу обратить внимание, что в файле main.js не было строк кода
// Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
$('.deliveryZoneRadio').click(function(){

А в шаблоне "Оформление заказа" выполнил инструкцию из сообщения в рекомендуемой вами теме форума

#6 keadis

keadis

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

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

Отправлено 14 Октябрь 2014 - 00:19

Прошу помочь разрешить ту же проблему! В теме "Хамелеон" не подходят инструкции для других тем.
Зоны доставки с выпадающими списками появились, но стоимость не меняется при выборе разных зон.

Я повторюсь.

1) Выполнил подряд инструкции из сообщения  Ссылка 1
Здесь есть нюанс: в теме "Хамелон" для шаблона "Оформление заказа"    указанный в данной инструкции блок кода не совсем подходит. При замене кода из этой инструкции вылезает  сообщение "Ошибка компиляции шаблона. Не закрытый тег «IF» строка 22".   Для того, чтобы в дальнейшем продолжать выполнение инструкций я методом тыка вставил  {% ENDIF %} в строку 92.

2) Затем выполнил инструкцию Ссылка 2

Всё это делалось пока только в шаблоне "Оформление заказа" (т.е. не "Быстрый заказ")
Но и для быстрого заказа это тоже необходимо. Можно ли как-то выложить единую цепочку инструкций (пусть даже ссылками на разные ветки форума), но чтобы и для "Быстрого заказа" решить данный вопрос?

#7 Сake

Сake

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

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

Отправлено 14 Октябрь 2014 - 05:13

У вас событие добавляется раньше чем сам элемент появляется на странице. Необходимо сделать следующее - в файле main.js найдите код

$(function(){
  $('.goods-cat-image-medium-square').click(function(){
	uri = $(this).find('a').attr('href');
	document.location.href = uri
  })
})
// Действия при выборе варианта доставки на этапе оформления заказа
$('.deliveryRadio').click(function(){
// Если текущая выделенная зона доставки не относится к выбранному варианту доставки, снимаем выделение с зоны доставки
if($('.deliveryZoneRadio:checked').attr('deliveryid') != $(this).val()) {
		 $('.deliveryZoneRadio:checked').click().attr('checked', false);
}
});
// Смена стоимости доставки при выборе конкретной зоны доставки
$('.deliveryZoneRadio').change(function(){
var value = $(this).find('option:selected').attr('data-price');
$('tbody[rel="' + $(this).attr('data-deliveryid') + '"] .orderStageDeliveryDefaultPrice .num').text(value).parent().parent().show();
$('tbody[rel="' + $(this).attr('data-deliveryid') + '"] .orderStageDeliveryZonePrice:visible').hide();
// Установка шарика на пункт зоны доставки
$('#deliveryId' + $(this).attr('data-deliveryid')).click();
// ставим куки
setCookie('delivery_zone_id', $(this).find('option:selected').attr('value'));
});

// Если есть куки
if(getCookie('delivery_zone_id')){
// находим значение варианта оплаты по куки файлу
// устанавливаем в селект поле нужный пункт
// выполняем JS действие при изменении поля варианта оплаты
$('.orderInfo select > option[value="' + getCookie('delivery_zone_id') + '"]').parent().val(getCookie('delivery_zone_id')).change();
}

и замените его на

$(function(){
  $('.goods-cat-image-medium-square').click(function(){
	uri = $(this).find('a').attr('href');
	document.location.href = uri
  })
 
// Действия при выборе варианта доставки на этапе оформления заказа
$('.deliveryRadio').click(function(){
// Если текущая выделенная зона доставки не относится к выбранному варианту доставки, снимаем выделение с зоны доставки
if($('.deliveryZoneRadio:checked').attr('deliveryid') != $(this).val()) {
		 $('.deliveryZoneRadio:checked').click().attr('checked', false);
}
});
// Смена стоимости доставки при выборе конкретной зоны доставки
$('.deliveryZoneRadio').change(function(){
var value = $(this).find('option:selected').attr('data-price');
$('tbody[rel="' + $(this).attr('data-deliveryid') + '"] .orderStageDeliveryDefaultPrice .num').text(value).parent().parent().show();
$('tbody[rel="' + $(this).attr('data-deliveryid') + '"] .orderStageDeliveryZonePrice:visible').hide();
// Установка шарика на пункт зоны доставки
$('#deliveryId' + $(this).attr('data-deliveryid')).click();
// ставим куки
setCookie('delivery_zone_id', $(this).find('option:selected').attr('value'));
});

// Если есть куки
if(getCookie('delivery_zone_id')){
// находим значение варианта оплаты по куки файлу
// устанавливаем в селект поле нужный пункт
// выполняем JS действие при изменении поля варианта оплаты
$('.orderInfo select > option[value="' + getCookie('delivery_zone_id') + '"]').parent().val(getCookie('delivery_zone_id')).change();
}
});

По сути необходимо было перенести "});" немного ниже, тем самым обхватив весь код в "$(function(){".

Аналогичная ситуация и в шаблоне "Быстрый заказ". Найдите код

$(function(){  
	$('.orderStageDeliveryListTable').on('change','.deliveryRadio',function(){
	  $('.deliveryRadio,.deliveryZoneRadio').each(function(){
		$(this).removeAttr('checked');
	  })
	  var id = $(this).val()
		 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);		 
	  $(this).prop('checked',true);
	  fz.prop('checked',true);  
	  if($('.zones').length){ 
		price = fz.next().find('.num').text();
		oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
		if(price != ''){
		  oldPrice.text(price);
		}
	  }
   })
})   
  // Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
  $('.deliveryZoneRadio').click(function(){
	var id = $(this).attr('deliveryid'),
	price = $(this).next().find('.num').text()
	,oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
	if(price != ''){
	  oldPrice.text(price);
	}
	$('.deliveryRadio').each(function(){
	  $(this).removeAttr('checked');  
	  if($(this).val() == id){
	   $(this).prop('checked',true);
	  }else{
		$(this).removeAttr('checked');
	  }
	})
  });

и замените его на

$(function(){  
	$('.orderStageDeliveryListTable').on('change','.deliveryRadio',function(){
	  $('.deliveryRadio,.deliveryZoneRadio').each(function(){
		$(this).removeAttr('checked');
	  })
	  var id = $(this).val()
		 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);		 
	  $(this).prop('checked',true);
	  fz.prop('checked',true);  
	  if($('.zones').length){ 
		price = fz.next().find('.num').text();
		oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
		if(price != ''){
		  oldPrice.text(price);
		}
	  }
   })
 
  // Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
  $('.deliveryZoneRadio').click(function(){
	var id = $(this).attr('deliveryid'),
	price = $(this).next().find('.num').text()
	,oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
	if(price != ''){
	  oldPrice.text(price);
	}
	$('.deliveryRadio').each(function(){
	  $(this).removeAttr('checked');  
	  if($(this).val() == id){
	   $(this).prop('checked',true);
	  }else{
		$(this).removeAttr('checked');
	  }
	})
  });
});


#8 keadis

keadis

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

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

Отправлено 14 Октябрь 2014 - 11:01

С Быстрым заказом не получается!

#9 keadis

keadis

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

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

Отправлено 15 Октябрь 2014 - 23:57

Просмотр сообщенияСake (14 Октябрь 2014 - 05:13) писал:

У вас событие добавляется раньше чем сам элемент появляется на странице. Необходимо сделать следующее - в файле main.js найдите код

$(function(){
$('.goods-cat-image-medium-square').click(function(){
uri = $(this).find('a').attr('href');
document.location.href = uri
})
})
// Действия при выборе варианта доставки на этапе оформления заказа
$('.deliveryRadio').click(function(){
// Если текущая выделенная зона доставки не относится к выбранному варианту доставки, снимаем выделение с зоны доставки
if($('.deliveryZoneRadio:checked').attr('deliveryid') != $(this).val()) {
		 $('.deliveryZoneRadio:checked').click().attr('checked', false);
}
});
// Смена стоимости доставки при выборе конкретной зоны доставки
$('.deliveryZoneRadio').change(function(){
var value = $(this).find('option:selected').attr('data-price');
$('tbody[rel="' + $(this).attr('data-deliveryid') + '"] .orderStageDeliveryDefaultPrice .num').text(value).parent().parent().show();
$('tbody[rel="' + $(this).attr('data-deliveryid') + '"] .orderStageDeliveryZonePrice:visible').hide();
// Установка шарика на пункт зоны доставки
$('#deliveryId' + $(this).attr('data-deliveryid')).click();
// ставим куки
setCookie('delivery_zone_id', $(this).find('option:selected').attr('value'));
});

// Если есть куки
if(getCookie('delivery_zone_id')){
// находим значение варианта оплаты по куки файлу
// устанавливаем в селект поле нужный пункт
// выполняем JS действие при изменении поля варианта оплаты
$('.orderInfo select > option[value="' + getCookie('delivery_zone_id') + '"]').parent().val(getCookie('delivery_zone_id')).change();
}

и замените его на

$(function(){
$('.goods-cat-image-medium-square').click(function(){
uri = $(this).find('a').attr('href');
document.location.href = uri
})

// Действия при выборе варианта доставки на этапе оформления заказа
$('.deliveryRadio').click(function(){
// Если текущая выделенная зона доставки не относится к выбранному варианту доставки, снимаем выделение с зоны доставки
if($('.deliveryZoneRadio:checked').attr('deliveryid') != $(this).val()) {
		 $('.deliveryZoneRadio:checked').click().attr('checked', false);
}
});
// Смена стоимости доставки при выборе конкретной зоны доставки
$('.deliveryZoneRadio').change(function(){
var value = $(this).find('option:selected').attr('data-price');
$('tbody[rel="' + $(this).attr('data-deliveryid') + '"] .orderStageDeliveryDefaultPrice .num').text(value).parent().parent().show();
$('tbody[rel="' + $(this).attr('data-deliveryid') + '"] .orderStageDeliveryZonePrice:visible').hide();
// Установка шарика на пункт зоны доставки
$('#deliveryId' + $(this).attr('data-deliveryid')).click();
// ставим куки
setCookie('delivery_zone_id', $(this).find('option:selected').attr('value'));
});

// Если есть куки
if(getCookie('delivery_zone_id')){
// находим значение варианта оплаты по куки файлу
// устанавливаем в селект поле нужный пункт
// выполняем JS действие при изменении поля варианта оплаты
$('.orderInfo select > option[value="' + getCookie('delivery_zone_id') + '"]').parent().val(getCookie('delivery_zone_id')).change();
}
});

По сути необходимо было перенести "});" немного ниже, тем самым обхватив весь код в "$(function(){".

Аналогичная ситуация и в шаблоне "Быстрый заказ". Найдите код

$(function(){
$('.orderStageDeliveryListTable').on('change','.deliveryRadio',function(){
	 $('.deliveryRadio,.deliveryZoneRadio').each(function(){
	 $(this).removeAttr('checked');
	 })
	 var id = $(this).val()
		 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);		
	 $(this).prop('checked',true);
	 fz.prop('checked',true);
	 if($('.zones').length){
	 price = fz.next().find('.num').text();
	 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
	 if(price != ''){
		 oldPrice.text(price);
	 }
	 }
})
})
// Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
$('.deliveryZoneRadio').click(function(){
var id = $(this).attr('deliveryid'),
price = $(this).next().find('.num').text()
,oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
if(price != ''){
	 oldPrice.text(price);
}
$('.deliveryRadio').each(function(){
	 $(this).removeAttr('checked');
	 if($(this).val() == id){
	 $(this).prop('checked',true);
	 }else{
	 $(this).removeAttr('checked');
	 }
})
});

и замените его на

$(function(){
$('.orderStageDeliveryListTable').on('change','.deliveryRadio',function(){
	 $('.deliveryRadio,.deliveryZoneRadio').each(function(){
	 $(this).removeAttr('checked');
	 })
	 var id = $(this).val()
		 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);		
	 $(this).prop('checked',true);
	 fz.prop('checked',true);
	 if($('.zones').length){
	 price = fz.next().find('.num').text();
	 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
	 if(price != ''){
		 oldPrice.text(price);
	 }
	 }
})

// Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
$('.deliveryZoneRadio').click(function(){
var id = $(this).attr('deliveryid'),
price = $(this).next().find('.num').text()
,oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
if(price != ''){
	 oldPrice.text(price);
}
$('.deliveryRadio').each(function(){
	 $(this).removeAttr('checked');
	 if($(this).val() == id){
	 $(this).prop('checked',true);
	 }else{
	 $(this).removeAttr('checked');
	 }
})
});
});




Для шаблона "Оформление заказа" всё сработало! Спасибо!
А для "Быстрого заказа" - не совсем понятно. Код сменил, но
сейчас отображается раскрытый список с "radio", вместо "select". Работает корректно, но нужны "selectы" для зон доставки.

В предыдущих инструкциях на форуме сказано, что "....нужно выполнить те же инструкции, только для шаблона "Быстрый заказ". И вместо правок в файле main.js всё править в "Быстром заказе".  Но как сделать - я не могу понять. Они совершенно разные эти два шаблона.

Буду благодарен!

#10 Сake

Сake

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

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

Отправлено 16 Октябрь 2014 - 01:10

Попробуйте сделать следующее - в шаблоне "Быстрый заказ" найдите код

{% FOR zone_list %}
				
					<tr class="zones incart">
					  <td></td>
					  <td>
						<!-- Заголовок внутри метода доставки, появляется только один раз--> 
						{% IF order_delivery.zone_list.index=1 %}
						  <label for="deliveryId{order_delivery.ID}" class="zones-header">Зоны доставки</label><br />
						{% ENDIF %}
						<input
						  type="radio" class="deliveryZoneRadio inFastOrder" deliveryid="{order_delivery.ID}" id="deliveryZoneId{order_delivery.zone_list.ID}" name="form[delivery][zone_id]" value="{order_delivery.zone_list.ID}"
						  {% IF order_delivery.zone_list.ID = ORDER_FORM_DELIVERY_ZONE_ID %}
							checked="checked" rel="true"
						  {% ENDIF %}
						/>
						<label class="orderStageDeliveryZoneLabel" for="deliveryZoneId{order_delivery.zone_list.ID}" style="color: #333;">
						  {order_delivery.zone_list.NAME}
						  <span class="deliveryZonePrice" style="color: #333;">{order_delivery.zone_list.END_PRICE | money_format}</span>
						</label>
					  </td>
					  <td></td>
					</tr>
				  {% ENDFOR %}

и замените его на

{% FOR zone_list %}
				
					<tr class="zones incart">
					  <td></td>
					  <td>
						<!-- Заголовок внутри метода доставки, появляется только один раз--> 
						{% IF order_delivery.zone_list.index=1 %}
						  <label for="deliveryId{order_delivery.ID}" class="zones-header">Зоны доставки</label><br />
						{% ENDIF %}
						<select class="deliveryZoneRadio inFastOrder" data-deliveryid="{order_delivery.ID}" id="deliveryZoneId{order_delivery.zone_list.ID}" name="form[delivery][zone_id]" {% IF order_delivery.zone_list.ID = ORDER_FORM_DELIVERY_ZONE_ID %}class="required"{% ENDIF %}>
												 <option value="0" data-price="{order_delivery.END_PRICE | number_format("0", ",", " ")}"> - выберите зону доставки - </option>
												 {% FOR zone_list %}
												 <option value="{order_delivery.zone_list.ID}" data-price="{order_delivery.zone_list.END_PRICE | number_format("0", ",", " ")}" {% IF order_delivery.zone_list.ID=ORDER_FORM_DELIVERY_ZONE_ID %}selected="selected"{% ENDIF %}>
														 {order_delivery.zone_list.NAME}
												 </option>
												 {%ENDFOR%}
										 </select>
						<label class="orderStageDeliveryZoneLabel" for="deliveryZoneId{order_delivery.zone_list.ID}" style="color: #333;">
						  {order_delivery.zone_list.NAME}
						  <span class="deliveryZonePrice" style="color: #333;">{order_delivery.zone_list.END_PRICE | money_format}</span>
						</label>
					  </td>
					  <td></td>
					</tr>
				  {% ENDFOR %}


#11 keadis

keadis

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

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

Отправлено 16 Октябрь 2014 - 02:01

Просмотр сообщенияСake (16 Октябрь 2014 - 01:10) писал:

Попробуйте сделать следующее - в шаблоне "Быстрый заказ" найдите код

{% FOR zone_list %}
				
				 <tr class="zones incart">
					 <td></td>
					 <td>
					 <!-- Заголовок внутри метода доставки, появляется только один раз-->
					 {% IF order_delivery.zone_list.index=1 %}
						 <label for="deliveryId{order_delivery.ID}" class="zones-header">Зоны доставки</label><br />
					 {% ENDIF %}
					 <input
						 type="radio" class="deliveryZoneRadio inFastOrder" deliveryid="{order_delivery.ID}" id="deliveryZoneId{order_delivery.zone_list.ID}" name="form[delivery][zone_id]" value="{order_delivery.zone_list.ID}"
						 {% IF order_delivery.zone_list.ID = ORDER_FORM_DELIVERY_ZONE_ID %}
						 checked="checked" rel="true"
						 {% ENDIF %}
					 />
					 <label class="orderStageDeliveryZoneLabel" for="deliveryZoneId{order_delivery.zone_list.ID}" style="color: #333;">
						 {order_delivery.zone_list.NAME}
						 <span class="deliveryZonePrice" style="color: #333;">{order_delivery.zone_list.END_PRICE | money_format}</span>
					 </label>
					 </td>
					 <td></td>
				 </tr>
				 {% ENDFOR %}

и замените его на

{% FOR zone_list %}
				
				 <tr class="zones incart">
					 <td></td>
					 <td>
					 <!-- Заголовок внутри метода доставки, появляется только один раз-->
					 {% IF order_delivery.zone_list.index=1 %}
						 <label for="deliveryId{order_delivery.ID}" class="zones-header">Зоны доставки</label><br />
					 {% ENDIF %}
					 <select class="deliveryZoneRadio inFastOrder" data-deliveryid="{order_delivery.ID}" id="deliveryZoneId{order_delivery.zone_list.ID}" name="form[delivery][zone_id]" {% IF order_delivery.zone_list.ID = ORDER_FORM_DELIVERY_ZONE_ID %}class="required"{% ENDIF %}>
												 <option value="0" data-price="{order_delivery.END_PRICE | number_format("0", ",", " ")}"> - выберите зону доставки - </option>
												 {% FOR zone_list %}
												 <option value="{order_delivery.zone_list.ID}" data-price="{order_delivery.zone_list.END_PRICE | number_format("0", ",", " ")}" {% IF order_delivery.zone_list.ID=ORDER_FORM_DELIVERY_ZONE_ID %}selected="selected"{% ENDIF %}>
														 {order_delivery.zone_list.NAME}
												 </option>
												 {%ENDFOR%}
										 </select>
					 <label class="orderStageDeliveryZoneLabel" for="deliveryZoneId{order_delivery.zone_list.ID}" style="color: #333;">
						 {order_delivery.zone_list.NAME}
						 <span class="deliveryZonePrice" style="color: #333;">{order_delivery.zone_list.END_PRICE | money_format}</span>
					 </label>
					 </td>
					 <td></td>
				 </tr>
				 {% ENDFOR %}


Сделал! Результат на фото.
В "Select"ах нет зон доставки

Прикрепленные изображения

  • быстрый заказ.jpg


#12 Сake

Сake

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

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

Отправлено 16 Октябрь 2014 - 02:58

Да, все правильно. Необходимо было удалить лишний цикл. Замените ранее вставленный вами код на следующий

<tr class="zones incart">
										 <td></td>
										 <td>
										 <!-- Заголовок внутри метода доставки, появляется только один раз-->
										 <label for="deliveryId{order_delivery.ID}" class="zones-header">Зоны доставки</label><br />
										 <select class="deliveryZoneRadio inFastOrder" data-deliveryid="{order_delivery.ID}" name="form[delivery][zone_id]">
											<option value="0" data-price="{order_delivery.END_PRICE | number_format("0", ",", " ")}"> - выберите зону доставки - </option>
																								 {% FOR zone_list %}
																								 <option value="{order_delivery.zone_list.ID}" data-price="{order_delivery.zone_list.END_PRICE | number_format("0", ",", " ")}" {% IF order_delivery.zone_list.ID=ORDER_FORM_DELIVERY_ZONE_ID %}selected="selected"{% ENDIF %}>
																												 {order_delivery.zone_list.NAME} {order_delivery.zone_list.END_PRICE | money_format}
																								 </option>
																								 {%ENDFOR%}
																				 </select>
										 <label class="orderStageDeliveryZoneLabel" style="color: #333;">
										   <span class="deliveryZonePrice" style="color: #333;"></span>
										 </label>
										 </td>
										 <td></td>
</tr>

После этого изменения выпадающий список должен будет прийти в норму.

#13 keadis

keadis

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

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

Отправлено 16 Октябрь 2014 - 11:13

Просмотр сообщенияСake (16 Октябрь 2014 - 02:58) писал:

Да, все правильно. Необходимо было удалить лишний цикл. Замените ранее вставленный вами код на следующий
 Зоны доставки
- выберите зону доставки -{% FOR zone_list %}{order_delivery.zone_list.NAME} {order_delivery.zone_list.END_PRICE | money_format}{%ENDFOR%}	
После этого изменения выпадающий список должен будет прийти в норму.

1) Теперь зоны в 'Select'ах появились, но не меняется стоимость при выборе зоны.

2) А у первого пункта (т.е. у Москвы) вообще  стоимость не отображается.

3) И как сделать, чтобы как в шаблоне обычного "Оформления заказа" "Select" для каждого способа активировался только тогда, когда стоит "radio" напротив нужного способа?
А то сейчас можно даже не выбрав "Способ"  начать выбирать "Зону доставки", а переключатель при этом автоматом не ставится напротив Способа.
В шаблоне "Оформление заказа" нельзя выбрать "Зону" без выбора "Способа".

Спасибо.

#14 Сake

Сake

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

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

Отправлено 17 Октябрь 2014 - 04:50

Найдите в вашем шаблоне "Быстрый заказ" следующий javascript код

$(function(){
	 sd = $($('.deliveryRadio')[0]);
	 id = sd.val()
	 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);
	 sd.prop('checked',true);
	 fz.prop('checked',true);
	 if($('.zones').length){
	 price = fz.next().find('.num').text();
	 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
	 oldPrice.text(price);
	 }
})
$(function(){
$('.deliveryRadio').each(function(){
	 var
	 id = $(this).val()
	 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);
	 if($('.zones').length){
	 price = fz.next().find('.num').text();
	 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
	 if(price != ''){
		 oldPrice.text(price);
	 }
	 }
})
})
$(function(){
	 $('.orderStageDeliveryListTable').on('change','.deliveryRadio',function(){
		 $('.deliveryRadio,.deliveryZoneRadio').each(function(){
			 $(this).removeAttr('checked');
		 })
		 var id = $(this).val()
				 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);				
		 $(this).prop('checked',true);
		 fz.prop('checked',true);
		 if($('.zones').length){
			 price = fz.next().find('.num').text();
			 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
			 if(price != ''){
				 oldPrice.text(price);
			 }
		 }
})

// Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
$('.deliveryZoneRadio').click(function(){
	 var id = $(this).attr('deliveryid'),
	 price = $(this).next().find('.num').text()
	 ,oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
	 if(price != ''){
		 oldPrice.text(price);
	 }
	 $('.deliveryRadio').each(function(){
		 $(this).removeAttr('checked');
		 if($(this).val() == id){
		 $(this).prop('checked',true);
		 }else{
			 $(this).removeAttr('checked');
		 }
	 })
});

и замените его на

$(function () {
  $('.deliveryRadio').click(function () {
	$('.deliveryZoneRadio').attr('disabled', 'disabled')
	.closest('tbody').find('.deliveryRadio:checked')
	.closest('tbody').find('.deliveryZoneRadio').removeAttr('disabled');
  }).filter(':checked').trigger('click');
  $('.deliveryZoneRadio').change(function() {
	var option = $(this).children('option:selected');
	var tbody = $(this).closest('tbody');
	if (!parseInt(option.val())) {
	  tbody.find('.orderStageDeliveryDefaultPrice').show()
	  .next('.orderStageDeliveryZonePrice').hide();
	} else {
	  tbody.find('.orderStageDeliveryDefaultPrice').hide()
	  .next('.orderStageDeliveryZonePrice').show()
	  .find('.num').text(option.attr('data-price'));
	}
  }).filter(':selected').trigger('click');
});


#15 keadis

keadis

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

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

Отправлено 17 Октябрь 2014 - 08:59

Просмотр сообщенияСake (17 Октябрь 2014 - 04:50) писал:

Найдите в вашем шаблоне "Быстрый заказ" следующий javascript код

$(function(){
	 sd = $($('.deliveryRadio')[0]);
	 id = sd.val()
	 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);
	 sd.prop('checked',true);
	 fz.prop('checked',true);
	 if($('.zones').length){
	 price = fz.next().find('.num').text();
	 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
	 oldPrice.text(price);
	 }
})
$(function(){
$('.deliveryRadio').each(function(){
	 var
	 id = $(this).val()
	 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);
	 if($('.zones').length){
	 price = fz.next().find('.num').text();
	 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
	 if(price != ''){
		 oldPrice.text(price);
	 }
	 }
})
})
$(function(){
	 $('.orderStageDeliveryListTable').on('change','.deliveryRadio',function(){
		 $('.deliveryRadio,.deliveryZoneRadio').each(function(){
			 $(this).removeAttr('checked');
		 })
		 var id = $(this).val()
				 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);				
		 $(this).prop('checked',true);
		 fz.prop('checked',true);
		 if($('.zones').length){
			 price = fz.next().find('.num').text();
			 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
			 if(price != ''){
				 oldPrice.text(price);
			 }
		 }
})

// Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
$('.deliveryZoneRadio').click(function(){
	 var id = $(this).attr('deliveryid'),
	 price = $(this).next().find('.num').text()
	 ,oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
	 if(price != ''){
		 oldPrice.text(price);
	 }
	 $('.deliveryRadio').each(function(){
		 $(this).removeAttr('checked');
		 if($(this).val() == id){
		 $(this).prop('checked',true);
		 }else{
			 $(this).removeAttr('checked');
		 }
	 })
});

и замените его на

$(function () {
$('.deliveryRadio').click(function () {
$('.deliveryZoneRadio').attr('disabled', 'disabled')
.closest('tbody').find('.deliveryRadio:checked')
.closest('tbody').find('.deliveryZoneRadio').removeAttr('disabled');
}).filter(':checked').trigger('click');
$('.deliveryZoneRadio').change(function() {
var option = $(this).children('option:selected');
var tbody = $(this).closest('tbody');
if (!parseInt(option.val())) {
	 tbody.find('.orderStageDeliveryDefaultPrice').show()
	 .next('.orderStageDeliveryZonePrice').hide();
} else {
	 tbody.find('.orderStageDeliveryDefaultPrice').hide()
	 .next('.orderStageDeliveryZonePrice').show()
	 .find('.num').text(option.attr('data-price'));
}
}).filter(':selected').trigger('click');
});

Если делать в точности, как указано - выдаёт JS ошибку в 123 строке после нажатия кнопки купить из каталога.


Я также обратил внимание, что, видимо, из-за того, что у меня слишком много зон доставки - форма Быстрого заказа после нажатия кнопки "Купить" загружается иногда по 5-7 секунд.

В связи с этим скажите, как вернуться к старому методу - без "Быстрого заказа". Т.е. чтобы после нажатия кнопки "Купить" их любого места на сайте   сразу же чтобы появлялось окно "Товар добавлен в корзину" и с двумя кнопками "Перейти в Корзину" и "Продолжить покупки"? Чтобы не подгружались зоны.

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

Спасибо!

#16 Сake

Сake

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

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

Отправлено 17 Октябрь 2014 - 23:46

В коде поиска для замены по идее не хватает еще одной последней пары }); Попробуйте найти и заменить следующий код

$(function(){
		 sd = $($('.deliveryRadio')[0]);
		 id = sd.val()
		 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);
		 sd.prop('checked',true);
		 fz.prop('checked',true);
		 if($('.zones').length){
		 price = fz.next().find('.num').text();
		 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
		 oldPrice.text(price);
		 }
})
$(function(){
$('.deliveryRadio').each(function(){
		 var
		 id = $(this).val()
		 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);
		 if($('.zones').length){
		 price = fz.next().find('.num').text();
		 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
		 if(price != ''){
				 oldPrice.text(price);
		 }
		 }
})
})
$(function(){
		 $('.orderStageDeliveryListTable').on('change','.deliveryRadio',function(){
				 $('.deliveryRadio,.deliveryZoneRadio').each(function(){
						 $(this).removeAttr('checked');
				 })
				 var id = $(this).val()
								 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);							
				 $(this).prop('checked',true);
				 fz.prop('checked',true);
				 if($('.zones').length){
						 price = fz.next().find('.num').text();
						 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
						 if(price != ''){
								 oldPrice.text(price);
						 }
				 }
})
// Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
$('.deliveryZoneRadio').click(function(){
		 var id = $(this).attr('deliveryid'),
		 price = $(this).next().find('.num').text()
		 ,oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
		 if(price != ''){
				 oldPrice.text(price);
		 }
		 $('.deliveryRadio').each(function(){
				 $(this).removeAttr('checked');
				 if($(this).val() == id){
				 $(this).prop('checked',true);
				 }else{
						 $(this).removeAttr('checked');
				 }
		 })
});
});

Предложенный код для замены скорее всего не будет работать корректно без изменения на странице пошагового оформления заказа.

#17 keadis

keadis

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

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

Отправлено 19 Октябрь 2014 - 12:42

Просмотр сообщенияСake (17 Октябрь 2014 - 23:46) писал:

В коде поиска для замены по идее не хватает еще одной последней пары }); Попробуйте найти и заменить следующий код

$(function(){
		 sd = $($('.deliveryRadio')[0]);
		 id = sd.val()
		 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);
		 sd.prop('checked',true);
		 fz.prop('checked',true);
		 if($('.zones').length){
		 price = fz.next().find('.num').text();
		 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
		 oldPrice.text(price);
		 }
})
$(function(){
$('.deliveryRadio').each(function(){
		 var
		 id = $(this).val()
		 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);
		 if($('.zones').length){
		 price = fz.next().find('.num').text();
		 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
		 if(price != ''){
				 oldPrice.text(price);
		 }
		 }
})
})
$(function(){
		 $('.orderStageDeliveryListTable').on('change','.deliveryRadio',function(){
				 $('.deliveryRadio,.deliveryZoneRadio').each(function(){
						 $(this).removeAttr('checked');
				 })
				 var id = $(this).val()
								 ,fz = $($('.deliveryZoneRadio[deliveryid='+id+']')[0]);							
				 $(this).prop('checked',true);
				 fz.prop('checked',true);
				 if($('.zones').length){
						 price = fz.next().find('.num').text();
						 oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
						 if(price != ''){
								 oldPrice.text(price);
						 }
				 }
})
// Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
$('.deliveryZoneRadio').click(function(){
		 var id = $(this).attr('deliveryid'),
		 price = $(this).next().find('.num').text()
		 ,oldPrice = $('tbody[rel='+ id +']').find('.pricefield').find('.num');
		 if(price != ''){
				 oldPrice.text(price);
		 }
		 $('.deliveryRadio').each(function(){
				 $(this).removeAttr('checked');
				 if($(this).val() == id){
				 $(this).prop('checked',true);
				 }else{
						 $(this).removeAttr('checked');
				 }
		 })
});
});

Предложенный код для замены скорее всего не будет работать корректно без изменения на странице пошагового оформления заказа.

Последний вариант просто подвешивает страницу с затемнением фона. Т.е. буд-то не может вывести табличку "Товар успешно добавлен...."

Я повторюсь,

"......скажите, как вернуться к старому методу - без "Быстрого заказа"? Т.е. чтобы после нажатия кнопки "Купить" из любого места на сайте   сразу же появлялось окно "Товар добавлен в корзину" с двумя кнопками "Перейти в Корзину" и "Продолжить покупки"? Чтобы не подгружались зоны.

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

Спасибо!

#18 Сake

Сake

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

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

Отправлено 21 Октябрь 2014 - 05:00

В файле main.js найдите строку

formData.push({name: 'fast_order', value: 1});

и замените её на

// formData.push({name: 'fast_order', value: 1});


#19 keadis

keadis

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

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

Отправлено 22 Октябрь 2014 - 00:58

Просмотр сообщенияСake (21 Октябрь 2014 - 05:00) писал:

В файле main.js найдите строку

formData.push({name: 'fast_order', value: 1});

и замените её на

// formData.push({name: 'fast_order', value: 1});

Отлично! Но при нажатии "Продолжить покупки" ничего не происходит. Как это исправить? Чтобы окно закрывалось....

#20 Сake

Сake

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

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

Отправлено 22 Октябрь 2014 - 02:10

Найдите в шаблоне "Ajax добавление товара в корзину" следующий код

<script>
$('#cartSum').html($('.newCartSum').html());
$('#cartCount').html($('.newCartCount').html());
</script>

и замените его на

<script>
$('#cartSum').html($('.newCartSum').html());
$('#cartCount').html($('.newCartCount').html());
$(function() {
  $('.nyroModalClose').click(function() {
	$('.fancybox-close').trigger('click');
  });
});
</script>





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

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