Files
web_work/product_modern.php
2025-12-16 01:28:06 +03:00

350 lines
14 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
// product_modern.php - Страница товара "Диван MODERN"
session_start();
require_once 'config/database.php';
// Проверка авторизации
if (!isset($_SESSION['isLoggedIn']) || $_SESSION['isLoggedIn'] !== true) {
header('Location: вход.php?error=auth_required&redirect=' . urlencode($_SERVER['REQUEST_URI']));
exit();
}
$db = Database::getInstance()->getConnection();
// Получаем информацию о товаре "Диван MODERN" (ID 2 из базы данных)
try {
$productStmt = $db->prepare("
SELECT p.*, c.name as category_name
FROM products p
LEFT JOIN categories c ON p.category_id = c.category_id
WHERE p.product_id = 2 AND p.is_available = TRUE
");
$productStmt->execute();
$product = $productStmt->fetch();
if (!$product) {
header('Location: catalog.php?error=product_not_found');
exit();
}
// Получаем похожие товары
$similarStmt = $db->prepare("
SELECT * FROM products
WHERE category_id = ? AND product_id != ? AND is_available = TRUE
ORDER BY RANDOM()
LIMIT 3
");
$similarStmt->execute([$product['category_id'], $product['product_id']]);
$similarProducts = $similarStmt->fetchAll();
} catch (PDOException $e) {
die("Ошибка базы данных: " . $e->getMessage());
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AETERNA - <?= htmlspecialchars($product['name']) ?></title>
<link rel="stylesheet/less" type="text/css" href="style_for_cite.less">
<script src="https://cdn.jsdelivr.net/npm/less"></script>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
<style>
.product-attributes {
background: #f8f9fa;
padding: 20px;
border-radius: 8px;
margin: 20px 0;
}
.attribute-row {
display: flex;
justify-content: space-between;
padding: 10px 0;
border-bottom: 1px solid #ddd;
}
.attribute-label {
font-weight: bold;
color: #453227;
}
.attribute-value {
color: #617365;
}
.stock-status {
font-weight: bold;
padding: 5px 10px;
border-radius: 4px;
display: inline-block;
}
.in-stock {
background: #d4edda;
color: #155724;
}
.low-stock {
background: #fff3cd;
color: #856404;
}
.out-of-stock {
background: #f8d7da;
color: #721c24;
}
.product-gallery {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
.main-image {
grid-column: 1 / -1;
}
.product-gallery img {
width: 100%;
height: auto;
border-radius: 8px;
cursor: pointer;
}
.thumbnail {
opacity: 0.7;
transition: opacity 0.3s ease;
}
.thumbnail:hover, .thumbnail.active {
opacity: 1;
border: 2px solid #453227;
}
</style>
</head>
<body>
<?php include 'header_common.php'; ?>
<main class="container">
<div class="breadcrumbs">
<a href="cite_mebel.php">Главная</a> •
<a href="catalog.php">Каталог</a> •
<a href="catalog.php?category=<?= $product['category_id'] ?>"><?= htmlspecialchars($product['category_name']) ?></a> •
<span><?= htmlspecialchars($product['name']) ?></span>
</div>
<div class="product__section">
<div class="product__gallery">
<div class="main-image">
<img src="img/диван_modern_main.jpg" alt="Диван MODERN" id="mainImage" class="product__image">
</div>
<div class="thumbnail" onclick="changeImage('img/диван_modern_main.jpg')">
<img src="img/диван_modern_main.jpg" alt="Диван MODERN - вид 1">
</div>
<div class="thumbnail" onclick="changeImage('img/диван_modern_side.jpg')">
<img src="img/диван_modern_side.jpg" alt="Диван MODERN - вид 2">
</div>
<div class="thumbnail" onclick="changeImage('img/диван_modern_detail.jpg')">
<img src="img/диван_modern_detail.jpg" alt="Диван MODERN - детали">
</div>
<div class="thumbnail" onclick="changeImage('img/диван_modern_inroom.jpg')">
<img src="img/диван_modern_inroom.jpg" alt="Диван MODERN в интерьере">
</div>
</div>
<div class="product__info">
<h1 class="product__title">Диван MODERN</h1>
<div class="product__rating">
<div class="stars">
<span class="star filled">★</span>
<span class="star filled">★</span>
<span class="star filled">★</span>
<span class="star filled">★</span>
<span class="star half">★</span>
</div>
<span class="rating-value">4.5</span>
<span class="reviews-count">(24 отзыва)</span>
</div>
<div class="product__price">
<span class="current-price">
<?= number_format($product['price'], 0, '', ' ') ?> ₽
</span>
<?php if ($product['old_price'] && $product['old_price'] > $product['price']): ?>
<span class="old-price">
<?= number_format($product['old_price'], 0, '', ' ') ?> ₽
</span>
<span class="discount-badge">
-<?= round(($product['old_price'] - $product['price']) / $product['old_price'] * 100) ?>%
</span>
<?php endif; ?>
</div>
<div class="product-attributes">
<div class="attribute-row">
<span class="attribute-label">Артикул:</span>
<span class="attribute-value"><?= $product['sku'] ?? 'DIV-MOD-001' ?></span>
</div>
<div class="attribute-row">
<span class="attribute-label">Категория:</span>
<span class="attribute-value">Диваны</span>
</div>
<div class="attribute-row">
<span class="attribute-label">Цвет:</span>
<span class="attribute-value">Серый, Бежевый, Темно-синий</span>
</div>
<div class="attribute-row">
<span class="attribute-label">Материал:</span>
<span class="attribute-value">Экокожа, Дерево</span>
</div>
<div class="attribute-row">
<span class="attribute-label">Размеры (Ш×Г×В):</span>
<span class="attribute-value">220 × 95 × 85 см</span>
</div>
</div>
<div class="stock-status <?= $product['stock_quantity'] > 0 ? 'in-stock' : 'out-of-stock' ?>">
<?php if ($product['stock_quantity'] > 0): ?>
<i class="fas fa-check-circle"></i> В наличии: <?= $product['stock_quantity'] ?> шт.
<?php else: ?>
<i class="fas fa-times-circle"></i> Нет в наличии
<?php endif; ?>
</div>
<p class="product__description">
Угловой диван MODERN сочетание современного дизайна и бескомпромиссного комфорта.
Каркас из массива дерева обеспечивает долговечность, а наполнитель из высокоэластичного
пенополиуретана гарантирует оптимальную поддержку спины. Диван оснащен механизмом
трансформации «еврокнижка», что позволяет использовать его как спальное место.
<br><br>
Особенности:
• Прочная конструкция из массива дерева
• Механизм трансформации «еврокнижка»
• Наполнитель: пенополиуретан + периотек
• Съемные чехлы для легкой чистки
• Встроенные подлокотники с полками
</p>
<?php if ($product['stock_quantity'] > 0): ?>
<div class="product__purchase">
<div class="product__quantity">
<button class="product__qty-btn minus">-</button>
<input type="number" class="product__qty-value" value="1" min="1" max="<?= $product['stock_quantity'] ?>">
<button class="product__qty-btn plus">+</button>
</div>
<div class="product__actions">
<button class="btn primary-btn" onclick="addToCart(<?= $product['product_id'] ?>)">
<i class="fas fa-shopping-cart"></i> В корзину
</button>
<button class="btn secondary-btn" onclick="buyNow(<?= $product['product_id'] ?>)">
<i class="fas fa-bolt"></i> Купить сейчас
</button>
</div>
</div>
<?php else: ?>
<div class="product__actions">
<button class="btn secondary-btn" onclick="notifyWhenAvailable(<?= $product['product_id'] ?>)">
<i class="fas fa-bell"></i> Уведомить о поступлении
</button>
</div>
<?php endif; ?>
</div>
</div>
<?php if (!empty($similarProducts)): ?>
<section class="similar">
<h2 class="similar__title">Похожие товары</h2>
<div class="similar__grid">
<?php foreach ($similarProducts as $similar): ?>
<div class="similar__card">
<div class="similar__card-image">
<img src="<?= htmlspecialchars($similar['image_url'] ?? 'img1/default.jpg') ?>"
alt="<?= htmlspecialchars($similar['name']) ?>">
</div>
<div class="similar__card-content">
<h3><?= htmlspecialchars($similar['name']) ?></h3>
<p class="similar__card-description">
<?= htmlspecialchars(mb_substr($similar['description'] ?? '', 0, 80)) ?>...
</p>
<p class="similar__card-price">
<?= number_format($similar['price'], 0, '', ' ') ?> ₽
</p>
<a href="product_detail.php?id=<?= $similar['product_id'] ?>"
class="btn btn-primary">
Подробнее
</a>
</div>
</div>
<?php endforeach; ?>
</div>
</section>
<?php endif; ?>
</main>
<?php include 'footer.php'; ?>
<script>
function changeImage(src) {
$('#mainImage').attr('src', src);
$('.thumbnail').removeClass('active');
$(event.target).closest('.thumbnail').addClass('active');
}
function addToCart(productId) {
const quantity = $('.product__qty-value').val();
$.ajax({
url: 'add_to_cart.php',
method: 'POST',
data: {
product_id: productId,
quantity: quantity
},
success: function(response) {
try {
const result = JSON.parse(response);
if (result.success) {
alert('Товар добавлен в корзину!');
// Обновляем счетчик в шапке
$('.cart-count').text(result.cart_count);
} else {
alert('Ошибка: ' + result.message);
}
} catch(e) {
alert('Товар добавлен в корзину!');
}
}
});
}
function buyNow(productId) {
const quantity = $('.product__qty-value').val();
$.ajax({
url: 'add_to_cart.php',
method: 'POST',
data: {
product_id: productId,
quantity: quantity
},
success: function() {
window.location.href = 'оформлениеаказа.php';
}
});
}
$(document).ready(function() {
// Управление количеством
$('.product__qty-btn.plus').click(function() {
const $input = $('.product__qty-value');
let value = parseInt($input.val());
let max = parseInt($input.attr('max'));
if (value < max) {
$input.val(value + 1);
}
});
$('.product__qty-btn.minus').click(function() {
const $input = $('.product__qty-value');
let value = parseInt($input.val());
if (value > 1) {
$input.val(value - 1);
}
});
});
</script>
</body>
</html>