Task 6991 | Вывод инфо об отслеживании в заказах

pull/36/head
parent bb66bcdacf
commit de7d2f0bd0
  1. 32
      wp-content/themes/cosmopet/global-functions/multilang-functions.php
  2. 21
      wp-content/themes/cosmopet/modules/forms/assets/js/form.js
  3. 1
      wp-content/themes/cosmopet/modules/forms/module-ajax-controller.php
  4. 4
      wp-content/themes/cosmopet/modules/profile/assets/css/profile.css
  5. 118
      wp-content/themes/cosmopet/modules/profile/components/profile/component-controller.php
  6. 32
      wp-content/themes/cosmopet/modules/shop/components/checkout/assets/js/script.js
  7. 6
      wp-content/themes/cosmopet/modules/shop/module-ajax-controller.php
  8. 9
      wp-content/themes/cosmopet/static/css/front-page.css
  9. 6
      wp-content/themes/cosmopet/templates/footer.twig
  10. 6
      wp-content/themes/cosmopet/templates/profile/order-list.twig

@ -143,6 +143,33 @@ add_action('init', function () {
], ],
'group' => 'General', 'group' => 'General',
], ],
[
'name' => 'Соглашение о конфиденциальности',
'string' => 'Соглашение о конфиденциальности',
'translations' => [
'ru' => 'Соглашение о конфиденциальности',
'en' => 'Privacy policy',
],
'group' => 'General',
],
[
'name' => 'Декларация соответствия корма',
'string' => 'Декларация соответствия корма',
'translations' => [
'ru' => 'Декларация соответствия корма',
'en' => 'Declaration of conformity of feed',
],
'group' => 'General',
],
[
'name' => 'Декларация соответствия лакомств',
'string' => 'Декларация соответствия лакомств',
'translations' => [
'ru' => 'Декларация соответствия лакомств',
'en' => 'Declaration of conformity of treats',
],
'group' => 'General',
],
[ [
'name' => 'Чат бот с ветеринаром', 'name' => 'Чат бот с ветеринаром',
'string' => 'Чат бот с ветеринаром', 'string' => 'Чат бот с ветеринаром',
@ -1771,8 +1798,8 @@ pll_register_string('Запомнить меня', 'Запомнить меня'
// Регистрируем строковые переводы для динамической подстановки в js // Регистрируем строковые переводы для динамической подстановки в JS
/* TO_DO: переделать под ppl_e() */
add_action('wp_head', function () { add_action('wp_head', function () {
if (function_exists('pll_current_language')) { if (function_exists('pll_current_language')) {
$lang = pll_current_language(); $lang = pll_current_language();
@ -1815,6 +1842,7 @@ add_action('wp_head', function () {
$current_translations = $translations[$lang] ?? $translations['en']; $current_translations = $translations[$lang] ?? $translations['en'];
?> ?>
<? // GP | Обращаемся из wp-content/themes/cosmopet/modules/forms/assets/js/form.js ?>
<script> <script>
window.langData = { window.langData = {
currentLang: "<?php echo esc_js($lang); ?>", currentLang: "<?php echo esc_js($lang); ?>",

@ -10,7 +10,7 @@ jQuery(document).ready(function($) {
if (!validateForm(this)) return; if (!validateForm(this)) return;
// TO_DO: переделать на window.ajax_url
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
url: woocommerce_params.ajax_url, url: woocommerce_params.ajax_url,
@ -38,9 +38,15 @@ jQuery(document).ready(function($) {
}); });
}); });
});
const t = window.langData?.translations || {};
/**
*
* Start: Валидация форм (футер, регистрация, подписка "Отсутсвует товар" в блоге и т.д.)
* Переводы ошибок регистрирубтся в wp-content/themes/cosmopet/global-functions/multilang-functions.php
*
*/
const pllTranslationsFromWindow = window.langData?.translations || {};
function validateForm(form) { function validateForm(form) {
clearErrorMessages(form); clearErrorMessages(form);
@ -48,21 +54,21 @@ jQuery(document).ready(function($) {
const nameInput = form.querySelector('input[name="name"]'); const nameInput = form.querySelector('input[name="name"]');
if (nameInput && !nameInput.value.trim()) { if (nameInput && !nameInput.value.trim()) {
showError(nameInput, t.name_required); showError(nameInput, pllTranslationsFromWindow.name_required);
validated = false; validated = false;
} }
const emailInput = form.querySelector('input[name="email"]'); const emailInput = form.querySelector('input[name="email"]');
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (emailInput && !emailPattern.test(emailInput.value.trim())) { if (emailInput && !emailPattern.test(emailInput.value.trim())) {
showError(emailInput, t.email_invalid); showError(emailInput, pllTranslationsFromWindow.email_invalid);
validated = false; validated = false;
} }
const phoneInput = form.querySelector('input[name="phone"]'); const phoneInput = form.querySelector('input[name="phone"]');
const phonePattern = /^\+?\d{10,15}$/; const phonePattern = /^\+?\d{10,15}$/;
if (phoneInput && !phonePattern.test(phoneInput.value.trim())) { if (phoneInput && !phonePattern.test(phoneInput.value.trim())) {
showError(phoneInput, t.phone_invalid); showError(phoneInput, pllTranslationsFromWindow.phone_invalid);
validated = false; validated = false;
} }
@ -86,4 +92,7 @@ jQuery(document).ready(function($) {
}); });
} }
/* End: Валидация форм (футер, регистрация, подписка "Отсутсвует товар" в блоге и т.д.) */
});

@ -2,6 +2,7 @@
require_once 'module-controller.php'; require_once 'module-controller.php';
/* Вынести в FormHandler */
function get_current_user_data(){ function get_current_user_data(){
if (is_user_logged_in()) { if (is_user_logged_in()) {
$user_id = get_current_user_id(); $user_id = get_current_user_id();

@ -2640,3 +2640,7 @@ padding-left: 5px;
left: 50%; left: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
} }
.cabinet-card__button.cabinet-card-order-detail-main__link{
max-width: max-content;
}

@ -65,124 +65,6 @@ $context['bot_username'] = defined('BOT_USERNAME') ? BOT_USERNAME : '';
$current_user_id = get_current_user_id(); $current_user_id = get_current_user_id();
$context['current_user_id'] = $current_user_id; $context['current_user_id'] = $current_user_id;
// Запрос для питомцев
// if ($current_user_id) {
// $args = [
// 'post_type' => 'pets',
// 'meta_query' => [
// [
// 'key' => 'user',
// 'value' => $current_user_id,
// 'compare' => '='
// ]
// ]
// ];
// $pets = Timber::get_posts($args);
// // Обработка ACF-полей для каждого питомца
// foreach ($pets as &$pet) {
// // ACF-поля
// $pet->weight = get_field('weight', $pet->ID);
// $pet->old = get_field('old', $pet->ID);
// $pet->activity = get_field('activity', $pet->ID);
// // Перевод веса
// switch ($pet->weight) {
// case 'below_1_5':
// $pet->weight_text = __('from 0,5 kg to 1,5 kg', 'woodmart');
// break;
// case '1_5-3':
// $pet->weight_text = __('from 1.5 to 3 kg', 'woodmart');
// break;
// case '3-5':
// $pet->weight_text = __('from 3 to 5 kg', 'woodmart');
// break;
// case '5-8':
// $pet->weight_text = __('from 5 to 8 kg', 'woodmart');
// break;
// case '8-11':
// $pet->weight_text = __('from 8 to 11 kg', 'woodmart');
// break;
// case '11-15':
// $pet->weight_text = __('from 11 to 15 kg', 'woodmart');
// break;
// case '15-20':
// $pet->weight_text = __('from 15 to 20 kg', 'woodmart');
// break;
// case '20-25':
// $pet->weight_text = __('from 20 to 25 kg', 'woodmart');
// break;
// case '25-35':
// $pet->weight_text = __('from 25 to 35 kg', 'woodmart');
// break;
// case 'more_35':
// $pet->weight_text = __('More than 35 kg', 'woodmart');
// break;
// default:
// $pet->weight_text = '';
// }
// // Перевод возраста
// switch ($pet->old) {
// case 'normal':
// $pet->old_text = __('Adult (from 1 year to 7 years)', 'woodmart');
// break;
// case 'old':
// $pet->old_text = __('Elderly (from 7 to 12 years)', 'woodmart');
// break;
// case 'very_old':
// $pet->old_text = __('Aging (12 years and older)', 'woodmart');
// break;
// case 'baby':
// $pet->old_text = __('Baby (from 0 to 1 year)', 'woodmart');
// break;
// default:
// $pet->old_text = '';
// }
// // Перевод активности
// switch ($pet->activity) {
// case 'low':
// $pet->activity_text = __('Low', 'woodmart');
// break;
// case 'moderate':
// $pet->activity_text = __('Moderate', 'woodmart');
// break;
// case 'high':
// $pet->activity_text = __('High', 'woodmart');
// break;
// default:
// $pet->activity_text = '';
// }
// }
// $context['pets'] = $pets;
// }
// Месяцы для локализации
$context['months'] = [
__('january', 'woodmart'),
__('february', 'woodmart'),
__('march', 'woodmart'),
__('april', 'woodmart'),
__('may', 'woodmart'), // Исправлено 'mail' на 'may'
__('june', 'woodmart'),
__('july', 'woodmart'),
__('august', 'woodmart'),
__('september', 'woodmart'),
__('october', 'woodmart'),
__('november', 'woodmart'),
__('december', 'woodmart'),
];
if ($orders_pg){ if ($orders_pg){
Timber::render('profile/profile-orders.twig', $context); Timber::render('profile/profile-orders.twig', $context);
} }

@ -1,18 +1,15 @@
jQuery(document).ready(function($) { jQuery(document).ready(function($) {
// =====================
// Перевод строк
// =====================
// currentTranslations должен быть определен глобально из PHP или другого JS
// Пример:
// var currentTranslations = translations[language];
// =====================
// Обновление методов доставки
// =====================
/**
* Start: Костыль - обновление доставки
* Необходимый костыль чтоб в кастомной верстке работало обновление полей доставки
* на базе стандартного события от Woo - updated_checkout
*
*/
var currentTranslations = window.langData.translations var currentTranslations = window.langData.translations
$(document.body).on('updated_checkout', function() { $(document.body).on('updated_checkout', function () { //
var shippingMethodsHtml = $('.woocommerce-checkout-review-order-table .woocommerce-shipping-methods').html(); var shippingMethodsHtml = $('.woocommerce-checkout-review-order-table .woocommerce-shipping-methods').html();
if (!shippingMethodsHtml) { if (!shippingMethodsHtml) {
@ -28,6 +25,9 @@ jQuery(document).ready(function($) {
$('.order-contacts__delivery').addClass('loading'); $('.order-contacts__delivery').addClass('loading');
}); });
/* End: Костыль - обновление доставки */
// ===================== // =====================
// Обработка клика по ПВЗ // Обработка клика по ПВЗ
// ===================== // =====================
@ -108,9 +108,14 @@ jQuery(document).ready(function($) {
}); });
}); });
// =====================
// Обработка ошибок формы чекаута /**
// ===================== * Start: Костыль - валидация форм оформления заказа
*
* Скрыли плашку '.woocommerce-error li' и из нее забираем текст ошибки,
* а потом используем для вывода
*
*/
$(document.body).on('checkout_error', function () { $(document.body).on('checkout_error', function () {
$('.form-input__error').removeClass('active'); $('.form-input__error').removeClass('active');
@ -158,6 +163,7 @@ jQuery(document).ready(function($) {
} }
}); });
}); });
/* End: Костыль - валидация форм оформления заказа */
// ===================== // =====================
// Удаление купона // Удаление купона

@ -1,5 +1,6 @@
<?php <?php
/* Страница Checkout */
add_action( 'wp_ajax_apply_coupon', 'custom_apply_coupon' ); add_action( 'wp_ajax_apply_coupon', 'custom_apply_coupon' );
add_action( 'wp_ajax_nopriv_apply_coupon', 'custom_apply_coupon' ); add_action( 'wp_ajax_nopriv_apply_coupon', 'custom_apply_coupon' );
@ -21,6 +22,9 @@ function custom_apply_coupon() {
} }
/* Работа с корзиной */
/** /**
* Обработчик AJAX для обновления количества товара в корзине * Обработчик AJAX для обновления количества товара в корзине
*/ */
@ -114,7 +118,7 @@ function get_cart_fragment_handler() {
/** /**
* Инициализация WooCommerce AJAX * Передача на фронт в JS-объект woocommerce_params параметров для работы с WooCommerce
*/ */
add_action('wp_enqueue_scripts', 'enqueue_woocommerce_ajax_scripts'); add_action('wp_enqueue_scripts', 'enqueue_woocommerce_ajax_scripts');
function enqueue_woocommerce_ajax_scripts() { function enqueue_woocommerce_ajax_scripts() {

@ -7,7 +7,7 @@
background: var(--radial); background: var(--radial);
} }
.home .container{ .home .container{
padding: 77px 30px 245px; padding: 177px 30px 245px;
position: relative; position: relative;
} }
@ -3336,6 +3336,7 @@ color: #f4f1f0;
.invisible { .invisible {
visibility: hidden; visibility: hidden;
position: absolute;
} }
@ -3561,7 +3562,11 @@ color: #f4f1f0;
@media (min-width: 769px) and (max-width: 1200px) { @media (min-width: 769px) and (max-width: 1200px) {
.home .container { .home .container {
padding: 0px 30px 180px !important; padding: 177px 30px 180px !important;
}
.home {
overflow: hidden;
height: 85vh;
} }
.reviews_item .swiper-fade .swiper-slide { .reviews_item .swiper-fade .swiper-slide {
width:100%!important; width:100%!important;

@ -81,9 +81,9 @@
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
<a href="/privacy-policy/" class="footer-about__text" target="_blank">Соглашение о конфиденциальности</a> <a href="/privacy-policy/" class="footer-about__text" target="_blank">{{ function('pll_e', 'Соглашение о конфиденциальности') }}</a>
<a href="/wp-content/uploads/2025/06/declaration_korm.pdf" class="footer-about__text" target="_blank">Декларация соответствия корма</a> <a href="/wp-content/uploads/2025/06/declaration_korm.pdf" class="footer-about__text" target="_blank">{{ function('pll_e', 'Декларация соответствия корма') }}</a>
<a href="/wp-content/uploads/2025/06/declaration_lakomstva.pdf" class="footer-about__text" target="_blank">Декларация соответствия лакомств</a> <a href="/wp-content/uploads/2025/06/declaration_lakomstva.pdf" class="footer-about__text" target="_blank">{{ function('pll_e', 'Декларация соответствия лакомств') }}</a>
</div> </div>
{% endif %} {% endif %}

@ -1,5 +1,7 @@
{% if customer_orders %} {% if customer_orders %}
{% for order in customer_orders %} {% for order in customer_orders %}
{% set order_track = order.get_meta('order_data').number|default('') %}
{% set meta_data = order.meta_data.order_data %} {% set meta_data = order.meta_data.order_data %}
{% set shipping_address = order.get_address('shipping') %} {% set shipping_address = order.get_address('shipping') %}
<div class="cabinet-card cabinet-card--grey"> <div class="cabinet-card cabinet-card--grey">
@ -17,7 +19,6 @@
</div> </div>
<div class="cabinet-card-order__bottom"> <div class="cabinet-card-order__bottom">
<div class="cabinet-card-order__content"> <div class="cabinet-card-order__content">
{% set order_track = meta_data.order_number|default('') %}
<div class="cabinet-card-order__block-detail"> <div class="cabinet-card-order__block-detail">
<div class="cabinet-card-order__detail"> <div class="cabinet-card-order__detail">
<div class="cabinet-card-order-detail__address"> <div class="cabinet-card-order-detail__address">
@ -47,6 +48,8 @@
</div> </div>
</div> </div>
{% endfor %} {% endfor %}
</div>
</div> </div>
<div class="cabinet-card-order-detail-main__links"> <div class="cabinet-card-order-detail-main__links">
{% if order_track %} {% if order_track %}
@ -57,7 +60,6 @@
</div> </div>
</div> </div>
</div> </div>
</div>
<button class="cabinet-card-order__open-detail">{{ function('pll_e', 'Order details') }}</button> <button class="cabinet-card-order__open-detail">{{ function('pll_e', 'Order details') }}</button>
</div> </div>
<div class="cabinet-card-order__detail-short"> <div class="cabinet-card-order__detail-short">

Loading…
Cancel
Save