From 7499a8aa243233dac0eaf080301881c2b405a65b Mon Sep 17 00:00:00 2001 From: maksim Date: Thu, 7 Aug 2025 15:49:55 +0300 Subject: [PATCH] =?UTF-8?q?Task=207719=20|=20=D0=BD=D0=B0=D1=82=D1=8F?= =?UTF-8?q?=D0=B6=D0=BA=D0=B0=20=D0=B2=D0=B5=D1=80=D1=81=D1=82=D0=BA=D0=B8?= =?UTF-8?q?=20single=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=8B=20?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=D0=B0=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wp-content/themes/cosmopet/functions.php | 10 +- .../cosmopet/modules/shop/CosmopetProduct.php | 488 ++++++++++++++++++ .../product-card/assets/css/product-card.css | 26 +- .../assets/css/product-style.css | 91 +++- .../component-controller.php | 28 +- .../modules/shop/module-controller.php | 1 + wp-content/themes/cosmopet/single-product.php | 3 +- .../cosmopet/temp-functions/timber-logic.php | 30 +- .../templates/shop/single-product_page.twig | 289 ----------- .../cosmopet/{templates => views}/404.twig | 0 .../shop/archive-product-ajaxload.twig | 0 .../_blocks/shop/archive-product-tease.twig | 0 .../{templates => views}/_pages/about.twig | 0 .../_pages/front-page.twig | 0 .../_pages/new-front-page.twig | 0 .../_pages/new-front-page/main-about.twig | 0 .../_pages/new-front-page/main-bot.twig | 0 .../_pages/new-front-page/main-cosmopetx.twig | 0 .../_pages/new-front-page/main-food.twig | 0 .../_pages/new-front-page/main-gallery.twig | 0 .../new-front-page/main-ingredients.twig | 0 .../_pages/new-front-page/main-media.twig | 0 .../_pages/new-front-page/main-quiz.twig | 0 .../_pages/new-front-page/main-reviews.twig | 0 .../_pages/new-front-page/main-slider.twig | 0 .../new-front-page/main-specialists.twig | 0 .../_pages/new-front-page/main-treats.twig | 0 .../_pages/new-front-page/main-why.twig | 0 .../{templates => views}/_pages/policy.twig | 0 .../_pages/production.twig | 0 .../_pages/shop/archive-product.twig | 0 .../_pages/shop/product-single.twig | 0 .../{templates => views}/_pages/wtb.twig | 0 .../blog/author-banner.twig | 0 .../blog/blog-archive.twig | 0 .../blog/blog-front-page-post-list_block.twig | 0 .../blog/blog-front-page_block.twig | 0 .../{templates => views}/blog/blog-page.twig | 0 .../blog/blog-single.twig | 0 .../blog/category-list.twig | 0 .../blog/comments/comment-single.twig | 0 .../blog/comments/comments.twig | 0 .../{templates => views}/blog/editorial.twig | 0 .../blog/featured-slider.twig | 0 .../{templates => views}/blog/most-read.twig | 0 .../{templates => views}/blog/news-list.twig | 0 .../{templates => views}/blog/themes.twig | 0 .../blog_author/author-archive.twig | 0 .../blog_author/author-posts-list.twig | 0 .../blog_author/author-single.twig | 0 .../{templates => views}/comment/comment.twig | 0 .../cosmopet/{templates => views}/footer.twig | 0 .../{templates => views}/form-coupon.twig | 0 .../forms/author-form.twig | 0 .../{templates => views}/forms/discount.twig | 0 .../forms/footer-form.twig | 0 .../{templates => views}/forms/form-thx.twig | 0 .../forms/parthners-form.twig | 0 .../head-pixel-functions.twig | 0 .../cosmopet/{templates => views}/header.twig | 0 .../cosmopet/{templates => views}/layout.twig | 0 .../{templates => views}/menu/main-menu.twig | 0 .../menu/mobile-menu.twig | 0 .../menu/product-menu.twig | 0 .../cosmopet/{templates => views}/modal.twig | 0 .../{templates => views}/modal/basket.twig | 0 .../{templates => views}/modal/login.twig | 0 .../modal/rewiew_modal.twig | 0 .../{templates => views}/modal/to_know.twig | 0 .../cosmopet/{templates => views}/page.twig | 0 .../profile/order-list.twig | 0 .../profile/pet-card.twig | 0 .../profile/pet-edit-card.twig | 0 .../profile/profile-base.twig | 0 .../profile/profile-modals.twig | 0 .../profile/profile-orders.twig | 0 .../profile/profile-subs-single.twig | 0 .../profile/profile-subs.twig | 0 .../{templates => views}/profile/profile.twig | 0 .../shop/bestsellers.twig | 0 .../shop/cart-bottom.twig | 0 .../shop/cart-contents.twig | 0 .../{templates => views}/shop/checkout.twig | 0 .../shop/product-card.twig} | 0 ...bscription-options-prompt-radio-block.twig | 0 .../shop/products-section_block.twig | 2 +- .../shop/review-order.twig | 0 .../shop/reviews-section_block.twig | 0 .../shop/reviews-slide_element.twig | 0 .../{templates => views}/shop/shop.twig | 0 .../cosmopet/views/shop/single-product.twig | 321 ++++++++++++ 91 files changed, 931 insertions(+), 358 deletions(-) create mode 100644 wp-content/themes/cosmopet/modules/shop/CosmopetProduct.php delete mode 100644 wp-content/themes/cosmopet/templates/shop/single-product_page.twig rename wp-content/themes/cosmopet/{templates => views}/404.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_blocks/shop/archive-product-ajaxload.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_blocks/shop/archive-product-tease.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/about.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/front-page.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page/main-about.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page/main-bot.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page/main-cosmopetx.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page/main-food.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page/main-gallery.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page/main-ingredients.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page/main-media.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page/main-quiz.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page/main-reviews.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page/main-slider.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page/main-specialists.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page/main-treats.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/new-front-page/main-why.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/policy.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/production.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/shop/archive-product.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/shop/product-single.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/_pages/wtb.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/author-banner.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/blog-archive.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/blog-front-page-post-list_block.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/blog-front-page_block.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/blog-page.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/blog-single.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/category-list.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/comments/comment-single.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/comments/comments.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/editorial.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/featured-slider.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/most-read.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/news-list.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog/themes.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog_author/author-archive.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog_author/author-posts-list.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/blog_author/author-single.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/comment/comment.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/footer.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/form-coupon.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/forms/author-form.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/forms/discount.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/forms/footer-form.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/forms/form-thx.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/forms/parthners-form.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/head-pixel-functions.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/header.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/layout.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/menu/main-menu.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/menu/mobile-menu.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/menu/product-menu.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/modal.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/modal/basket.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/modal/login.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/modal/rewiew_modal.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/modal/to_know.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/page.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/profile/order-list.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/profile/pet-card.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/profile/pet-edit-card.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/profile/profile-base.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/profile/profile-modals.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/profile/profile-orders.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/profile/profile-subs-single.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/profile/profile-subs.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/profile/profile.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/shop/bestsellers.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/shop/cart-bottom.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/shop/cart-contents.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/shop/checkout.twig (100%) rename wp-content/themes/cosmopet/{templates/shop/product-card_element.twig => views/shop/product-card.twig} (100%) rename wp-content/themes/cosmopet/{templates => views}/shop/product-subscription-options-prompt-radio-block.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/shop/products-section_block.twig (73%) rename wp-content/themes/cosmopet/{templates => views}/shop/review-order.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/shop/reviews-section_block.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/shop/reviews-slide_element.twig (100%) rename wp-content/themes/cosmopet/{templates => views}/shop/shop.twig (100%) create mode 100644 wp-content/themes/cosmopet/views/shop/single-product.twig diff --git a/wp-content/themes/cosmopet/functions.php b/wp-content/themes/cosmopet/functions.php index 49caa1f..fa92afa 100644 --- a/wp-content/themes/cosmopet/functions.php +++ b/wp-content/themes/cosmopet/functions.php @@ -22,4 +22,12 @@ require_once __DIR__ . '/temp-functions/login-logic.php'; // include_module('profile'); // include_module('footer'); // include_module('author'); -// include_module('layout'); \ No newline at end of file +// include_module('layout'); + +include_once('modules/shop/CosmopetProduct.php'); + +add_filter('timber/post/classmap', function ($classmap) { + $classmap['product'] = CosmopetProduct::class; + return $classmap; +}, 100); + diff --git a/wp-content/themes/cosmopet/modules/shop/CosmopetProduct.php b/wp-content/themes/cosmopet/modules/shop/CosmopetProduct.php new file mode 100644 index 0000000..af3a010 --- /dev/null +++ b/wp-content/themes/cosmopet/modules/shop/CosmopetProduct.php @@ -0,0 +1,488 @@ +id, '_composition', true); + } + + + public function getImageGallery($size) { + // Инициализируем массив для результатов + $images_array = array(); + + // Получаем ID основного изображения товара + $thumbnail_id = get_post_thumbnail_id($this->id); + // Добавляем основное изображение + if ($thumbnail_id) { + $images_array[] = array( + 'url' => wp_get_attachment_image_url($thumbnail_id, $size), + 'alt' => get_post_meta($thumbnail_id, '_wp_attachment_image_alt', true) + ); + } else { + // Используем заглушку, если нет основного изображения + $images_array[] = array( + 'url' => wc_placeholder_img_src(), + 'alt' => __('Placeholder image', 'woocommerce') + ); + } + + // Получаем галерею изображений + if ($this->product && method_exists($this->product, 'get_gallery_image_ids')) { + $gallery_image_ids = $this->product->get_gallery_image_ids(); + } else { + $gallery_image_ids = []; + } + + // Добавляем изображения из галереи + if (!empty($gallery_image_ids)) { + foreach ($gallery_image_ids as $image_id) { + $image_url = wp_get_attachment_image_url($image_id, $size); + if ($image_url) { + $images_array[] = array( + 'url' => $image_url, + 'alt' => get_post_meta($image_id, '_wp_attachment_image_alt', true) + ); + } + } + } + + return $images_array; + } + + + public function get_weight() { + $custom_measurement = get_post_meta($this->id, '_custom_measurement', true) ?: pll__('кг'); + $custom_size = get_post_meta($this->id, '_size_for_display', true) ?: ''; + + if ($custom_size){ + return $custom_size ? $custom_size . ' ' . $custom_measurement : ''; + } + else{ + if ($this->product && method_exists($this->product, 'get_weight')) { + return $this->product->get_weight() ? $this->product->get_weight() . ' ' . $custom_measurement : ''; + } + return ''; + } + return ''; + } + + public function getNumericWeight() { + $custom_size = get_post_meta($this->id, '_size_for_display', true) ?: ''; + + if ($custom_size){ + return floatval($custom_size); + } + else{ + if ($this->product && method_exists($this->product, 'get_weight')) { + return floatval($this->product->get_weight()); + } + return 0; + } + return 0; + } + + /** + * Получает CSS класс вкуса для товара + * @return string CSS класс вкуса (например, --food-fish, --treats-beef) + */ + public function getTasteClass() { + // Получаем категории товара + $product_categories = $this->product->get_category_ids(); + + $is_food = false; + $is_treats = false; + // Определяем тип товара (корм или лакомство) + foreach ($product_categories as $cat) { + if ($cat == 365) { + $is_food = true; + } elseif ($cat == 367) { + $is_treats = true; + } + } + + // Определяем префикс типа товара + $type_prefix = ''; + if ($is_food) { + $type_prefix = 'food'; + } elseif ($is_treats) { + $type_prefix = 'treats'; + } else { + $type_prefix = 'acc'; // Дефолтный тип + } + + // Получаем термины атрибута compound (вкус) + $compound_terms = get_the_terms($this->id, 'pa_compound'); + $taste_suffix = ''; + + if ($compound_terms && !is_wp_error($compound_terms)) { + foreach ($compound_terms as $term) { + switch ($term->slug) { + case 'govyadina': + $taste_suffix = 'beef'; + break; + case 'indejka': + $taste_suffix = 'turkey'; + break; + case 'krolik': + $taste_suffix = 'rabbit'; + break; + case 'losos': + $taste_suffix = 'salmon'; + break; + case 'ryba': + $taste_suffix = 'fish'; + break; + case 'utka': + $taste_suffix = 'duck'; + break; + case 'yagnenok': + $taste_suffix = 'lamb'; + break; + } + + // Если нашли вкус, прерываем цикл + if ($taste_suffix) { + break; + } + } + } + + // Если вкус не найден, используем дефолтные суффиксы по типу товара + if (!$taste_suffix) { + if ($is_food) { + $taste_suffix = 'fish'; + } elseif ($is_treats) { + $taste_suffix = 'beef'; + } else { + $taste_suffix = ''; // Дефолтный суффикс + } + } + + return '--' . $type_prefix . '-' . $taste_suffix; + } + + public function getSizeSiblings() { + + $term = get_the_terms($this->id, 'pa_collection'); + if ($term) { + $term = $term[0]->term_id; + } else { + return []; + } + + $args = array( + 'posts_per_page' => -1, + 'post_type' => 'product', + 'order' => 'ASC', + 'orderby' => 'name', // Fixed parameter name (was 'order_by') + 'tax_query' => [ + [ + 'taxonomy' => 'pa_collection', + 'terms' => $term, + 'field' => 'id', + ] + ], + ); + + $siblings = Timber::get_posts($args); + + // Create array with products and their weights + $siblings_with_weights = []; + foreach ($siblings as $sibling) { + $weight = $sibling->get_weight(); + $siblings_with_weights[] = [ + 'post' => $sibling, + 'weight' => floatval($weight) // Ensure weight is treated as a number + ]; + } + + // Sort by weight + usort($siblings_with_weights, function($a, $b) { + return $a['weight'] <=> $b['weight']; + }); + + // Extract just the posts in sorted order + $sorted_siblings = array_map(function($item) { + return $item['post']; + }, $siblings_with_weights); + return $sorted_siblings; + } + + protected function get_category_products(){ + // Получаем все товары с похожими атрибутами + $args = array( + 'posts_per_page' => -1, + 'post_type' => 'product', + 'order' => 'ASC', + 'orderby' => 'name', + 'post_status' => 'publish' + ); + + error_log("get_category_products: Запрос товаров"); + $posts = Timber::get_posts($args); + error_log("get_category_products: Получено товаров: " . (is_array($posts) ? count($posts) : 'не массив')); + + // Преобразуем в массив, если это PostCollection или PostQuery + if ($posts instanceof \Timber\PostCollection || $posts instanceof \Timber\PostQuery) { + $result = $posts->get_posts(); + error_log("get_category_products: Преобразовано в массив: " . count($result)); + return $result; + } + + $result = is_array($posts) ? $posts : []; + error_log("get_category_products: Возвращаем: " . count($result)); + return $result; + } + + public function getProductConstructor() { + $all_products = $this->get_category_products(); + $constructor = []; + + // Получаем атрибуты текущего товара + $current_product_attributes = []; + $current_weight = $this->getNumericWeight(); + + // Получаем значения атрибутов текущего товара + foreach ($this->sibling_categories as $taxonomy) { + $terms = get_the_terms($this->id, $taxonomy); + if ($terms && !is_wp_error($terms)) { + $current_product_attributes[$taxonomy] = array_map(function($term) { + return $term->term_id; + }, $terms); + } + } + + // Отладочная информация + error_log("=== Конструктор товара ==="); + error_log("Текущий товар ID: " . $this->id); + error_log("Текущий вес (числовой): " . $current_weight); + error_log("Всего товаров в коллекции: " . count($all_products)); + error_log("Атрибуты текущего товара: " . print_r($current_product_attributes, true)); + + // Группируем товары по атрибутам + foreach ($this->sibling_categories as $taxonomy) { + // Проверяем, есть ли у текущего товара значение для этой категории + if (!isset($current_product_attributes[$taxonomy])) { + error_log("Пропускаем $taxonomy - нет значения у текущего товара"); + continue; // Пропускаем, если у товара нет значения для этой категории + } + + $constructor[$taxonomy] = [ + 'taxonomy' => $taxonomy, + 'label' => $this->getAttributeLabel($taxonomy), + 'current_value' => $this->getCurrentAttributeValue($taxonomy), + 'options' => [] + ]; + + error_log("Обрабатываем атрибут: $taxonomy"); + error_log("Атрибуты текущего товара для проверки: " . print_r($current_product_attributes, true)); + + foreach ($all_products as $product) { + // Получаем атрибуты сравниваемого товара + $compare_attributes = []; + foreach ($this->sibling_categories as $compare_taxonomy) { + $terms = get_the_terms($product->id, $compare_taxonomy); + if ($terms && !is_wp_error($terms)) { + $compare_attributes[$compare_taxonomy] = array_map(function($term) { + return $term->term_id; + }, $terms); + } + } + + // Проверяем, совпадают ли все остальные атрибуты и вес + $attributes_match = true; + $differences = []; + + // Проверяем только атрибуты из sibling_categories + foreach ($this->sibling_categories as $compare_taxonomy) { + if ($compare_taxonomy === $taxonomy) { + continue; // Пропускаем проверяемую категорию + } + + // Если у текущего товара есть значение для этой категории + if (isset($current_product_attributes[$compare_taxonomy])) { + // Проверяем, есть ли у сравниваемого товара значение для этой категории + if (!isset($compare_attributes[$compare_taxonomy])) { + $attributes_match = false; + $differences[] = "Нет атрибута $compare_taxonomy у сравниваемого товара"; + break; + } + + // Проверяем, совпадают ли значения + $current_values = $current_product_attributes[$compare_taxonomy]; + $compare_values = $compare_attributes[$compare_taxonomy]; + + if (array_diff($current_values, $compare_values) !== [] || + array_diff($compare_values, $current_values) !== []) { + $attributes_match = false; + $differences[] = "Не совпадают значения для $compare_taxonomy"; + break; + } + } + // Если у текущего товара НЕТ значения для этой категории, + // то у сравниваемого товара тоже не должно быть значения + else { + if (isset($compare_attributes[$compare_taxonomy])) { + $attributes_match = false; + $differences[] = "У сравниваемого товара есть атрибут $compare_taxonomy, а у текущего нет"; + break; + } + } + } + + // Проверяем вес (числовое сравнение) + $compare_weight = $product->getNumericWeight(); + if (abs($current_weight - $compare_weight) > 0.01) { // Используем небольшой допуск для float + $attributes_match = false; + $differences[] = "Не совпадает вес: текущий '$current_weight' vs сравниваемый '$compare_weight'"; + } + + // Если все атрибуты и вес совпадают, добавляем товар в группу + if ($attributes_match) { + error_log("Товар {$product->id} подходит для атрибута $taxonomy"); + $product_terms = get_the_terms($product->id, $taxonomy); + if ($product_terms && !is_wp_error($product_terms)) { + foreach ($product_terms as $term) { + $option_key = $term->term_id; + if (!isset($constructor[$taxonomy]['options'][$option_key])) { + $constructor[$taxonomy]['options'][$option_key] = [ + 'term_id' => $term->term_id, + 'name' => $term->name, + 'slug' => $term->slug, + 'products' => [] + ]; + } + $constructor[$taxonomy]['options'][$option_key]['products'][] = $product; + } + } + } else { + error_log("Товар {$product->id} НЕ подходит для атрибута $taxonomy. Причины: " . implode(', ', $differences)); + } + } + + error_log("Найдено опций для $taxonomy: " . count($constructor[$taxonomy]['options'])); + + // Показываем детали найденных опций + foreach ($constructor[$taxonomy]['options'] as $option_id => $option) { + error_log("Опция $option_id ({$option['name']}): " . count($option['products']) . " товаров"); + foreach ($option['products'] as $product) { + error_log(" - Товар {$product->id}: {$product->title}"); + } + } + } + + error_log("Итоговый конструктор: " . print_r($constructor, true)); + return $constructor; + } + + protected function getAttributeLabel($taxonomy) { + $labels = [ + 'pa_age-of-the-cat' => 'ВОЗРАСТ КОШКИ', + 'pa_age-of-the-dog' => 'ВОЗРАСТ СОБАКИ', + 'pa_compound' => 'ВКУС КОРМА', + 'pa_reproductive-status' => 'РЕПРОДУКТИВНЫЙ СТАТУС', + 'pa_series' => 'СЕРИЯ', + ]; + + return $labels[$taxonomy] ?? wc_attribute_label($taxonomy); + } + + protected function getCurrentAttributeValue($taxonomy) { + $terms = get_the_terms($this->id, $taxonomy); + if ($terms && !is_wp_error($terms)) { + return $terms[0]->term_id; + } + return null; + } + + public function getAllAttributes() { + $attributes = []; + foreach ($this->sibling_categories as $taxonomy) { + $terms = get_the_terms($this->id, $taxonomy); + if ($terms && !is_wp_error($terms)) { + $attributes[$taxonomy] = []; + foreach ($terms as $term) { + $attributes[$taxonomy][] = [ + 'term_id' => $term->term_id, + 'name' => $term->name, + 'slug' => $term->slug + ]; + } + } + } + return $attributes; + } + + public function getPrice(){ + $price = $this->product->get_price() . ' ' . get_woocommerce_currency_symbol(); + return $price; + } + + public function getRegularPrice(){ + $regular_price = $this->product->get_regular_price() . ' ' . get_woocommerce_currency_symbol(); + if ($regular_price != $this->getPrice()){ + return $regular_price; + } + else{ + return ''; + } + } + + public function getPriceDifferenceInPercent(){ + $regular_price = $this->product->get_regular_price(); + $price = $this->product->get_price(); + $difference = ($regular_price - $price) / $regular_price * 100; + $difference = round($difference, 0) . '%'; + return $difference; + } + + public function getReviews(){ + + $reviews = get_posts(array( + 'post_type' => 'p_reviews', + 'numberposts' => -1, + 'meta_query' => array( + array( + 'key' => 'products', + 'value' => '"' . $this->id . '"', + 'compare' => 'LIKE' + ) + ) + )); + + return $reviews; + } + + public function getRelatedProducts(){ + $related_products = []; + $related_products_ids = $this->product->get_upsell_ids(); + if ($related_products_ids) { + foreach ($related_products_ids as $related_id) { + $related_product = Timber::get_post($related_id); + if ($related_product) { + $related_products[] = $related_product; + } + } + } + return $related_products; + } +}; + + diff --git a/wp-content/themes/cosmopet/modules/shop/components/product-card/assets/css/product-card.css b/wp-content/themes/cosmopet/modules/shop/components/product-card/assets/css/product-card.css index ffbc046..cb3d230 100644 --- a/wp-content/themes/cosmopet/modules/shop/components/product-card/assets/css/product-card.css +++ b/wp-content/themes/cosmopet/modules/shop/components/product-card/assets/css/product-card.css @@ -31,12 +31,12 @@ } -.main-food_products-card.acc{ +.main-food_products-card.--acc-{ background: #e7e7e7; } -.main-food_products-card.acc .main-food_products-cardbottom-btn, -.main-food_products-card.acc .main-food_products-card-slider .swiper-pagination-bullet.swiper-pagination-bullet-active{ +.main-food_products-card.--acc- .main-food_products-cardbottom-btn, +.main-food_products-card.--acc- .main-food_products-card-slider .swiper-pagination-bullet.swiper-pagination-bullet-active{ background: radial-gradient(278.91% 196.13% at 128.36% -48.29%, #ee6868 0%, #569ef0 57.69%); } .main-food_products-card-img { @@ -80,38 +80,40 @@ background: radial-gradient(278.91% 196.13% at 128.36% -48.29%, #ee6868 0%, #569 color: var(--accent-color); } -.food.lamb.main-food_products-card { +.--food-lamb.main-food_products-card { --accent-color: #863300; } -.food.turkey.main-food_products-card { +.--food-turkey.main-food_products-card { --accent-color: #CD0003; } -.food.beef.main-food_products-card{ +.--food-beef.main-food_products-card{ --accent-color: #7e0092; } -.food.fish.main-food_products-card{ +.--food-fish.main-food_products-card{ --accent-color: #48c1ed; } -.treats.lamb.main-food_products-card { + + +.--treats-lamb.main-food_products-card { --accent-color: #44006c; } -.treats.rabbit.main-food_products-card { +.--treats-rabbit.main-food_products-card { --accent-color: #601094; } -.treats.beef.main-food_products-card{ +.--treats-beef.main-food_products-card{ --accent-color: #004c31; } -.treats.salmon.main-food_products-card{ +.--treats-salmon.main-food_products-card{ --accent-color: #7c007a; } -.treats.duck.main-food_products-card{ +.--treats-duck.main-food_products-card{ --accent-color: #326e70; } diff --git a/wp-content/themes/cosmopet/modules/shop/components/single-product_new/assets/css/product-style.css b/wp-content/themes/cosmopet/modules/shop/components/single-product_new/assets/css/product-style.css index 7233607..f9466fd 100644 --- a/wp-content/themes/cosmopet/modules/shop/components/single-product_new/assets/css/product-style.css +++ b/wp-content/themes/cosmopet/modules/shop/components/single-product_new/assets/css/product-style.css @@ -51,10 +51,76 @@ background-color: var(--bg-color); } -.product_main.--fish{ +.product_main.--food-fish{ --bg-color: #C1DDE6; --accent-color: #48c1ed; } + +.product_main.--food-lamb{ + --bg-color: #E6D7C1; + --accent-color: #863300; +} + +.product_main.--food-turkey{ + --bg-color: #F3D7D2; + --accent-color: #CD0003; +} + +.product_main.--food-beef{ + --bg-color: #E6C1D7; + --accent-color: #7e0092; +} + +.product_main.--food-salmon{ + --bg-color: #F3D7C1; + --accent-color: #ff6b35; +} + +.product_main.--food-rabbit{ + --bg-color: #E6D7C1; + --accent-color: #8b4513; +} + +.product_main.--food-duck{ + --bg-color: #F3E6D7; + --accent-color: #d2691e; +} + +.product_main.--treats-lamb{ + --bg-color: #E6D7F3; + --accent-color: #44006c; +} + +.product_main.--treats-rabbit{ + --bg-color: #F3D7E6; + --accent-color: #601094; +} + +.product_main.--treats-beef{ + --bg-color: #D7F3E6; + --accent-color: #004c31; +} + +.product_main.--treats-salmon{ + --bg-color: #F3D7F3; + --accent-color: #7c007a; +} + +.product_main.--treats-duck{ + --bg-color: #D7F3F3; + --accent-color: #326e70; +} + +.product_main.--treats-fish{ + --bg-color: #D7E6F3; + --accent-color: #0066cc; +} + +.product_main.--treats-turkey{ + --bg-color: #F3E6D7; + --accent-color: #cc3300; +} + /* product info */ .product-info{ width: 364px; @@ -122,7 +188,9 @@ .product-values-item-val{ border: 1px solid #000; border-radius: 100px; - width: 40px; + min-width: 40px; + padding-left: 5px; + padding-right: 5px; height: 40px; flex-shrink: 0; display: flex; @@ -204,6 +272,7 @@ font-weight: 700; .product-constructor__block-item svg, .product-constructor__block-item path{ fill: rgba(18, 18, 18, 0.75); + fill-opacity: 1; } .product-constructor__block-item.active{ color: #fff; @@ -255,7 +324,7 @@ color: #fa0505; margin-top: 8px; } -.product-btn{ +.product-btn, .button{ border: 2px solid #fff; border-radius: 100px; padding: 12px 16px; @@ -271,6 +340,18 @@ margin-top: 8px; margin-top: 20px; background-color: var(--accent-color); } + +.button::before{ + display: none; +} + +.to-know{ + font-size: 24px; + text-transform: uppercase; + font-weight: 700; + margin-top: 20px; + text-decoration: underline; +} /* product price */ @@ -670,4 +751,8 @@ line-height: 143%; .product-similar{ margin-top: 60px; } +} + +.stock, .quantity{ + display: none; } \ No newline at end of file diff --git a/wp-content/themes/cosmopet/modules/shop/components/single-product_new/component-controller.php b/wp-content/themes/cosmopet/modules/shop/components/single-product_new/component-controller.php index 140f90e..9e903c1 100644 --- a/wp-content/themes/cosmopet/modules/shop/components/single-product_new/component-controller.php +++ b/wp-content/themes/cosmopet/modules/shop/components/single-product_new/component-controller.php @@ -1,29 +1,13 @@ 'p_reviews', - 'numberposts' => -1, -)); - - $product_id = get_the_ID(); - $product = wc_get_product($product_id); - $context['related_products'] = array(); - $related_products_ids = $product->get_upsell_ids(); - if ($related_products_ids) { - foreach ($related_products_ids as $related_id) { - $related_product = wc_get_product($related_id); - if ($related_product) { - $context['related_products'][] = $related_product; - } - } - } - -$context['reviews'] = $reviews; -Timber::render('shop/single-product_page.twig', $context); \ No newline at end of file +?> +wc_product = wc_get_product($this->ID); - } - - public function price() { - return $this->wc_product->get_price(); - } - - public function get_price_html() { - return $this->wc_product->get_price_html(); - } - - public function get_attr() { - return $this->wc_product->get_attribute('pa_compound'); - } -}; - -add_filter('timber/post/classmap', function ($classmap) { - $custom_classmap = [ - 'product' => WooProduct::class, - ]; - return array_merge($classmap, $custom_classmap); -}); diff --git a/wp-content/themes/cosmopet/templates/shop/single-product_page.twig b/wp-content/themes/cosmopet/templates/shop/single-product_page.twig deleted file mode 100644 index 58b82b0..0000000 --- a/wp-content/themes/cosmopet/templates/shop/single-product_page.twig +++ /dev/null @@ -1,289 +0,0 @@ -{% set bodyClass = 'bg-white' %} -{% set mainClass = '' %} -{% extends 'layout.twig' %} - -{% block content %} -
-
- - - -
-
-

