350 lines
14 KiB
PHP
350 lines
14 KiB
PHP
<?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>
|