// Начинаем сессию session_start(); // Подключаем файл с настройками базы данных require_once 'config.php'; // После session_start() и require_once 'config.php' добавьте: // Получаем информацию о пользователе, если он авторизован if (isset($_SESSION['user_id'])) { $stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?'); $stmt->execute([$_SESSION['user_id']]); $user = $stmt->fetch(); } // Получаем ID категории из URL $category_id = isset($_GET['id']) ? (int)$_GET['id'] : 0; // Если ID не указан или некорректен, перенаправляем на главную if ($category_id <= 0) { header('Location: index.php'); exit(); } // Получаем информацию о категории $stmt = $pdo->prepare('SELECT * FROM categories WHERE id = ?'); $stmt->execute([$category_id]); $category = $stmt->fetch(); // Если категория не найдена, перенаправляем на главную if (!$category) { header('Location: index.php'); exit(); } // Получаем все серверы для фильтра $stmt = $pdo->query('SELECT * FROM servers ORDER BY name ASC'); $servers = $stmt->fetchAll(); // Определяем параметры фильтрации и пагинации $server_id = isset($_GET['server']) ? (int)$_GET['server'] : 0; $sort = isset($_GET['sort']) ? $_GET['sort'] : 'newest'; $price_min = isset($_GET['price_min']) ? (int)$_GET['price_min'] : 0; $price_max = isset($_GET['price_max']) ? (int)$_GET['price_max'] : 0; $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; $per_page = 12; $offset = ($page - 1) * $per_page; // Строим запрос с учетом фильтров $query = ' SELECT DISTINCT l.*, c.name as category_name, u.username as seller_name, u.avatar as seller_avatar, s.name as server_name, (SELECT image_path FROM listing_images WHERE listing_id = l.id AND is_primary = 1 LIMIT 1) as primary_image FROM listings l JOIN categories c ON l.category_id = c.id JOIN users u ON l.user_id = u.id JOIN servers s ON l.server_id = s.id WHERE l.category_id = ? AND l.status = "active" '; $params = [$category_id]; // Добавляем фильтр по серверу, если выбран if ($server_id > 0) { $query .= ' AND l.server_id = ?'; $params[] = $server_id; } // Добавляем фильтр по цене, если задан if ($price_min > 0) { $query .= ' AND l.price >= ?'; $params[] = $price_min; } if ($price_max > 0) { $query .= ' AND l.price <= ?'; $params[] = $price_max; } // Добавляем сортировку switch ($sort) { case 'price_asc': $query .= ' ORDER BY l.price ASC'; break; case 'price_desc': $query .= ' ORDER BY l.price DESC'; break; case 'oldest': $query .= ' ORDER BY l.created_at ASC'; break; case 'newest': default: $query .= ' ORDER BY l.created_at DESC'; break; } // Получаем общее количество объявлений $count_query = str_replace('l.*, c.name as category_name, u.username as seller_name, u.avatar as seller_avatar, s.name as server_name, (SELECT image_path FROM listing_images WHERE listing_id = l.id AND is_primary = 1 LIMIT 1) as primary_image', 'COUNT(*) as total', $query); $stmt = $pdo->prepare($count_query); $stmt->execute($params); $total = $stmt->fetch()['total']; $total_pages = ceil($total / $per_page); // Ограничиваем запрос для пагинации $query .= ' LIMIT ? OFFSET ?'; $params[] = $per_page; $params[] = $offset; // Получаем объявления $stmt = $pdo->prepare($query); $stmt->execute($params); $listings = $stmt->fetchAll(); // Функция для форматирования цены function format_price($price) { return number_format($price, 0, '.', ' ') . ' $'; } // Функция для обрезки текста function truncate($text, $length = 100) { if (strlen($text) > $length) { return substr($text, 0, $length) . '...'; } return $text; } // Функция для генерации ссылок с параметрами function build_query($params) { return http_build_query(array_merge($_GET, $params)); } ?> - Black Russia Marketplace

Сервер