- Сухой корм, - для средних - и крупных пород -

-
-

СОСТАВ

-
Животные белки 49% (Дегидрированная индейка 33%, белковый концентрат из Черной львинки 10%, печеночный гидролизат 5%, сухая плазма крови 1%), цельный рис, горошек, жир индейки, автолизат пивных дрожжей, витаминно-минеральный комплекс, лососевое масло (источник незаменимых Омега-3 жирных кислот), клетчатка гороха, таурин, комплекс пребиотиков (натуральные пребиотики FOS и MOS), экстракт граната, юкка Шидигера, экстракт розмарина (натуральный антиоксидант).
-
-
-

ПИЩЕВАЯ ЦЕННОСТЬ

-
-
-
Сырой белок
-
14%
-
-
-
Сырой жир
-
8%
-
-
-
Сырая клетчатка
-
26%
-
-
-
-
- Витамины на кг -
-
-
A, ME — 34000
-
D3, ME — 1600
-
-
-
-
- - {% set thumbnail = product.get_image_id() ? function('wp_get_attachment_image_url', product.get_image_id(), '') : function('wc_placeholder_img_src') %} - {% set images = product.get_gallery_image_ids() %} - -
- -

- Сухой корм, - для средних - и крупных пород -

-
-
- - -
-
ВОЗРАСТ СОБАКИ
- -
-
-
ВЕС УПАКОВКИ
- -
- - -
-
- 1 303 ₽ -
-
-
1 449 ₽
-
- - 10% -
-
-
- - -
-
- -
-
- ОПИСАНИЕ -
-
- Этот легкоусвояемый рацион содержит исключительно натуральные ингредиенты. Он обогащён белком, витаминами, минералами и антиоксидантами. Благодаря своей высокопитательной рецептуре, Cosmocat способствует здоровому росту и развитию котёнка -
-
-
- -
-
-
- Отзывы Специалистов -
-
- - -
-
-
-
- {% for slide in reviews %} - {% include "shop/reviews-slide_element.twig" with {slide: slide} %} - {% endfor %} -
-
- -
- - -
-
- - {% if related_products %} -
-
-
- вашему питомцу может понравиться -
-
- - -
- -
-
-
- {% for related_product in related_products %} - - {% set categories = related_product.get_category_ids() %} - {% set section = '' %} - {% for cat in categories %} - {% if cat == 365 %} - {% set section = 'food swiper-slide' %} - {% elseif cat == 367 %} - {% set section = 'treats swiper-slide' %} - {% endif %} - {% endfor %} - {% if section == '' %} - {% set section = 'acc swiper-slide' %} - {% endif %} - - {% include 'shop/product-card_element.twig' with {_product : fn('wc_get_product', related_product), section: section} %} - - - {% endfor %} -
-
-
- - -
-
- {% endif %} - -
- {% for slide in reviews %} - - {% include 'modal/rewiew_modal.twig' with {slide : slide} %} - - {% endfor %} -{% endblock %} \ No newline at end of file diff --git a/wp-content/themes/cosmopet/templates/404.twig b/wp-content/themes/cosmopet/views/404.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/404.twig rename to wp-content/themes/cosmopet/views/404.twig diff --git a/wp-content/themes/cosmopet/templates/_blocks/shop/archive-product-ajaxload.twig b/wp-content/themes/cosmopet/views/_blocks/shop/archive-product-ajaxload.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_blocks/shop/archive-product-ajaxload.twig rename to wp-content/themes/cosmopet/views/_blocks/shop/archive-product-ajaxload.twig diff --git a/wp-content/themes/cosmopet/templates/_blocks/shop/archive-product-tease.twig b/wp-content/themes/cosmopet/views/_blocks/shop/archive-product-tease.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_blocks/shop/archive-product-tease.twig rename to wp-content/themes/cosmopet/views/_blocks/shop/archive-product-tease.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/about.twig b/wp-content/themes/cosmopet/views/_pages/about.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/about.twig rename to wp-content/themes/cosmopet/views/_pages/about.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/front-page.twig b/wp-content/themes/cosmopet/views/_pages/front-page.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/front-page.twig rename to wp-content/themes/cosmopet/views/_pages/front-page.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page/main-about.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page/main-about.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page/main-about.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page/main-about.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page/main-bot.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page/main-bot.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page/main-bot.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page/main-bot.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page/main-cosmopetx.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page/main-cosmopetx.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page/main-cosmopetx.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page/main-cosmopetx.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page/main-food.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page/main-food.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page/main-food.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page/main-food.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page/main-gallery.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page/main-gallery.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page/main-gallery.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page/main-gallery.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page/main-ingredients.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page/main-ingredients.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page/main-ingredients.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page/main-ingredients.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page/main-media.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page/main-media.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page/main-media.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page/main-media.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page/main-quiz.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page/main-quiz.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page/main-quiz.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page/main-quiz.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page/main-reviews.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page/main-reviews.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page/main-reviews.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page/main-reviews.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page/main-slider.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page/main-slider.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page/main-slider.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page/main-slider.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page/main-specialists.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page/main-specialists.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page/main-specialists.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page/main-specialists.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page/main-treats.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page/main-treats.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page/main-treats.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page/main-treats.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/new-front-page/main-why.twig b/wp-content/themes/cosmopet/views/_pages/new-front-page/main-why.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/new-front-page/main-why.twig rename to wp-content/themes/cosmopet/views/_pages/new-front-page/main-why.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/policy.twig b/wp-content/themes/cosmopet/views/_pages/policy.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/policy.twig rename to wp-content/themes/cosmopet/views/_pages/policy.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/production.twig b/wp-content/themes/cosmopet/views/_pages/production.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/production.twig rename to wp-content/themes/cosmopet/views/_pages/production.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/shop/archive-product.twig b/wp-content/themes/cosmopet/views/_pages/shop/archive-product.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/shop/archive-product.twig rename to wp-content/themes/cosmopet/views/_pages/shop/archive-product.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/shop/product-single.twig b/wp-content/themes/cosmopet/views/_pages/shop/product-single.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/shop/product-single.twig rename to wp-content/themes/cosmopet/views/_pages/shop/product-single.twig diff --git a/wp-content/themes/cosmopet/templates/_pages/wtb.twig b/wp-content/themes/cosmopet/views/_pages/wtb.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/_pages/wtb.twig rename to wp-content/themes/cosmopet/views/_pages/wtb.twig diff --git a/wp-content/themes/cosmopet/templates/blog/author-banner.twig b/wp-content/themes/cosmopet/views/blog/author-banner.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/author-banner.twig rename to wp-content/themes/cosmopet/views/blog/author-banner.twig diff --git a/wp-content/themes/cosmopet/templates/blog/blog-archive.twig b/wp-content/themes/cosmopet/views/blog/blog-archive.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/blog-archive.twig rename to wp-content/themes/cosmopet/views/blog/blog-archive.twig diff --git a/wp-content/themes/cosmopet/templates/blog/blog-front-page-post-list_block.twig b/wp-content/themes/cosmopet/views/blog/blog-front-page-post-list_block.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/blog-front-page-post-list_block.twig rename to wp-content/themes/cosmopet/views/blog/blog-front-page-post-list_block.twig diff --git a/wp-content/themes/cosmopet/templates/blog/blog-front-page_block.twig b/wp-content/themes/cosmopet/views/blog/blog-front-page_block.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/blog-front-page_block.twig rename to wp-content/themes/cosmopet/views/blog/blog-front-page_block.twig diff --git a/wp-content/themes/cosmopet/templates/blog/blog-page.twig b/wp-content/themes/cosmopet/views/blog/blog-page.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/blog-page.twig rename to wp-content/themes/cosmopet/views/blog/blog-page.twig diff --git a/wp-content/themes/cosmopet/templates/blog/blog-single.twig b/wp-content/themes/cosmopet/views/blog/blog-single.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/blog-single.twig rename to wp-content/themes/cosmopet/views/blog/blog-single.twig diff --git a/wp-content/themes/cosmopet/templates/blog/category-list.twig b/wp-content/themes/cosmopet/views/blog/category-list.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/category-list.twig rename to wp-content/themes/cosmopet/views/blog/category-list.twig diff --git a/wp-content/themes/cosmopet/templates/blog/comments/comment-single.twig b/wp-content/themes/cosmopet/views/blog/comments/comment-single.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/comments/comment-single.twig rename to wp-content/themes/cosmopet/views/blog/comments/comment-single.twig diff --git a/wp-content/themes/cosmopet/templates/blog/comments/comments.twig b/wp-content/themes/cosmopet/views/blog/comments/comments.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/comments/comments.twig rename to wp-content/themes/cosmopet/views/blog/comments/comments.twig diff --git a/wp-content/themes/cosmopet/templates/blog/editorial.twig b/wp-content/themes/cosmopet/views/blog/editorial.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/editorial.twig rename to wp-content/themes/cosmopet/views/blog/editorial.twig diff --git a/wp-content/themes/cosmopet/templates/blog/featured-slider.twig b/wp-content/themes/cosmopet/views/blog/featured-slider.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/featured-slider.twig rename to wp-content/themes/cosmopet/views/blog/featured-slider.twig diff --git a/wp-content/themes/cosmopet/templates/blog/most-read.twig b/wp-content/themes/cosmopet/views/blog/most-read.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/most-read.twig rename to wp-content/themes/cosmopet/views/blog/most-read.twig diff --git a/wp-content/themes/cosmopet/templates/blog/news-list.twig b/wp-content/themes/cosmopet/views/blog/news-list.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/news-list.twig rename to wp-content/themes/cosmopet/views/blog/news-list.twig diff --git a/wp-content/themes/cosmopet/templates/blog/themes.twig b/wp-content/themes/cosmopet/views/blog/themes.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog/themes.twig rename to wp-content/themes/cosmopet/views/blog/themes.twig diff --git a/wp-content/themes/cosmopet/templates/blog_author/author-archive.twig b/wp-content/themes/cosmopet/views/blog_author/author-archive.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog_author/author-archive.twig rename to wp-content/themes/cosmopet/views/blog_author/author-archive.twig diff --git a/wp-content/themes/cosmopet/templates/blog_author/author-posts-list.twig b/wp-content/themes/cosmopet/views/blog_author/author-posts-list.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog_author/author-posts-list.twig rename to wp-content/themes/cosmopet/views/blog_author/author-posts-list.twig diff --git a/wp-content/themes/cosmopet/templates/blog_author/author-single.twig b/wp-content/themes/cosmopet/views/blog_author/author-single.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/blog_author/author-single.twig rename to wp-content/themes/cosmopet/views/blog_author/author-single.twig diff --git a/wp-content/themes/cosmopet/templates/comment/comment.twig b/wp-content/themes/cosmopet/views/comment/comment.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/comment/comment.twig rename to wp-content/themes/cosmopet/views/comment/comment.twig diff --git a/wp-content/themes/cosmopet/templates/footer.twig b/wp-content/themes/cosmopet/views/footer.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/footer.twig rename to wp-content/themes/cosmopet/views/footer.twig diff --git a/wp-content/themes/cosmopet/templates/form-coupon.twig b/wp-content/themes/cosmopet/views/form-coupon.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/form-coupon.twig rename to wp-content/themes/cosmopet/views/form-coupon.twig diff --git a/wp-content/themes/cosmopet/templates/forms/author-form.twig b/wp-content/themes/cosmopet/views/forms/author-form.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/forms/author-form.twig rename to wp-content/themes/cosmopet/views/forms/author-form.twig diff --git a/wp-content/themes/cosmopet/templates/forms/discount.twig b/wp-content/themes/cosmopet/views/forms/discount.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/forms/discount.twig rename to wp-content/themes/cosmopet/views/forms/discount.twig diff --git a/wp-content/themes/cosmopet/templates/forms/footer-form.twig b/wp-content/themes/cosmopet/views/forms/footer-form.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/forms/footer-form.twig rename to wp-content/themes/cosmopet/views/forms/footer-form.twig diff --git a/wp-content/themes/cosmopet/templates/forms/form-thx.twig b/wp-content/themes/cosmopet/views/forms/form-thx.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/forms/form-thx.twig rename to wp-content/themes/cosmopet/views/forms/form-thx.twig diff --git a/wp-content/themes/cosmopet/templates/forms/parthners-form.twig b/wp-content/themes/cosmopet/views/forms/parthners-form.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/forms/parthners-form.twig rename to wp-content/themes/cosmopet/views/forms/parthners-form.twig diff --git a/wp-content/themes/cosmopet/templates/head-pixel-functions.twig b/wp-content/themes/cosmopet/views/head-pixel-functions.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/head-pixel-functions.twig rename to wp-content/themes/cosmopet/views/head-pixel-functions.twig diff --git a/wp-content/themes/cosmopet/templates/header.twig b/wp-content/themes/cosmopet/views/header.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/header.twig rename to wp-content/themes/cosmopet/views/header.twig diff --git a/wp-content/themes/cosmopet/templates/layout.twig b/wp-content/themes/cosmopet/views/layout.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/layout.twig rename to wp-content/themes/cosmopet/views/layout.twig diff --git a/wp-content/themes/cosmopet/templates/menu/main-menu.twig b/wp-content/themes/cosmopet/views/menu/main-menu.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/menu/main-menu.twig rename to wp-content/themes/cosmopet/views/menu/main-menu.twig diff --git a/wp-content/themes/cosmopet/templates/menu/mobile-menu.twig b/wp-content/themes/cosmopet/views/menu/mobile-menu.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/menu/mobile-menu.twig rename to wp-content/themes/cosmopet/views/menu/mobile-menu.twig diff --git a/wp-content/themes/cosmopet/templates/menu/product-menu.twig b/wp-content/themes/cosmopet/views/menu/product-menu.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/menu/product-menu.twig rename to wp-content/themes/cosmopet/views/menu/product-menu.twig diff --git a/wp-content/themes/cosmopet/templates/modal.twig b/wp-content/themes/cosmopet/views/modal.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/modal.twig rename to wp-content/themes/cosmopet/views/modal.twig diff --git a/wp-content/themes/cosmopet/templates/modal/basket.twig b/wp-content/themes/cosmopet/views/modal/basket.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/modal/basket.twig rename to wp-content/themes/cosmopet/views/modal/basket.twig diff --git a/wp-content/themes/cosmopet/templates/modal/login.twig b/wp-content/themes/cosmopet/views/modal/login.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/modal/login.twig rename to wp-content/themes/cosmopet/views/modal/login.twig diff --git a/wp-content/themes/cosmopet/templates/modal/rewiew_modal.twig b/wp-content/themes/cosmopet/views/modal/rewiew_modal.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/modal/rewiew_modal.twig rename to wp-content/themes/cosmopet/views/modal/rewiew_modal.twig diff --git a/wp-content/themes/cosmopet/templates/modal/to_know.twig b/wp-content/themes/cosmopet/views/modal/to_know.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/modal/to_know.twig rename to wp-content/themes/cosmopet/views/modal/to_know.twig diff --git a/wp-content/themes/cosmopet/templates/page.twig b/wp-content/themes/cosmopet/views/page.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/page.twig rename to wp-content/themes/cosmopet/views/page.twig diff --git a/wp-content/themes/cosmopet/templates/profile/order-list.twig b/wp-content/themes/cosmopet/views/profile/order-list.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/profile/order-list.twig rename to wp-content/themes/cosmopet/views/profile/order-list.twig diff --git a/wp-content/themes/cosmopet/templates/profile/pet-card.twig b/wp-content/themes/cosmopet/views/profile/pet-card.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/profile/pet-card.twig rename to wp-content/themes/cosmopet/views/profile/pet-card.twig diff --git a/wp-content/themes/cosmopet/templates/profile/pet-edit-card.twig b/wp-content/themes/cosmopet/views/profile/pet-edit-card.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/profile/pet-edit-card.twig rename to wp-content/themes/cosmopet/views/profile/pet-edit-card.twig diff --git a/wp-content/themes/cosmopet/templates/profile/profile-base.twig b/wp-content/themes/cosmopet/views/profile/profile-base.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/profile/profile-base.twig rename to wp-content/themes/cosmopet/views/profile/profile-base.twig diff --git a/wp-content/themes/cosmopet/templates/profile/profile-modals.twig b/wp-content/themes/cosmopet/views/profile/profile-modals.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/profile/profile-modals.twig rename to wp-content/themes/cosmopet/views/profile/profile-modals.twig diff --git a/wp-content/themes/cosmopet/templates/profile/profile-orders.twig b/wp-content/themes/cosmopet/views/profile/profile-orders.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/profile/profile-orders.twig rename to wp-content/themes/cosmopet/views/profile/profile-orders.twig diff --git a/wp-content/themes/cosmopet/templates/profile/profile-subs-single.twig b/wp-content/themes/cosmopet/views/profile/profile-subs-single.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/profile/profile-subs-single.twig rename to wp-content/themes/cosmopet/views/profile/profile-subs-single.twig diff --git a/wp-content/themes/cosmopet/templates/profile/profile-subs.twig b/wp-content/themes/cosmopet/views/profile/profile-subs.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/profile/profile-subs.twig rename to wp-content/themes/cosmopet/views/profile/profile-subs.twig diff --git a/wp-content/themes/cosmopet/templates/profile/profile.twig b/wp-content/themes/cosmopet/views/profile/profile.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/profile/profile.twig rename to wp-content/themes/cosmopet/views/profile/profile.twig diff --git a/wp-content/themes/cosmopet/templates/shop/bestsellers.twig b/wp-content/themes/cosmopet/views/shop/bestsellers.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/shop/bestsellers.twig rename to wp-content/themes/cosmopet/views/shop/bestsellers.twig diff --git a/wp-content/themes/cosmopet/templates/shop/cart-bottom.twig b/wp-content/themes/cosmopet/views/shop/cart-bottom.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/shop/cart-bottom.twig rename to wp-content/themes/cosmopet/views/shop/cart-bottom.twig diff --git a/wp-content/themes/cosmopet/templates/shop/cart-contents.twig b/wp-content/themes/cosmopet/views/shop/cart-contents.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/shop/cart-contents.twig rename to wp-content/themes/cosmopet/views/shop/cart-contents.twig diff --git a/wp-content/themes/cosmopet/templates/shop/checkout.twig b/wp-content/themes/cosmopet/views/shop/checkout.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/shop/checkout.twig rename to wp-content/themes/cosmopet/views/shop/checkout.twig diff --git a/wp-content/themes/cosmopet/templates/shop/product-card_element.twig b/wp-content/themes/cosmopet/views/shop/product-card.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/shop/product-card_element.twig rename to wp-content/themes/cosmopet/views/shop/product-card.twig diff --git a/wp-content/themes/cosmopet/templates/shop/product-subscription-options-prompt-radio-block.twig b/wp-content/themes/cosmopet/views/shop/product-subscription-options-prompt-radio-block.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/shop/product-subscription-options-prompt-radio-block.twig rename to wp-content/themes/cosmopet/views/shop/product-subscription-options-prompt-radio-block.twig diff --git a/wp-content/themes/cosmopet/templates/shop/products-section_block.twig b/wp-content/themes/cosmopet/views/shop/products-section_block.twig similarity index 73% rename from wp-content/themes/cosmopet/templates/shop/products-section_block.twig rename to wp-content/themes/cosmopet/views/shop/products-section_block.twig index 3529f30..085f4bf 100644 --- a/wp-content/themes/cosmopet/templates/shop/products-section_block.twig +++ b/wp-content/themes/cosmopet/views/shop/products-section_block.twig @@ -1,6 +1,6 @@
{% for product in product_list %} - {% include 'shop/product-card_element.twig' with {_product : fn('wc_get_product', product.product)} %} + {% include 'shop/product-card.twig' with {_product : fn('wc_get_product', product.product)} %} {% endfor %} {% if section == 'food' %} Вся продукция diff --git a/wp-content/themes/cosmopet/templates/shop/review-order.twig b/wp-content/themes/cosmopet/views/shop/review-order.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/shop/review-order.twig rename to wp-content/themes/cosmopet/views/shop/review-order.twig diff --git a/wp-content/themes/cosmopet/templates/shop/reviews-section_block.twig b/wp-content/themes/cosmopet/views/shop/reviews-section_block.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/shop/reviews-section_block.twig rename to wp-content/themes/cosmopet/views/shop/reviews-section_block.twig diff --git a/wp-content/themes/cosmopet/templates/shop/reviews-slide_element.twig b/wp-content/themes/cosmopet/views/shop/reviews-slide_element.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/shop/reviews-slide_element.twig rename to wp-content/themes/cosmopet/views/shop/reviews-slide_element.twig diff --git a/wp-content/themes/cosmopet/templates/shop/shop.twig b/wp-content/themes/cosmopet/views/shop/shop.twig similarity index 100% rename from wp-content/themes/cosmopet/templates/shop/shop.twig rename to wp-content/themes/cosmopet/views/shop/shop.twig diff --git a/wp-content/themes/cosmopet/views/shop/single-product.twig b/wp-content/themes/cosmopet/views/shop/single-product.twig new file mode 100644 index 0000000..c47eab8 --- /dev/null +++ b/wp-content/themes/cosmopet/views/shop/single-product.twig @@ -0,0 +1,321 @@ +{% set bodyClass = 'bg-white' %} +{% set mainClass = '' %} +{% extends 'layout.twig' %} + +{% block content %} +
+
+ +
+
+

+ {{post.title}} +

+
+

{{ fn('pll_e', 'СОСТАВ') }}

+
{{ post.getComposition }}
+
+
+

{{ fn('pll_e', 'ПИЩЕВАЯ ЦЕННОСТЬ') }}

+
+ + {% set nutritional_value = post.nutritional_value %} + {% if nutritional_value.protein %} +
+
{{ fn('pll_e', 'Сырой белок') }}
+
{{nutritional_value.protein}}
+
+ {% endif %} + {% if nutritional_value.fat %} +
+
{{ fn('pll_e', 'Сырой жир') }}
+
{{nutritional_value.fat}}
+
+ {% endif %} + {% if nutritional_value.fiber %} +
+
{{ fn('pll_e', 'Сырая клетчатка') }}
+
{{nutritional_value.fiber}}
+
+ {% endif %} + {% if nutritional_value.ash %} +
+
{{ fn('pll_e', 'Сырая зола') }}
+
{{nutritional_value.ash}}
+
+ {% endif %} + {% if nutritional_value.wat %} +
+
{{ fn('pll_e', 'Влажность') }}
+
{{nutritional_value.wat}}
+
+ {% endif %} + {% if nutritional_value.calcium %} +
+
{{ fn('pll_e', 'Кальций') }}
+
{{nutritional_value.calcium}}
+
+ {% endif %} + {% if nutritional_value.phosphorus %} +
+
{{ fn('pll_e', 'Фосфор') }}
+
{{nutritional_value.phosphorus}}
+
+ {% endif %} + {% if nutritional_value.omega_6 %} +
+
{{ fn('pll_e', 'Омега 6') }}
+
{{nutritional_value.omega_6}}
+
+ {% endif %} + {% if nutritional_value.omega_3 %} +
+
{{ fn('pll_e', 'Омега 3') }}
+
{{nutritional_value.omega_3}}
+
+ {% endif %} +
+ {% set vitamins = post.vitamins %} + {% if vitamins %} +
+
+ {{ fn('pll_e', 'Витамины на кг') }} +
+
+ + {% if vitamins.vitamin_a_me %} +
A, ME — {{vitamins.vitamin_a_me}}
+ {% endif %} + {% if vitamins.vitamin_d3_me %} +
D3, ME — {{vitamins.vitamin_d3_me}}
+ {% endif %} + {% if vitamins.vitamin_e %} +
E — {{vitamins.vitamin_e}}
+ {% endif %} + {% if vitamins.tiamin %} +
{{ fn('pll_e', 'Тиамин') }} — {{vitamins.tiamin}}
+ {% endif %} + {% if vitamins.riboflavin %} +
{{ fn('pll_e', 'Рибофлавин') }} — {{vitamins.riboflavin}}
+ {% endif %} + {% if vitamins.pantothenic_acid %} +
{{ fn('pll_e', 'Пантотеновая кислота') }} — {{vitamins.pantothenic_acid}}
+ {% endif %} + {% if vitamins.niaczin %} +
{{ fn('pll_e', 'Ниацин') }} — {{vitamins.niaczin}}
+ {% endif %} + {% if vitamins.piridoksin %} +
{{ fn('pll_e', 'Пиридоксин') }} — {{vitamins.piridoksin}}
+ {% endif %} + {% if vitamins.folic_acid %} +
{{ fn('pll_e', 'Фолиевая кислота') }} — {{vitamins.folic_acid}}
+ {% endif %} + {% if vitamins.vitamin_b12 %} +
{{ fn('pll_e', 'Витамин B12') }} — {{vitamins.vitamin_b12}}
+ {% endif %} + {% if vitamins.holin %} +
{{ fn('pll_e', 'Холин') }} — {{vitamins.holin}}
+ {% endif %} +
+
+ {% endif %} +
+
+
+ +

