Как Обязать Писать Фамилию
#1
Отправлено 07 Февраль 2011 - 22:59
Поэтому постоянно приходиться писать письма с просьбой указать фамилию. заранее спасибо
#2
Отправлено 08 Февраль 2011 - 19:22
<tr> <td class="cell1"><label for="contactPerson">Представьтесь пожалуйста:<span class="red">*</span></label></td> <td class="cell2"><input id="contactPerson" name="form[contact][person]" class="required" value="{ORDER_FORM_CONTACT_PERSON}"></td> </tr>
И замените его на
<tr> <td class="cell1"><label for="contactPerson">Фамилия:<span class="red">*</span></label></td> <td class="cell2"><input id="contactPerson" name="form[contact][person]" class="required" value="{ORDER_FORM_CONTACT_PERSON}"></td> </tr> <tr> <td class="cell1"><label for="contactPersonName">Имя:<span class="red">*</span></label></td> <td class="cell2"><input id="contactPersonName" name="form[contact][person_name]" class="required" value=""></td> </tr>
И измените js логику при отправке данных на следующую страницу, заменив вот этот код:
<form {% IF ORDER_STAGE_NUM=1 %} action="{ORDER_STAGE_CONTACTS_URL}" {% ELSEIF ORDER_STAGE_NUM=2 %} action="{ORDER_STAGE_DELIVERY_URL}" {% ELSEIF ORDER_STAGE_NUM=3 %} action="{ORDER_STAGE_PAYMENT_URL}" {% ELSEIF ORDER_STAGE_NUM=4 %} action="{ORDER_STAGE_CONFIRM_URL}" {% ENDIF %} method="post" >
На этот:
<form {% IF ORDER_STAGE_NUM=1 %} action="{ORDER_STAGE_CONTACTS_URL}" onsubmit="$('#contactPerson').val($('#contactPerson').val() + ' ' + $('#contactPersonName').val());" {% ELSEIF ORDER_STAGE_NUM=2 %} action="{ORDER_STAGE_DELIVERY_URL}" {% ELSEIF ORDER_STAGE_NUM=3 %} action="{ORDER_STAGE_PAYMENT_URL}" {% ELSEIF ORDER_STAGE_NUM=4 %} action="{ORDER_STAGE_CONFIRM_URL}" {% ENDIF %} method="post" >
Этот код будет склеивать строки фамилии и имени в одну и вставлять в ту, в которой указывается ФИО пользователя. Думаю в скором времени сделаем возможность настройки этих полей, чтобы не приходилось писать подобные фиксы.
#3
Отправлено 08 Февраль 2011 - 21:52
#4
Отправлено 15 Февраль 2011 - 20:41
#5
Отправлено 20 Февраль 2011 - 20:17
Причин несколько:
1) По полю телефона производится поиск клиентов, по этому полю они группируются и находятся.
2) На телефон указанный в этом поле клиенту отправляется SMS о принятии заказа, и дальнейшей работе с ним, для разгрузки операторов на тарифе "Экстра" например
Поэтому поле является обязательным для заполнения. Но его можно скрыть и при этом заполнить случайными данными, чтобы клиенты не группировались по одинаковому телефону.
Например по умолчанию код оформления заказа в разделе "Сайт" > "Редактор тем" шаблон "Оформление заказа" выглядит так:
<tr> <td class="cell1"><label for="contactPerson">Представьтесь пожалуйста:<span class="red">*</span></label></td> <td class="cell2"><input id="contactPerson" name="form[contact][person]" class="required" value="{ORDER_FORM_CONTACT_PERSON}"></td> </tr> <tr> <td class="cell1"><label for="contactPhone">Контактный телефон:<span class="red">*</span></label></td> <td class="cell2"><input id="contactPhone" name="form[contact][phone]" class="required" value="{ORDER_FORM_CONTACT_PHONE}"></td> </tr> <tr> <td class="cell1"><label for="contactEmail">Электропочта:<span class="red contactRegisterNeedElement" {% IFNOT ORDER_FORM_CONTACT_WANT_REGISTER %}style="display:none;"{% ENDIF %}>*</span></label></td> <td class="cell2"><input id="contactEmail" name="form[contact][email]" class="email" value="{ORDER_FORM_CONTACT_EMAIL}" /></td> </tr>
Для изменения и удаления поля контактного телефона можно изменить этот код так:
<tr> <td class="cell1"><label for="contactPerson">Представьтесь пожалуйста:<span class="red">*</span></label></td> <td class="cell2"> <input id="contactPerson" name="form[contact][person]" class="required" value="{ORDER_FORM_CONTACT_PERSON}"> <input type="hidden" id="contactPhone" name="form[contact][phone]" class="required" value="{ORDER_FORM_CONTACT_PHONE}{RAND}-{CURRENT_TIME}"> </td> </tr> <tr> <td class="cell1"><label for="contactEmail">Электропочта:<span class="red contactRegisterNeedElement" {% IFNOT ORDER_FORM_CONTACT_WANT_REGISTER %}style="display:none;"{% ENDIF %}>*</span></label></td> <td class="cell2"><input id="contactEmail" name="form[contact][email]" class="email" value="{ORDER_FORM_CONTACT_EMAIL}" /></td> </tr>После этого поле ввода телефона исчезнет и не будет отображаться на этом этапе. Останется только лишь удалить на этапе подтверждения заказа код подтверждения телефона в том же шаблоне "Оформление заказа":
<tr> <td class="cell1"><p><span>Телефон для связи</span></p></td> <td class="cell2">{ORDER_FORM_CONTACT_PHONE}</td> </tr>
Далее в шаблоне "Просмотр заказа" потребуется удалить вот этот код:
<tr> <td class="cell1"><p><span>Телефон для связи:</span></p></td> <td class="cell2">{ORDER_CONTACT_PHONE}</td> </tr>
И в личном кабинете, в шаблоне "ЛК Информация о заказе" вот этот код:
<tr> <td><label>Телефон:</label></td> <td>{CLIENT_ORDER_PHONE}</td> </tr>
После всех вышеуказанных манипуляций заказ можно будет оформлять без обязательного указания телефона и при этом телефон нигде на витрине магазина фигурировать не будет.
#6
Отправлено 21 Февраль 2011 - 18:55
#7
Отправлено 12 Март 2011 - 11:35
>
И измените js логику при отправке данных на следующую страницу, заменив вот этот код:
<form
{% IF ORDER_STAGE_NUM=1 %}
action="{ORDER_STAGE_CONTACTS_URL}"
{% ELSEIF ORDER_STAGE_NUM=2 %}
action="{ORDER_STAGE_DELIVERY_URL}"
{% ELSEIF ORDER_STAGE_NUM=3 %}
action="{ORDER_STAGE_PAYMENT_URL}"
{% ELSEIF ORDER_STAGE_NUM=4 %}
action="{ORDER_STAGE_CONFIRM_URL}"
{% ENDIF %}
method="post"
>
На этот:
<form
{% IF ORDER_STAGE_NUM=1 %}
action="{ORDER_STAGE_CONTACTS_URL}" onsubmit="$('#contactPerson').val($('#contactPerson').val() + ' ' + $('#contactPerson').val('#contactPersonName'));"
{% ELSEIF ORDER_STAGE_NUM=2 %}
action="{ORDER_STAGE_DELIVERY_URL}"
{% ELSEIF ORDER_STAGE_NUM=3 %}
action="{ORDER_STAGE_PAYMENT_URL}"
{% ELSEIF ORDER_STAGE_NUM=4 %}
action="{ORDER_STAGE_CONFIRM_URL}"
{% ENDIF %}
method="post"
при нажатии кнопки далее в первом поле появляется надпись [object Object]
#8
Отправлено 12 Март 2011 - 15:23
$('#contactPerson').val('#contactPersonName')тут наверное должно быть:
$('#contactPerson').val(). Если изменить код по идее ошибка исчезнет.
Вообще говоря мы планируем создать раздел создания отдельных полей, которые будут отображаться там где это необходимо. Так что скоро можно будет решить эту задачу на стороне сервера и подобных ошибок возникать не будет.
#9
Отправлено 20 Июль 2011 - 09:26
Напротив Адрес: введите ближайшее метро, улицу, дом, корпус, подъезд, домофон, этаж, квартиру
Напротив Комментарии: введите дополнительный номер телефона, коды купонов на скидку и т.д.
#10
Отправлено 21 Июль 2011 - 02:23
onblur="this.value=(this.value=='') ? 'Поиск' : this.value;" onfocus="this.value=(this.value=='Поиск') ? '' : this.value;"который добавляется к текстовому полю.
В вашем случае нужно сделать:
Найти в шаблоне "Оформление заказа"
<textarea id="deliveryComment" name="form[delivery][comment]" {% IF SETTINGS_ORDER_FIELDS_COMMENT=1 %}class="required"{% ENDIF %}>{ORDER_FORM_DELIVERY_COMMENT}</textarea>
далее заменить на
<textarea id="deliveryComment" name="form[delivery][comment]" {% IF SETTINGS_ORDER_FIELDS_COMMENT=1 %}class="required"{% ENDIF %} onblur="this.value=(this.value=='') ? 'введите дополнительный номер телефона, коды купонов на скидку и т.д' : this.value;" onfocus="this.value=(this.value=='введите дополнительный номер телефона, коды купонов на скидку и т.д') ? '' : this.value;">введите дополнительный номер телефона, коды купонов на скидку и т.д{ORDER_FORM_DELIVERY_COMMENT}</textarea>
далее найти
<textarea id="deliveryAddress" name="form[delivery][address]" {% IF SETTINGS_ORDER_FIELDS_ADDRESS=1 %}class="required"{% ENDIF %}>{ORDER_FORM_DELIVERY_ADDRESS}</textarea>
и заменить на
<textarea id="deliveryAddress" name="form[delivery][address]" {% IF SETTINGS_ORDER_FIELDS_ADDRESS=1 %}class="required"{% ENDIF %} onblur="this.value=(this.value=='') ? 'введите ближайшее метро, улицу, дом, корпус, подъезд, домофон, этаж, квартиру' : this.value;" onfocus="this.value=(this.value=='введите ближайшее метро, улицу, дом, корпус, подъезд, домофон, этаж, квартиру') ? '' : this.value;">введите ближайшее метро, улицу, дом, корпус, подъезд, домофон, этаж, квартиру{ORDER_FORM_DELIVERY_ADDRESS}</textarea>
#11
Отправлено 15 Октябрь 2011 - 19:50
вот что есть
ge img'),
// В этом объекте хранится идентификатор картинки главного изображения для коректной работы галереи изображений MainImageIdObject = $('.goodsDataMainImage input'), // Получаем идентификатор этого изображения из соседнего input поля GoodsImageIconId = $(this).parent().find('input').attr("rel"); // Изменяем главное изображение MainImage.attr('src',MediumImageUrl); // Изменяем идентификатор главного изображения MainImageIdObject.attr("rel",GoodsImageIconId); return false; }); // Функция собирает свойства в строку, для определения модификации товара function getSlugFromGoodsDataFormModificationsProperties(obj) { var properties = new Array(); $(obj).each(function(i){ properties[i] = parseInt($(this).val()); }); return properties.sort(function(a,B){return a - b}).join('_'); } var goodsDataProperties = $('.goodsDataForm [name="form[properties][]"]'); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(){ $(this).change(function(){ var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties), modificationBlock = $('.goodsDataMainModificationsList[rel="'+slug+'"]'), modificationId = parseInt(modificationBlock.find('[name="id"]').val()), modificationArtNumber = modificationBlock.find('[name="art_number"]').val(), modificationPriceNow = parseFloat(modificationBlock.find('[name="price_now"]').val()), modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(), modificationPriceOld = parseFloat(modificationBlock.find('[name="price_old"]').val()), modificationPriceOldFormated = modificationBlock.find('.price_old_formated').html(), modificationRestValue = parseFloat(modificationBlock.find('[name="rest_value"]').val()), modificationDescription = modificationBlock.find('.description').html(), modificationMeasureId = parseInt(modificationBlock.find('[name="measure_id"]').val()), modificationMeasureName = modificationBlock.find('[name="measure_name"]').val(), modificationMeasureDesc = modificationBlock.find('[name="measure_desc"]').val(), modificationMeasurePrecision = modificationBlock.find('[name="measure_precision"]').val(), modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(), goodsModificationId = $('.goodsDataMainModificationId'), goodsPriceNow = $('.goodsDataMainModificationPriceNow'), goodsPriceOld = $('.goodsDataMainModificationPriceOld'), goodsAvailable = $('.goodsDataMainModificationAvailable'), goodsAvailableTrue = goodsAvailable.find('.available-true'), goodsAvailableFalse = goodsAvailable.find('.available-false'), goodsArtNumberBlock = $('.goodsDataMainModificationArtNumber'), goodsArtNumber = goodsArtNumberBlock.find('span'); goodsCompareAddButton = $('.goodsDataCompareButton.add'); goodsCompareDeleteButton = $('.goodsDataCompareButton.delete'); goodsModDescriptionBlock = $('.goodsDataMainModificationsDescriptionBlock'); // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация if(modificationBlock.length) { // Цена товара goodsPriceNow.html(modificationPriceNowFormated); // Старая цена товара if(modificationPriceOld>modificationPriceNow) { goodsPriceOld.html(modificationPriceOldFormated); } else { goodsPriceOld.html(''); } // Есть ли товар есть в наличии if(modificationRestValue>0) { goodsAvailableTrue.show(); goodsAvailableFalse.hide(); // Если товара нет в наличии } else { goodsAvailableTrue.hide(); goodsAvailableFalse.show(); } // Если товар есть в списке сравнения if(modificationIsHasInCompareList>0) { goodsCompareAddButton.hide(); goodsCompareDeleteButton.show(); // Если товара нет в списке сравнения } else { goodsCompareAddButton.show(); goodsCompareDeleteButton.hide(); } // Покажем артикул модификации товара, если он указан if(modificationArtNumber.length>0) { goodsArtNumberBlock.show(); goodsArtNumber.html(modificationArtNumber); // Скроем артикул модификации товара, если он не указан } else { goodsArtNumberBlock.hide(); goodsArtNumber.html(''); } // Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет if(modificationDescription.length > 0) { goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>'); } else { goodsModDescriptionBlock.hide().html(); } // Идентификатор товарной модификации goodsModificationId.val(modificationId); window.location.hash = '?modification='+modificationId; } else { // Отправим запись об ошибке на сервер sendError('no modification by slug '+slug); alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } }); }); // Кнопка добавления товара на сравнение сравнения товаров $('.goodsDataCompareButton').click(function(){ window.location.href = $(this).attr('rel') + ($(this).attr('rel').indexOf( '?' ) > -1 ? '&' : '?') + 'id='+ $('.goodsDataMainModificationId').val()+ '&from='+ $('input[name="form[goods_from]"]').val(); return false; }); // Сравнение товаров. Увеличение изображение при клике на ссылку увеличения и открытие галереии с изображениями этого товара $('.CompareGoodsImageZoom').click(function(){ // Галлерея фотографий для данной модификации товаров var galleryBlock = $('.galleryBlock' + $(this).attr('rel')), // Главное изображение товара, которое сейчас стоит у товара galleryMainImage = $('.CompareGoodsImageMain' + $(this).attr('rel')), // Изображение по которому нужно кликнуть в галлерее изображений ImageIngallery = galleryBlock.find('.CompareGoodsImageGallery'+galleryMainImage.attr('rel')); // Запускаем галлерею изображений от изображения товара, чтобы если например кликнули по гайке, то и открылись гайка, а не еще какой-либо изображение этого товара ImageIngallery.nyroModalManual({ gallery: 'gallery' + $(this).attr('rel') }); return false; }); // Сравнение товаров. Инвертирование свойств для сравнения товара $('.CompareCheckbox.invert').click(function(){ var checked = true, checkboxes = $('.CompareCheckbox:not(.invert)'); checkboxes.each(function(){ if($(this).attr('checked')) { checked = false; return false; } }); checkboxes.each(function(){ $(this).attr('checked', checked); }); $(this).attr('checked', checked); }); // Сравнение товаров. Скрытие характеристик товара, которые выделил пользователь $('.CompareGoodsHideSelected').click(function(){ $('.CompareGoodsTableTbodyComparisonLine').each(function(){ var CheckedCheckbox = $(this).find('.CompareCheckbox:checked:not(.invert)'); if(CheckedCheckbox.length>0) { $(this).hide(); } }); // отменяем выделение характеристик товаров $('.CompareCheckbox').attr('checked',false); return false; }); // Сравнение товаров. Отображение скрытых характеристик товара $('.CompareGoodsShowAll').click(function(){ $('.CompareGoodsTableTbodyComparisonLine:hidden').show(); return false; }); // Сравнение товаров. Верхняя навигация изменение фильтра на отображение всех характеристик товаров $('.CompareGoodsTableFilterShowAll').click(function(){ $('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected'); $('.CompareGoodsTableTbodyComparisonLine:hidden').show(); $(this).addClass('CompareGoodsTableFilterSelected'); return false; }); // Сравнение товаров. Фильтр в верхней навигации. Отображение только различающихся характеристик товара $('.CompareGoodsTableFilterShowOnlyDifferent').click(function(){ $('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected'); $('.CompareGoodsTableTbodyComparisonLine:not(.same)').show(); $('.CompareGoodsTableTbodyComparisonLine.same').hide(); $(this).addClass('CompareGoodsTableFilterSelected'); return false; }); // Сравнение товаров. При наведении на строку сравнения, она выделяется цветом $('.CompareGoodsTableTbodyComparisonLine').hover( function () { $(this).addClass('hover'); }, function () { $(this).removeClass('hover'); } ); // При клике по строке выделяем свойство $('.CompareGoodsTableTbodyComparisonLine td:not(.ceil1)').click(function(){ var CompareCheckbox = $(this).parent().find('.CompareCheckbox'); if(CompareCheckbox.attr('checked')) { CompareCheckbox.attr('checked', false); } else { CompareCheckbox.attr('checked', true); } }); // Форма регистрации нового пользователя, действие ссылки "показать пароль" $('.clientForm .showPass').click(function(){ ChangePasswordFieldType(this, $('#sites_client_pass')); return false; }); // Форма регистрации нового пользователя, при оформлении заказа $('.OrderShowPass').click(function(){ ChangePasswordFieldType(this, $('#contactPassWord')); return false; }); // При вводе пароля с caps lockом, покажет блок с сообщением для пользователя $('#sites_client_pass, #contactPassWord').capslock({ caps_lock_on:function(){$("#caps_lock").show();}, caps_lock_off:function(){$("#caps_lock").hide();} }); // При оформлении заказа дадим возможность зарегистрироваться пользователю $('#contactWantRegister').click(function(){ if($(this).attr("checked")) { $('.contactRegisterNeedElement').show(); $('#contactEmail, #contactPassWord').addClass('required'); } else { $('.contactRegisterNeedElement').hide(); $('#contactEmail, #contactPassWord').removeClass('required'); } }); // Добавление отзыва о товаре. Рейтинг if(typeof($('.goodsDataOpinionTableRating').stars) == "function" ) { $('.goodsDataOpinionTableRating').stars({ inputType: "input", split: 2, captionEl: $(".goodsDataOpinionMsg"), cancelShow: false }); } // Список отзывов о товаре. Ссылка на отображение формы для добавление отзыва о товаре $('.goodsDataOpinionShowAddForm').click(function(){ if(0 == $('#goodsDataOpinionAddBlock:visible').length) { $('#goodsDataOpinionAddBlock').show('blind'); } else { $('#goodsDataOpinionAddBlock').hide('blind'); return false; } }); // Добавление отзыва о товаре. кнопка reset скрывающая форму добавления отзыва о товаре $('.goodsDataOpinionAddForm input:reset').click(function(){ $('#goodsDataOpinionAddBlock').hide('blind'); }); // Иконка для обновления изображение капчи $('.goodsDataOpinionCaptchaRefresh').click(function(){ RefreshImageAction(this,1,1); $('.goodsDataOpinionCaptchaImg').attr('src',$('.goodsDataOpinionCaptchaImg').attr('src')+'&rand'+Math.random(0,10000)); return false; }); // Фильтры по товарам. При нажании на какую либо характеристику или свойство товара происходит фильтрация товаров $('.contentTbodySearchFilterBlock input').click(function(){ $(this)[0].form.submit(); }); // Действия при выборе варианта доставки на этапе оформления заказа $('.deliveryRadio').click(function(){ // Если текущая выделенная зона доставки не относится к выбранному варианту доставки, снимаем выделение с зоны доставки if($('.deliveryZoneRadio:checked').attr('deliveryid') != $(this).val()) { $('.deliveryZoneRadio:checked').click().attr('checked', false); } }); // Действия при выборе зоны внутри варианта доставки на этапе оформления заказа $('.deliveryZoneRadio').click(function(){ var deliveryId = $(this).attr('deliveryid') ,deliveryZonePrice = $(this).parent().find('.deliveryZonePrice') ,deliveryTbody = $('.orderStageDeliveryListTable tbody[rel="' + deliveryId + '"]') ,deliveryBlock = deliveryTbody.find('#deliveryId' + deliveryId) ,deliveryZonePriceBlock = deliveryTbody.find('.orderStageDeliveryZonePrice') ,deliveryDefaultPriceBlock = deliveryTbody.find('.orderStageDeliveryDefaultPrice') ; // Если этот пункт уже выбран, при повторном клике пользователь видимо хочет снять выделение зоны доставки if('true' == $(this).attr('rel')) { $(this).attr('checked', false); $(this).attr('rel', 'false'); // Показываем цену по умолчанию deliveryDefaultPriceBlock.show(); // Скрываем цену образованную от зоны deliveryZonePriceBlock.hide(); // Отмечаем у всех радио баттонов зон доставки свойство говорящее что они не отмечены } else { $('.deliveryZoneRadio').attr('rel', 'false'); $(this).attr('rel', 'true'); // Показываем цену по умолчанию deliveryDefaultPriceBlock.hide(); // Скрываем цену образованную от зоны deliveryZonePriceBlock.show().html(deliveryZonePrice.html()); // Выделяем вариант доставки к которому относится зона доставки deliveryBlock.attr('checked', true); } }); $("#deliveryConvenientDate").datepicker({ dayNames : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'], dayNamesMin : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ], closeText : 'Готово', currentText : 'Сегодня' , duration : '', monthNames : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Окрябрь','Ноябрь','Декабрь'], monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'], yearRange : "-6:+6", dateFormat : 'dd.mm.yy', minDate : new Date(), firstDay : 1 }); });
support (08 Февраль 2011 - 19:22) писал:
<tr> <td class="cell1"><label for="contactPerson">Представьтесь пожалуйста:<span class="red">*</span></label></td> <td class="cell2"><input id="contactPerson" name="form[contact][person]" class="required" value="{ORDER_FORM_CONTACT_PERSON}"></td> </tr>
И замените его на
<tr> <td class="cell1"><label for="contactPerson">Фамилия:<span class="red">*</span></label></td> <td class="cell2"><input id="contactPerson" name="form[contact][person]" class="required" value="{ORDER_FORM_CONTACT_PERSON}"></td> </tr> <tr> <td class="cell1"><label for="contactPersonName">Имя:<span class="red">*</span></label></td> <td class="cell2"><input id="contactPersonName" name="form[contact][person_name]" class="required" value=""></td> </tr>
И измените js логику при отправке данных на следующую страницу, заменив вот этот код:
<form {% IF ORDER_STAGE_NUM=1 %} action="{ORDER_STAGE_CONTACTS_URL}" {% ELSEIF ORDER_STAGE_NUM=2 %} action="{ORDER_STAGE_DELIVERY_URL}" {% ELSEIF ORDER_STAGE_NUM=3 %} action="{ORDER_STAGE_PAYMENT_URL}" {% ELSEIF ORDER_STAGE_NUM=4 %} action="{ORDER_STAGE_CONFIRM_URL}" {% ENDIF %} method="post" >
На этот:
<form {% IF ORDER_STAGE_NUM=1 %} action="{ORDER_STAGE_CONTACTS_URL}" onsubmit="$('#contactPerson').val($('#contactPerson').val() + ' ' + $('#contactPersonName').val());" {% ELSEIF ORDER_STAGE_NUM=2 %} action="{ORDER_STAGE_DELIVERY_URL}" {% ELSEIF ORDER_STAGE_NUM=3 %} action="{ORDER_STAGE_PAYMENT_URL}" {% ELSEIF ORDER_STAGE_NUM=4 %} action="{ORDER_STAGE_CONFIRM_URL}" {% ENDIF %} method="post" >
Этот код будет склеивать строки фамилии и имени в одну и вставлять в ту, в которой указывается ФИО пользователя. Думаю в скором времени сделаем возможность настройки этих полей, чтобы не приходилось писать подобные фиксы.
#12
Отправлено 16 Октябрь 2011 - 04:38
#14
Отправлено 17 Октябрь 2011 - 19:43
#15
Отправлено 22 Октябрь 2011 - 11:43
#16
Отправлено 22 Октябрь 2011 - 11:51
#17
Отправлено 24 Октябрь 2011 - 17:29
Вот, это то, что есть:
// Отправляет ошибку на сервер, для того чтобы служба тех поддержки могла разобраться в проблеме как можно быстрее.
function sendError (desc, page, line) {
var img=document.createElement('img');
img.src = 'http://storeland.ru/...IComponent(desc)+'&page='+encodeURIComponent(window.location)+'&line=0';
img.style.position = 'absolute';
img.style.top = '-9999px';
try { document.getElementsByTagName('head').appendChild(img) } catch (e){}
return false;
}
// Форматирует цену
function number_format(number,decimals,dec_point,thousands_sep){var n=number,prec=decimals;var toFixedFix=function(n,prec){var k=Math.pow(10,prec);return(Math.round(n*k)/k).toString();};n=!isFinite(+n)?0:+n;prec=!isFinite(+prec)?0:Math.abs(prec);var sep=(typeof thousands_sep==='undefined')?',':thousands_sep;var dec=(typeof dec_point==='undefined')?'.':dec_point;var s=(prec>0)?toFixedFix(n,prec):toFixedFix(Math.round(n),prec);var abs=toFixedFix(Math.abs(n),prec);var _,i;if(abs>=1000){_=abs.split(/\D/);i=_[0].length%3||3;_[0]=s.slice(0,i+(n<0))+
_[0].slice(i).replace(/(\d{3})/g,sep+'$1');s=_.join(dec);}else{s=s.replace('.',dec);}
var decPos=s.indexOf(dec);if(prec>=1&&decPos!==-1&&(s.length-decPos-1)<prec){s+=new Array(prec-(s.length-decPos-1)).join(0)+'0';}
else if(prec>=1&&decPos===-1){s+=dec+new Array(prec).join(0)+'0';}
return s;}
// Превращает поле пароля в текстовое поле и обратно
// @LinkObject - ссылка по которой кликнули
// @InputObject - объект у которого нужно изменить тип поля
function ChangePasswordFieldType (LinkObject, InputObject) {
var
// Ссылка по которой кликнули
LObject = $(LinkObject),
// Объект у которого изменяем тип с password на text
IObject = $(InputObject),
// Старый текст ссылки
txtOld = LObject.text(),
// Новый текст ссылки
txtNew = LObject.attr('rel');
// Если объекты не получены, завершим работу функции
if( LObject.length==0 || IObject.length==0 ) {
return false;
}
// Изменяем у ссылки текст со старого на новый
LObject.html(txtNew);
// Старый текст ссылки сохраняем в атрибуте rel
LObject.attr('rel', txtOld);
// Изменяем тип input поля
if(IObject[0].type == 'text') {
IObject[0].type = 'password';
} else {
IObject[0].type = 'text';
}
}
// Крутит изображение при обновлении картинки защиты от роботов
function RefreshImageAction(img,num,cnt) {
if(cnt>13) {
return false;
}
$(img).attr('src', $(img).attr('rel') + 'icon/refresh/' + num + '.gif');
num = (num==6)?0:num;
setTimeout(function(){RefreshImageAction(img, num+1, cnt+1);}, 50);
}
$(document).ready(function(){
// Кнопки на сайте если подгружен модуль Jquery.UI
if(typeof($('input:submit, input.button').button) == "function" ) {
$('input:submit, input.button').button();
}
// Валидация формы на странице оформления заказа, а так же формы на страницы связи с администрацией
$('.order form, .feedbackForm, .clientForm, .goodsDataOpinionAddForm').validate();
// В форме оформления заказа при клике на кнопку назад просто переходим на предыдущую страницу
$('.order form input:submit[name="toprev"]').click(function(){
var act = this.form.action;
this.form.action = act + ( act.indexOf( '\?' ) > -1 ? '&' : '?' ) + 'toprev=1';
this.form.submit();
return false;
});
// Настройки галереи изображений
$.nyroModalSettings({
// из всех элементов с атрибут rel="gallery" будем создавать галерею
gallery: 'gallery',
// Включаем прокрутку с последнего изображения на первое
galleryLoop: true
});
// Увеличение изображение при клике на него и открытие галереи изображений
$('.goodsDataMainImage a, .goodsDataMainImageZoom a').click(function(){
// Идентификатор главной картинки
var goodsImageId = $('.goodsDataMainImage input').attr("rel"),
// Маленькое изображение, по которому на самом деле будем кликать
goodsImageIconElement = $('.goodsDataMainImagesIcon input[rel="'+goodsImageId+'"]').parent().find('a');
// Для иконки изображения запустим галерею
goodsImageIconElement.nyroModalManual();
return false;
});
// Добавление товара в корзину через ajax
$('.goodsDataForm, .goodsToCartFromCompareForm').submit(function(){
$(this).nyroModalManual({
formIndicator: 'ajax_q', // Value added when a form is sent
minWidth: 420, // Minimum width
minHeight: 150, // Minimum height
gallery: null // Gallery name if provided
});
return false;
});
// Изменение главного изображения товара при нажатии на миниатюру
$('.goodsDataMainImagesIcon a').click(function(){
// Путь к среднему изображению
var MediumImageUrl = $(this).find('img').attr('rel'),
// Главное изображение, в которое будем вставлять новое изображение
MainImage = $('.goodsDataMainImage img'),
// В этом объекте хранится идентификатор картинки главного изображения для коректной работы галереи изображений
MainImageIdObject = $('.goodsDataMainImage input'),
// Получаем идентификатор этого изображения из соседнего input поля
GoodsImageIconId = $(this).parent().find('input').attr("rel");
// Изменяем главное изображение
MainImage.attr('src',MediumImageUrl);
// Изменяем идентификатор главного изображения
MainImageIdObject.attr("rel",GoodsImageIconId);
return false;
});
// Функция собирает свойства в строку, для определения модификации товара
function getSlugFromGoodsDataFormModificationsProperties(obj) {
var properties = new Array();
$(obj).each(function(i){
properties[i] = parseInt($(this).val());
});
return properties.sort(function(a,{return a - b}).join('_');
}
var goodsDataProperties = $('.goodsDataForm [name="form[properties][]"]');
// Изменение цены товара при изменении у товара свойства для модификации
goodsDataProperties.each(function(){
$(this).change(function(){
var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties),
modificationBlock = $('.goodsDataMainModificationsList[rel="'+slug+'"]'),
modificationId = parseInt(modificationBlock.find('[name="id"]').val()),
modificationArtNumber = modificationBlock.find('[name="art_number"]').val(),
modificationPriceNow = parseFloat(modificationBlock.find('[name="price_now"]').val()),
modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(),
modificationPriceOld = parseFloat(modificationBlock.find('[name="price_old"]').val()),
modificationPriceOldFormated = modificationBlock.find('.price_old_formated').html(),
modificationRestValue = parseFloat(modificationBlock.find('[name="rest_value"]').val()),
modificationDescription = modificationBlock.find('.description').html(),
modificationMeasureId = parseInt(modificationBlock.find('[name="measure_id"]').val()),
modificationMeasureName = modificationBlock.find('[name="measure_name"]').val(),
modificationMeasureDesc = modificationBlock.find('[name="measure_desc"]').val(),
modificationMeasurePrecision = modificationBlock.find('[name="measure_precision"]').val(),
modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(),
goodsModificationId = $('.goodsDataMainModificationId'),
goodsPriceNow = $('.goodsDataMainModificationPriceNow'),
goodsPriceOld = $('.goodsDataMainModificationPriceOld'),
goodsAvailable = $('.goodsDataMainModificationAvailable'),
goodsAvailableTrue = goodsAvailable.find('.available-true'),
goodsAvailableFalse = goodsAvailable.find('.available-false'),
goodsArtNumberBlock = $('.goodsDataMainModificationArtNumber'),
goodsArtNumber = goodsArtNumberBlock.find('span');
goodsCompareAddButton = $('.goodsDataCompareButton.add');
goodsCompareDeleteButton = $('.goodsDataCompareButton.delete');
goodsModDescriptionBlock = $('.goodsDataMainModificationsDescriptionBlock');
// Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация
if(modificationBlock.length) {
// Цена товара
goodsPriceNow.html(modificationPriceNowFormated);
// Старая цена товара
if(modificationPriceOld>modificationPriceNow) {
goodsPriceOld.html(modificationPriceOldFormated);
} else {
goodsPriceOld.html('');
}
// Есть ли товар есть в наличии
if(modificationRestValue>0) {
goodsAvailableTrue.show();
goodsAvailableFalse.hide();
// Если товара нет в наличии
} else {
goodsAvailableTrue.hide();
goodsAvailableFalse.show();
}
// Если товар есть в списке сравнения
if(modificationIsHasInCompareList>0) {
goodsCompareAddButton.hide();
goodsCompareDeleteButton.show();
// Если товара нет в списке сравнения
} else {
goodsCompareAddButton.show();
goodsCompareDeleteButton.hide();
}
// Покажем артикул модификации товара, если он указан
if(modificationArtNumber.length>0) {
goodsArtNumberBlock.show();
goodsArtNumber.html(modificationArtNumber);
// Скроем артикул модификации товара, если он не указан
} else {
goodsArtNumberBlock.hide();
goodsArtNumber.html('');
}
// Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет
if(modificationDescription.length > 0) {
goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>');
} else {
goodsModDescriptionBlock.hide().html();
}
// Идентификатор товарной модификации
goodsModificationId.val(modificationId);
window.location.hash = '?modification='+modificationId;
} else {
// Отправим запись об ошибке на сервер
sendError('no modification by slug '+slug);
alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
}
});
});
// Кнопка добавления товара на сравнение сравнения товаров
$('.goodsDataCompareButton').click(function(){
window.location.href = $(this).attr('rel') +
($(this).attr('rel').indexOf( '\?' ) > -1 ? '&' : '?') +
'id='+
$('.goodsDataMainModificationId').val()+
'&from='+
$('input[name="form[goods_from]"]').val();
return false;
});
// Сравнение товаров. Увеличение изображение при клике на ссылку увеличения и открытие галереии с изображениями этого товара
$('.CompareGoodsImageZoom').click(function(){
// Галлерея фотографий для данной модификации товаров
var galleryBlock = $('.galleryBlock' + $(this).attr('rel')),
// Главное изображение товара, которое сейчас стоит у товара
galleryMainImage = $('.CompareGoodsImageMain' + $(this).attr('rel')),
// Изображение по которому нужно кликнуть в галлерее изображений
ImageIngallery = galleryBlock.find('.CompareGoodsImageGallery'+galleryMainImage.attr('rel'));
// Запускаем галлерею изображений от изображения товара, чтобы если например кликнули по гайке, то и открылись гайка, а не еще какой-либо изображение этого товара
ImageIngallery.nyroModalManual({
gallery: 'gallery' + $(this).attr('rel')
});
return false;
});
// Сравнение товаров. Инвертирование свойств для сравнения товара
$('.CompareCheckbox.invert').click(function(){
var checked = true,
checkboxes = $('.CompareCheckbox:not(.invert)');
checkboxes.each(function(){
if($(this).attr('checked')) {
checked = false;
return false;
}
});
checkboxes.each(function(){
$(this).attr('checked', checked);
});
$(this).attr('checked', checked);
});
// Сравнение товаров. Скрытие характеристик товара, которые выделил пользователь
$('.CompareGoodsHideSelected').click(function(){
$('.CompareGoodsTableTbodyComparisonLine').each(function(){
var CheckedCheckbox = $(this).find('.CompareCheckbox:checked:not(.invert)');
if(CheckedCheckbox.length>0) {
$(this).hide();
}
});
// отменяем выделение характеристик товаров
$('.CompareCheckbox').attr('checked',false);
return false;
});
// Сравнение товаров. Отображение скрытых характеристик товара
$('.CompareGoodsShowAll').click(function(){
$('.CompareGoodsTableTbodyComparisonLine:hidden').show();
return false;
});
// Сравнение товаров. Верхняя навигация изменение фильтра на отображение всех характеристик товаров
$('.CompareGoodsTableFilterShowAll').click(function(){
$('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected');
$('.CompareGoodsTableTbodyComparisonLine:hidden').show();
$(this).addClass('CompareGoodsTableFilterSelected');
return false;
});
// Сравнение товаров. Фильтр в верхней навигации. Отображение только различающихся характеристик товара
$('.CompareGoodsTableFilterShowOnlyDifferent').click(function(){
$('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected');
$('.CompareGoodsTableTbodyComparisonLine:not(.same)').show();
$('.CompareGoodsTableTbodyComparisonLine.same').hide();
$(this).addClass('CompareGoodsTableFilterSelected');
return false;
});
// Сравнение товаров. При наведении на строку сравнения, она выделяется цветом
$('.CompareGoodsTableTbodyComparisonLine').hover(
function () { $(this).addClass('hover'); },
function () { $(this).removeClass('hover'); }
);
// При клике по строке выделяем свойство
$('.CompareGoodsTableTbodyComparisonLine td:not(.ceil1)').click(function(){
var CompareCheckbox = $(this).parent().find('.CompareCheckbox');
if(CompareCheckbox.attr('checked')) {
CompareCheckbox.attr('checked', false);
} else {
CompareCheckbox.attr('checked', true);
}
});
// Форма регистрации нового пользователя, действие ссылки "показать пароль"
$('.clientForm .showPass').click(function(){
ChangePasswordFieldType(this, $('#sites_client_pass'));
return false;
});
// Форма регистрации нового пользователя, при оформлении заказа
$('.OrderShowPass').click(function(){
ChangePasswordFieldType(this, $('#contactPassWord'));
return false;
});
// При вводе пароля с caps lockом, покажет блок с сообщением для пользователя
$('#sites_client_pass, #contactPassWord').capslock({
caps_lock_on:function(){$("#caps_lock").show();},
caps_lock_off:function(){$("#caps_lock").hide();}
});
// При оформлении заказа дадим возможность зарегистрироваться пользователю
$('#contactWantRegister').click(function(){
if($(this).attr("checked")) {
$('.contactRegisterNeedElement').show();
$('#contactEmail, #contactPassWord').addClass('required');
} else {
$('.contactRegisterNeedElement').hide();
$('#contactEmail, #contactPassWord').removeClass('required');
}
});
// Добавление отзыва о товаре. Рейтинг
if(typeof($('.goodsDataOpinionTableRating').stars) == "function" ) {
$('.goodsDataOpinionTableRating').stars({
inputType: "input",
split: 2,
captionEl: $(".goodsDataOpinionMsg"),
cancelShow: false
});
}
// Список отзывов о товаре. Ссылка на отображение формы для добавление отзыва о товаре
$('.goodsDataOpinionShowAddForm').click(function(){
if(0 == $('#goodsDataOpinionAddBlock:visible').length) {
$('#goodsDataOpinionAddBlock').show('blind');
} else {
$('#goodsDataOpinionAddBlock').hide('blind');
return false;
}
});
// Добавление отзыва о товаре. кнопка reset скрывающая форму добавления отзыва о товаре
$('.goodsDataOpinionAddForm input:reset').click(function(){
$('#goodsDataOpinionAddBlock').hide('blind');
});
// Иконка для обновления изображение капчи
$('.goodsDataOpinionCaptchaRefresh').click(function(){
RefreshImageAction(this,1,1);
$('.goodsDataOpinionCaptchaImg').attr('src',$('.goodsDataOpinionCaptchaImg').attr('src')+'&rand'+Math.random(0,10000));
return false;
});
// Фильтры по товарам. При нажании на какую либо характеристику или свойство товара происходит фильтрация товаров
$('.contentTbodySearchFilterBlock input').click(function(){
$(this)[0].form.submit();
});
// Действия при выборе варианта доставки на этапе оформления заказа
$('.deliveryRadio').click(function(){
// Если текущая выделенная зона доставки не относится к выбранному варианту доставки, снимаем выделение с зоны доставки
if($('.deliveryZoneRadio:checked').attr('deliveryid') != $(this).val()) {
$('.deliveryZoneRadio:checked').click().attr('checked', false);
}
});
// Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
$('.deliveryZoneRadio').click(function(){
var
deliveryId = $(this).attr('deliveryid')
,deliveryZonePrice = $(this).parent().find('.deliveryZonePrice')
,deliveryTbody = $('.orderStageDeliveryListTable tbody[rel="' + deliveryId + '"]')
,deliveryBlock = deliveryTbody.find('#deliveryId' + deliveryId)
,deliveryZonePriceBlock = deliveryTbody.find('.orderStageDeliveryZonePrice')
,deliveryDefaultPriceBlock = deliveryTbody.find('.orderStageDeliveryDefaultPrice')
;
// Если этот пункт уже выбран, при повторном клике пользователь видимо хочет снять выделение зоны доставки
if('true' == $(this).attr('rel')) {
$(this).attr('checked', false);
$(this).attr('rel', 'false');
// Показываем цену по умолчанию
deliveryDefaultPriceBlock.show();
// Скрываем цену образованную от зоны
deliveryZonePriceBlock.hide();
// Отмечаем у всех радио баттонов зон доставки свойство говорящее что они не отмечены
} else {
$('.deliveryZoneRadio').attr('rel', 'false');
$(this).attr('rel', 'true');
// Показываем цену по умолчанию
deliveryDefaultPriceBlock.hide();
// Скрываем цену образованную от зоны
deliveryZonePriceBlock.show().html(deliveryZonePrice.html());
// Выделяем вариант доставки к которому относится зона доставки
deliveryBlock.attr('checked', true);
}
});
$("#deliveryConvenientDate").datepicker({
dayNames : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'],
dayNamesMin : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ],
closeText : 'Готово',
currentText : 'Сегодня' ,
duration : '',
monthNames : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Окрябрь','Ноябрь','Декабрь'],
monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'],
yearRange : "-6:+6",
dateFormat : 'dd.mm.yy',
minDate : new Date(),
firstDay : 1
});
});
#18
Отправлено 25 Октябрь 2011 - 16:04
#20
Отправлено 07 Ноябрь 2011 - 09:46
support (08 Февраль 2011 - 19:22) писал:
<tr> <td class="cell1"><label for="contactPerson">Представьтесь пожалуйста:<span class="red">*</span></label></td> <td class="cell2"><input id="contactPerson" name="form[contact][person]" class="required" value="{ORDER_FORM_CONTACT_PERSON}"></td> </tr>
И замените его на
<tr> <td class="cell1"><label for="contactPerson">Фамилия:<span class="red">*</span></label></td> <td class="cell2"><input id="contactPerson" name="form[contact][person]" class="required" value="{ORDER_FORM_CONTACT_PERSON}"></td> </tr> <tr> <td class="cell1"><label for="contactPersonName">Имя:<span class="red">*</span></label></td> <td class="cell2"><input id="contactPersonName" name="form[contact][person_name]" class="required" value=""></td> </tr>
И измените js логику при отправке данных на следующую страницу, заменив вот этот код:
<form {% IF ORDER_STAGE_NUM=1 %} action="{ORDER_STAGE_CONTACTS_URL}" {% ELSEIF ORDER_STAGE_NUM=2 %} action="{ORDER_STAGE_DELIVERY_URL}" {% ELSEIF ORDER_STAGE_NUM=3 %} action="{ORDER_STAGE_PAYMENT_URL}" {% ELSEIF ORDER_STAGE_NUM=4 %} action="{ORDER_STAGE_CONFIRM_URL}" {% ENDIF %} method="post" >
На этот:
<form {% IF ORDER_STAGE_NUM=1 %} action="{ORDER_STAGE_CONTACTS_URL}" onsubmit="$('#contactPerson').val($('#contactPerson').val() + ' ' + $('#contactPersonName').val());" {% ELSEIF ORDER_STAGE_NUM=2 %} action="{ORDER_STAGE_DELIVERY_URL}" {% ELSEIF ORDER_STAGE_NUM=3 %} action="{ORDER_STAGE_PAYMENT_URL}" {% ELSEIF ORDER_STAGE_NUM=4 %} action="{ORDER_STAGE_CONFIRM_URL}" {% ENDIF %} method="post" >
Этот код будет склеивать строки фамилии и имени в одну и вставлять в ту, в которой указывается ФИО пользователя. Думаю в скором времени сделаем возможность настройки этих полей, чтобы не приходилось писать подобные фиксы.
Я сделал все как рекомендовано, появились нужные поля к обязательному заполнению, но когда я получаю заказ я не вижу полей, которые добавлял.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных