Task 6991 | исправлена логика переводов и вовода ошибок в чекауте

pull/36/head
parent 5aa925b201
commit 309c963515
  1. 27
      wp-content/themes/cosmopet/global-functions/multilang-functions.php
  2. 233
      wp-content/themes/cosmopet/modules/shop/components/checkout/assets/js/script.js

@ -1780,15 +1780,38 @@ add_action('wp_head', function () {
'en' => [
'name_required' => 'The name is required.',
'email_invalid' => 'Email is incorrect.',
'phone_invalid' => 'The phone number is incorrect.'
'phone_invalid' => 'The phone number is incorrect.',
'error_coupon_empty' => 'Please enter the coupon code.',
'error_coupon_invalid' => 'Error! The coupon code is invalid or does not exist.',
'error_generic' => 'An error occurred. Please try again.',
'shipping_method_error' => 'No pickup point selected for delivery.',
'shipping_address_error' => 'Delivery address not provided',
'email_taken_error' => 'This email is already registered. Please log in or provide a different email.',
'phone_number_error' => 'Incorrect phone number entered.',
'shipping_method_missing' => 'No delivery method selected. Please check your address or contact the site administration for help.',
'change_address' => 'Change address',
'shipping_updated' => 'Shipping methods will be updated during checkout.',
'coupon_applied' => 'Coupon applied: '
],
'ru' => [
'name_required' => 'Поле имени обязательно для заполнения.',
'email_invalid' => 'Введите корректный email.',
'phone_invalid' => 'Введите корректный номер телефона.'
'phone_invalid' => 'Введите корректный номер телефона.',
'error_coupon_empty' => 'Пожалуйста, введите код купона.',
'error_coupon_invalid' => 'Ошибка! Промокод введен неверно или не существует.',
'error_generic' => 'Произошла ошибка. Попробуйте ещё раз.',
'shipping_method_error' => 'Не выбран ПВЗ для доставки заказа.',
'shipping_address_error' => 'Не указан адрес доставки',
'email_taken_error' => 'Этот email уже зарегистрирован. Войдите в свой аккаунт или укажите другой E-mail.',
'phone_number_error' => 'Неправильно введен номер',
'shipping_method_missing' => 'Не выбран метод доставки. Пожалуйста перепроверьте ваш адрес или обратитесь за помощью к администрации сайта.',
'change_address' => 'Изменить адрес',
'shipping_updated' => 'Методы доставки будут обновлены в процессе оформления заказа.',
'coupon_applied' => 'Применен промокод: '
]
];
$current_translations = $translations[$lang] ?? $translations['en'];
?>
<script>

@ -1,90 +1,90 @@
jQuery(document).ready(function($) {
// Static translations for both English and Russian
var translations = {
en: {
error_coupon_empty: 'Please enter the coupon code.',
error_coupon_invalid: 'Error! The coupon code is invalid or does not exist.',
error_generic: 'An error occurred. Please try again.',
shipping_method_error: 'No pickup point selected for delivery.',
shipping_address_error: 'Delivery address not provided',
email_taken_error: 'This email is already registered. Please log in or provide a different email.',
phone_number_error: 'Incorrect phone number entered.',
shipping_method_missing: 'No delivery method selected. Please check your address or contact the site administration for help.',
change_address: 'Change address',
shipping_updated: 'Shipping methods will be updated during checkout.',
coupon_applied : 'Coupon applied: '
// =====================
// Перевод строк
// =====================
// currentTranslations должен быть определен глобально из PHP или другого JS
// Пример:
// var currentTranslations = translations[language];
},
ru: {
error_coupon_empty: 'Пожалуйста, введите код купона.',
error_coupon_invalid: 'Ошибка! Промокод введен неверно или не существует.',
error_generic: 'Произошла ошибка. Попробуйте ещё раз.',
shipping_method_error: 'Не выбран ПВЗ для доставки заказа.',
shipping_address_error: 'Не указан адрес доставки',
email_taken_error: 'Этот email уже зарегистрирован. Войдите в свой аккаунт или укажите другой E-mail.',
phone_number_error: 'Неправильно введен номер',
shipping_method_missing: 'Не выбран метод доставки. Пожалуйста перепроверьте ваш адрес или обратитесь за помощью к администрации сайта.',
change_address: 'Изменить адрес',
shipping_updated: 'Методы доставки будут обновлены в процессе оформления заказа.',
coupon_applied : 'Применен промокод: '
}
};
// =====================
// Обновление методов доставки
// =====================
// Get the current language (assuming you're using a data-lang attribute on the body or html tag)
var currentLang = $('body').data('lang') || 'en'; // Default to 'en' if no lang attribute is found
var currentTranslations = window.langData.translations
// Use the correct translations based on the current language
var currentTranslations = translations[currentLang];
$(document.body).on('updated_checkout', function() {
var shippingMethodsHtml = $('.woocommerce-checkout-review-order-table .woocommerce-shipping-methods').html();
jQuery(document.body).on('updated_checkout', function() {
// Найти новые методы доставки внутри shop_table
var shippingMethodsHtml = jQuery('.woocommerce-checkout-review-order-table .woocommerce-shipping-methods').html();
// Обновить кастомный блок
if (!shippingMethodsHtml) {
shippingMethodsHtml = '<p>' + currentTranslations.shipping_method_missing + '</p>';
}
jQuery('#custom-shipping-methods').html(shippingMethodsHtml);
jQuery('.order-contacts__delivery').removeClass('loading');
jQuery('.modal-map-control__item.active').click();
$('#custom-shipping-methods').html(shippingMethodsHtml);
$('.order-contacts__delivery').removeClass('loading');
$('.modal-map-control__item.active').click();
});
$(document.body).on('update_checkout', function() {
jQuery('.order-contacts__delivery').addClass('loading');
$('.order-contacts__delivery').addClass('loading');
});
// =====================
// Обработка клика по ПВЗ
// =====================
$('body').on('click', '.modal-map-control__item', function(){
if (!$(this).hasClass('active')) {
$('#addr_inp').val('');
$('#pvz_inp').val('');
$('#billing_address_1').val('');
$('#billing_address_2').val('');
$('#addr_inp, #pvz_inp, #billing_address_1, #billing_address_2').val('');
}
$('.shipping-add-info').removeClass('active');
var remote = $(this).data('remote');
$('.shipping-add-info[data-remote="' + remote + '"]').addClass('active');
});
jQuery('#addr_inp').on('click', function(){
jQuery('#address_input').addClass('active');
$('#pvz_inp').on('click', function(){
$('.open-pvz-btn').click();
});
$('#addr_inp').on('click', function(){
$('#address_input').addClass('active');
});
jQuery(document).ready(function($) {
// Перехват отправки формы купона
// =====================
// Обработка формы адреса
// =====================
$('#address_input input').on('change input keyup', function(){
var address = $('#f_address').val();
var apart = $('#f_apartment').val();
var floor = $('#f_floor').val();
var entrance = $('#f_entrance').val();
var number_phone = $('#f_number-phone').val();
var address_2 = '';
if (apart) address_2 += ' кв ' + apart;
if (floor) address_2 += ' этаж ' + floor;
if (entrance) address_2 += ' подъезд ' + entrance;
if (number_phone) address_2 += ' домофон ' + number_phone;
$('#addr_inp').val(address + address_2);
$('#billing_address_1').val(address);
$('#billing_address_2').val(address_2);
});
// =====================
// AJAX отправка купона
// =====================
$(document).on('click', 'button[name="apply_coupon"]', function(e) {
e.preventDefault(); // Останавливаем отправку основной формы
e.preventDefault();
// Отправка данных купона через AJAX
var couponCode = $('#coupon_code').val();
if (!couponCode) {
alert(currentTranslations.error_coupon_empty); // Using translated string
alert(currentTranslations.error_coupon_empty);
return;
}
$.ajax({
url: wc_checkout_params.ajax_url, // URL для AJAX-запроса WooCommerce
url: wc_checkout_params.ajax_url,
type: 'POST',
data: {
action: 'apply_coupon',
@ -96,93 +96,80 @@ jQuery(document).ready(function($) {
$('#promo_form').hide();
$('#promo_delete').show();
$('#promo_err').hide();
$('#coupon_code_app').val(coupon_applied + ' ' + couponCode);
$('#coupon_code_app').val(currentTranslations.coupon_applied + ' ' + couponCode);
$('#delete_coupon').data('coupon', couponCode);
} else {
$('#promo_err').show();
}
},
error: function() {
alert(currentTranslations.error_generic); // Using translated string
alert(currentTranslations.error_generic);
}
});
});
jQuery('#pvz_inp').on('click', function(){
jQuery('.open-pvz-btn').click();
});
// =====================
// Обработка ошибок формы чекаута
// =====================
$(document.body).on('checkout_error', function () {
$('.form-input__error').removeClass('active');
$('#address_input input').on('change input keyup', function(){
var address = $('#f_address').val();
var apart = $('#f_apartment').val();
var floor = $('#f_floor').val();
var entrance = $('#f_entrance').val();
var number_phone = $('#f_number-phone').val();
$('.woocommerce-error li').each(function () {
var errorMessage = $(this).text().trim();
var fieldKey = $(this).data('id');
var address_2 = '';
if (fieldKey) {
var errorContainer = $('#' + fieldKey + '-error');
if (errorContainer.length) {
errorContainer.html('<span class="error-message">' + errorMessage + '</span>').addClass('active');
}
}
// Сопоставление ошибок с переводами
if (
errorMessage === 'phone_err' ||
errorMessage === 'The string supplied did not seem to be a phone number.' ||
errorMessage.includes('Некорректный номер телефона')
) {
$('#billing_phone-error').html(currentTranslations.phone_number_error).addClass('active');
}
if (apart) {
address_2 += ' кв ' + apart;
if (
errorMessage === 'Order pickup point not selected.' ||
errorMessage === 'Не выбран ПВЗ для доставки заказа.'
) {
$('#pvz-error').html(currentTranslations.shipping_method_error).addClass('active');
}
if (floor) {
address_2 += ' этаж ' + floor;
if (errorMessage === 'adress_error') {
$('#adr-error').html(currentTranslations.shipping_address_error).addClass('active');
}
if (entrance) {
address_2 += ' подъезд ' + entrance;
if (errorMessage === 'Неверный адрес эл. почты для выставления счета') {
$('#billing_email-error').html(errorMessage).addClass('active');
}
if (number_phone) {
address_2 += ' домофон ' + number_phone;
if (errorMessage === 'Не выбран метод доставки. Пожалуйста перепроверьте ваш адрес или обратитесь за помощью к администрации сайта.') {
$('#billing_city-error').html(errorMessage).addClass('active');
}
$('#addr_inp').val(address + address_2);
$('#billing_address_1').val(address);
$('#billing_address_2').val(address_2);
if (errorMessage === 'Этот email уже зарегистрирован.') {
$('#acc-error').html(currentTranslations.email_taken_error).addClass('active');
}
});
});
// =====================
// Удаление купона
// =====================
$('#delete_coupon').on('click', function(){
$('.woocommerce-remove-coupon[data-coupon="' + $(this).data('coupon') + '"]').click();
$('#promo_form').show();
$('#promo_delete').hide();
});
// jQuery(document).ready(function ($) {
// $(document.body).on('checkout_error', function () {
// $('.form-input__error').removeClass('active');
// $('.woocommerce-error li').each(function () {
// var errorMessage = $(this).text().trim();
// var fieldKey = $(this).data('id');
// if (fieldKey) {
// var errorContainer = $('#' + fieldKey + '-error');
// if (errorContainer.length) {
// errorContainer.html('<span class="error-message">' + errorMessage + '</span>');
// $('#' + fieldKey + '-error').addClass('active');
// }
// }
// if (errorMessage == 'phone_err' || errorMessage == 'The string supplied did not seem to be a phone number.' || errorMessage.includes('Некорректный номер телефона')) {
// $('#billing_phone-error').html(currentTranslations.phone_number_error).addClass('active'); // Using translated string
// }
// if (errorMessage == 'Order pickup point not selected.' || errorMessage == 'Не выбран ПВЗ для доставки заказа.') {
// $('#pvz-error').html(currentTranslations.shipping_method_error).addClass('active'); // Using translated string
// }
// if (errorMessage == 'adress_error') {
// $('#adr-error').html(currentTranslations.shipping_address_error).addClass('active'); // Using translated string
// }
// if (errorMessage == 'Неверный адрес эл. почты для выставления счета') {
// $('#billing_email-error').html(errorMessage).addClass('active');
// }
// if (errorMessage == 'Не выбран метод доставки. Пожалуйста перепроверьте ваш адрес или обратитесь за помощью к администрации сайта.') {
// $('#billing_city-error').html(errorMessage).addClass('active');
// }
// if (errorMessage == 'Этот email уже зарегистрирован.') {
// $('#acc-error').html(currentTranslations.email_taken_error).addClass('active'); // Using translated string
// }
// });
// });
// $('#delete_coupon').on('click', function(){
// $('.woocommerce-remove-coupon[data-coupon=' + $(this).data('coupon') + ']').click();
// $('#promo_form').show();
// $('#promo_delete').hide();
// });
// $('.woocommerce-remove-coupon').on('click', function(){
// $('#promo_form').show();
// $('#promo_delete').hide();
// });
// });
$('.woocommerce-remove-coupon').on('click', function(){
$('#promo_form').show();
$('#promo_delete').hide();
});
});

Loading…
Cancel
Save