+ {{post.title}} +

+
+
+ {% set constructor = post.getProductConstructor %} + {% for taxonomy, attribute_data in constructor %} + + {% endfor %} + + {% set size_siblings = post.getSizeSiblings %} + {% if size_siblings %} +
+
{{fn('pll_e', 'ВЕС УПАКОВКИ')}}
+
+ {% for sibling in size_siblings %} + +
{{sibling.get_weight}}
+
+ {% endfor %} +
+
+ {% endif %} + +
+
+ {{post.getPrice}} +
+ {% if post.getRegularPrice %} +
+
{{post.getRegularPrice}}
+
+ {{ post.getPriceDifferenceInPercent }} +
+
+ {% endif %} +
+ {% set in_stock = post.meta('_stock_status') == 'instock' %} + {% if in_stock %} + {{ function('do_action', 'woocommerce_' ~ product.get_type() ~ '_add_to_cart') }} + {% else %} +
+ +
+ {% endif %} +
+
+ +
+
+ {{ fn('pll_e', 'ОПИСАНИЕ') }} +
+
+ {{post.content}} + +
+
+
+ +
+
+
+ {{ fn('pll_e', 'Отзывы Специалистов') }} +
+
+ + +
+
+
+
+ {% for slide in post.getReviews %} + {% include "shop/reviews-slide_element.twig" with {slide: slide} %} + {% endfor %} +
+
+ +
+ + +
+
+ + {% if post.getRelatedProducts %} +
+
+
+ {{ fn('pll_e', 'вашему питомцу может понравиться') }} +
+
+ + +
+ +
+
+
+ {% for related_product in post.getRelatedProducts %} + + {% set class = related_product.getTasteClass %} + {% set section = class ~ ' swiper-slide' %} + + + {% include 'shop/product-card.twig' with {_product : fn('wc_get_product', related_product.id), section: section} %} + + + {% endfor %} +
+
+
+ + +
+
+ {% endif %} + +
+ {% for slide in reviews %} + + {% include 'modal/rewiew_modal.twig' with {slide : slide} %} + + {% endfor %} +{% endblock %} \ No newline at end of file