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

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

@ -1780,15 +1780,38 @@ add_action('wp_head', function () {
'en' => [ 'en' => [
'name_required' => 'The name is required.', 'name_required' => 'The name is required.',
'email_invalid' => 'Email is incorrect.', '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' => [ 'ru' => [
'name_required' => 'Поле имени обязательно для заполнения.', 'name_required' => 'Поле имени обязательно для заполнения.',
'email_invalid' => 'Введите корректный email.', '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']; $current_translations = $translations[$lang] ?? $translations['en'];
?> ?>
<script> <script>

@ -1,90 +1,90 @@
jQuery(document).ready(function($) { jQuery(document).ready(function($) {
// Static translations for both English and Russian // =====================
var translations = { // Перевод строк
en: { // =====================
error_coupon_empty: 'Please enter the coupon code.', // currentTranslations должен быть определен глобально из PHP или другого JS
error_coupon_invalid: 'Error! The coupon code is invalid or does not exist.', // Пример:
error_generic: 'An error occurred. Please try again.', // var currentTranslations = translations[language];
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: {
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 currentTranslations = window.langData.translations
var currentLang = $('body').data('lang') || 'en'; // Default to 'en' if no lang attribute is found
// Use the correct translations based on the current language $(document.body).on('updated_checkout', function() {
var currentTranslations = translations[currentLang]; 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) { if (!shippingMethodsHtml) {
shippingMethodsHtml = '<p>' + currentTranslations.shipping_method_missing + '</p>'; 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() { $(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(){ $('body').on('click', '.modal-map-control__item', function(){
if (!$(this).hasClass('active')){ if (!$(this).hasClass('active')) {
$('#addr_inp').val(''); $('#addr_inp, #pvz_inp, #billing_address_1, #billing_address_2').val('');
$('#pvz_inp').val('');
$('#billing_address_1').val('');
$('#billing_address_2').val('');
} }
$('.shipping-add-info').removeClass('active'); $('.shipping-add-info').removeClass('active');
var remote = $(this).data('remote'); var remote = $(this).data('remote');
$('.shipping-add-info[data-remote="' + remote + '"]').addClass('active'); $('.shipping-add-info[data-remote="' + remote + '"]').addClass('active');
}); });
jQuery('#addr_inp').on('click', function(){ $('#pvz_inp').on('click', function(){
jQuery('#address_input').addClass('active'); $('.open-pvz-btn').click();
}); });
});
jQuery(document).ready(function($) { $('#addr_inp').on('click', function(){
// Перехват отправки формы купона $('#address_input').addClass('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();
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) { $(document).on('click', 'button[name="apply_coupon"]', function(e) {
e.preventDefault(); // Останавливаем отправку основной формы e.preventDefault();
// Отправка данных купона через AJAX
var couponCode = $('#coupon_code').val(); var couponCode = $('#coupon_code').val();
if (!couponCode) { if (!couponCode) {
alert(currentTranslations.error_coupon_empty); // Using translated string alert(currentTranslations.error_coupon_empty);
return; return;
} }
$.ajax({ $.ajax({
url: wc_checkout_params.ajax_url, // URL для AJAX-запроса WooCommerce url: wc_checkout_params.ajax_url,
type: 'POST', type: 'POST',
data: { data: {
action: 'apply_coupon', action: 'apply_coupon',
@ -96,93 +96,80 @@ jQuery(document).ready(function($) {
$('#promo_form').hide(); $('#promo_form').hide();
$('#promo_delete').show(); $('#promo_delete').show();
$('#promo_err').hide(); $('#promo_err').hide();
$('#coupon_code_app').val(coupon_applied + ' ' + couponCode); $('#coupon_code_app').val(currentTranslations.coupon_applied + ' ' + couponCode);
$('#delete_coupon').data('coupon', couponCode); $('#delete_coupon').data('coupon', couponCode);
} else { } else {
$('#promo_err').show(); $('#promo_err').show();
} }
}, },
error: function() { 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(){ $('.woocommerce-error li').each(function () {
var address = $('#f_address').val(); var errorMessage = $(this).text().trim();
var apart = $('#f_apartment').val(); var fieldKey = $(this).data('id');
var floor = $('#f_floor').val();
var entrance = $('#f_entrance').val();
var number_phone = $('#f_number-phone').val();
var address_2 = ''; if (fieldKey) {
var errorContainer = $('#' + fieldKey + '-error');
if (errorContainer.length) {
errorContainer.html('<span class="error-message">' + errorMessage + '</span>').addClass('active');
}
}
if (apart) { // Сопоставление ошибок с переводами
address_2 += ' кв ' + apart; if (
} errorMessage === 'phone_err' ||
if (floor) { errorMessage === 'The string supplied did not seem to be a phone number.' ||
address_2 += ' этаж ' + floor; errorMessage.includes('Некорректный номер телефона')
} ) {
if (entrance) { $('#billing_phone-error').html(currentTranslations.phone_number_error).addClass('active');
address_2 += ' подъезд ' + entrance; }
}
if (number_phone) {
address_2 += ' домофон ' + number_phone;
}
$('#addr_inp').val(address + address_2); if (
$('#billing_address_1').val(address); errorMessage === 'Order pickup point not selected.' ||
$('#billing_address_2').val(address_2); errorMessage === 'Не выбран ПВЗ для доставки заказа.'
) {
$('#pvz-error').html(currentTranslations.shipping_method_error).addClass('active');
}
if (errorMessage === 'adress_error') {
$('#adr-error').html(currentTranslations.shipping_address_error).addClass('active');
}
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');
}
});
}); });
});
// jQuery(document).ready(function ($) { // =====================
// $(document.body).on('checkout_error', function () { // Удаление купона
// $('.form-input__error').removeClass('active'); // =====================
$('#delete_coupon').on('click', function(){
// $('.woocommerce-error li').each(function () { $('.woocommerce-remove-coupon[data-coupon="' + $(this).data('coupon') + '"]').click();
// var errorMessage = $(this).text().trim(); $('#promo_form').show();
// var fieldKey = $(this).data('id'); $('#promo_delete').hide();
// if (fieldKey) { });
// var errorContainer = $('#' + fieldKey + '-error');
// if (errorContainer.length) { $('.woocommerce-remove-coupon').on('click', function(){
// errorContainer.html('<span class="error-message">' + errorMessage + '</span>'); $('#promo_form').show();
// $('#' + fieldKey + '-error').addClass('active'); $('#promo_delete').hide();
// } });
// } });
// 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();
// });
// });

Loading…
Cancel
Save