getConnection(); // ОБРАБОТКА POST ЗАПРОСОВ ДЛЯ КАТЕГОРИЙ if ($_SERVER['REQUEST_METHOD'] === 'POST' && $is_admin) { $form_action = $_POST['action'] ?? ''; if ($form_action === 'add_category' || $form_action === 'edit_category') { $name = trim($_POST['name'] ?? ''); $parent_id = !empty($_POST['parent_id']) ? (int)$_POST['parent_id'] : null; $description = trim($_POST['description'] ?? ''); $sort_order = (int)($_POST['sort_order'] ?? 0); $is_active = isset($_POST['is_active']) ? 1 : 0; $category_id_post = (int)($_POST['category_id'] ?? 0); // Валидация if (empty($name)) { $_SESSION['error'] = 'Название категории обязательно'; header('Location: catalog_admin.php?action=' . $form_action . ($category_id_post ? '&id=' . $category_id_post : '')); exit(); } // Создаем slug $slug = strtolower(preg_replace('/[^a-z0-9]+/i', '-', $name)); $slug = preg_replace('/^-+|-+$/', '', $slug); // Убираем дефисы по краям if ($form_action === 'add_category') { // Проверяем существование slug $check = $db->prepare("SELECT COUNT(*) FROM categories WHERE slug = ?"); $check->execute([$slug]); if ($check->fetchColumn() > 0) { $slug = $slug . '-' . time(); // Добавляем timestamp для уникальности } $sql = "INSERT INTO categories (name, slug, parent_id, description, sort_order, is_active) VALUES (?, ?, ?, ?, ?, ?)"; $stmt = $db->prepare($sql); $stmt->execute([$name, $slug, $parent_id, $description, $sort_order, $is_active]); $_SESSION['message'] = 'Категория успешно добавлена'; header('Location: catalog_admin.php?action=categories'); exit(); } elseif ($form_action === 'edit_category' && $category_id_post > 0) { // Проверяем существование slug для других категорий $check = $db->prepare("SELECT COUNT(*) FROM categories WHERE slug = ? AND category_id != ?"); $check->execute([$slug, $category_id_post]); if ($check->fetchColumn() > 0) { $slug = $slug . '-' . $category_id_post; } $sql = "UPDATE categories SET name = ?, slug = ?, parent_id = ?, description = ?, sort_order = ?, is_active = ?, updated_at = CURRENT_TIMESTAMP WHERE category_id = ?"; $stmt = $db->prepare($sql); $stmt->execute([$name, $slug, $parent_id, $description, $sort_order, $is_active, $category_id_post]); $_SESSION['message'] = 'Категория успешно обновлена'; header('Location: catalog_admin.php?action=categories'); exit(); } } // Удаление категории if ($form_action === 'delete_category') { $category_id_del = (int)($_POST['category_id'] ?? 0); if ($category_id_del > 0) { // Проверяем наличие активных товаров $check_products = $db->prepare(" SELECT COUNT(*) as product_count FROM products WHERE category_id = ? AND is_available = TRUE "); $check_products->execute([$category_id_del]); $active_products = $check_products->fetchColumn(); if ($active_products > 0) { $_SESSION['error'] = 'Невозможно удалить категорию с активными товарами'; header('Location: catalog_admin.php?action=categories'); exit(); } // Проверяем дочерние категории $check_children = $db->prepare(" SELECT COUNT(*) as child_count FROM categories WHERE parent_id = ? AND is_active = TRUE "); $check_children->execute([$category_id_del]); $active_children = $check_children->fetchColumn(); if ($active_children > 0) { $_SESSION['error'] = 'Невозможно удалить категорию с активными дочерними категориями'; header('Location: catalog_admin.php?action=categories'); exit(); } // Удаляем категорию $stmt = $db->prepare("DELETE FROM categories WHERE category_id = ?"); $stmt->execute([$category_id_del]); $_SESSION['message'] = 'Категория успешно удалена'; header('Location: catalog_admin.php?action=categories'); exit(); } } } // Получаем категории для отображения $categories_stmt = $db->query(" SELECT c1.*, c2.name as parent_name, (SELECT COUNT(*) FROM products WHERE category_id = c1.category_id) as product_count FROM categories c1 LEFT JOIN categories c2 ON c1.parent_id = c2.category_id ORDER BY c1.sort_order, c1.name "); $categories = $categories_stmt->fetchAll(); // Для редактирования категории if ($action === 'edit_category' && $product_id > 0) { $cat_stmt = $db->prepare("SELECT * FROM categories WHERE category_id = ?"); $cat_stmt->execute([$product_id]); $current_category = $cat_stmt->fetch(); if (!$current_category) { $_SESSION['error'] = 'Категория не найдена'; header('Location: catalog_admin.php?action=categories'); exit(); } } // Получаем товары $sql = "SELECT p.*, c.name as category_name FROM products p LEFT JOIN categories c ON p.category_id = c.category_id WHERE p.is_available = TRUE"; $params = []; if ($category_id && is_numeric($category_id)) { $sql .= " AND p.category_id = ?"; $params[] = $category_id; } $sql .= " ORDER BY p.product_id DESC"; if ($params) { $stmt = $db->prepare($sql); $stmt->execute($params); } else { $stmt = $db->query($sql); } $products = $stmt->fetchAll(); // Сообщения из сессии $message = $_SESSION['message'] ?? ''; $error = $_SESSION['error'] ?? ''; // Очищаем сообщения после использования unset($_SESSION['message']); unset($_SESSION['error']); } catch (PDOException $e) { $error = "Ошибка подключения к базе данных: " . $e->getMessage(); } ?> AETERNA - Каталог
Все категории
0

Отмена

Управление категориями

Добавить категорию
ID Название Родительская Товаров Порядок Статус Действия

товаров Активна Неактивна
<?= htmlspecialchars($product['name']) ?> $product['price']): ?> -%
...
$product['price']): ?>
В наличии: шт.