PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]); } return $pdo; } $pdo = getDB(); $categories = [ 'audit' => 'Аудит', 'sla' => 'SLA', 'incident' => 'Инциденты', 'supervision' => 'Технадзор', 'documentation' => 'Документация', 'risk' => 'Риск-инжиниринг', 'cases' => 'Кейсы', ]; $search = trim($_GET['search'] ?? ''); $category = trim($_GET['cat'] ?? ''); $page = max(1, (int)($_GET['page'] ?? 1)); $perPage = 12; $where = "status='published'"; $params = []; if ($category !== '' && isset($categories[$category])) { $where .= " AND category=?"; $params[] = $category; } if ($search !== '') { $where .= " AND (title LIKE ? OR excerpt LIKE ? OR content LIKE ?)"; $searchTerm = '%' . $search . '%'; $params[] = $searchTerm; $params[] = $searchTerm; $params[] = $searchTerm; } $countStmt = $pdo->prepare("SELECT COUNT(*) FROM blog_posts WHERE $where"); $countStmt->execute($params); $totalPosts = (int)$countStmt->fetchColumn(); $totalPages = max(1, (int)ceil($totalPosts / $perPage)); $offset = ($page - 1) * $perPage; $stmt = $pdo->prepare("SELECT bp.*, u.full_name AS author_name FROM blog_posts bp LEFT JOIN users u ON u.id=bp.author_id WHERE $where ORDER BY bp.published_at DESC LIMIT $perPage OFFSET $offset"); $stmt->execute($params); $posts = $stmt->fetchAll(); ob_start(); if (empty($posts)): ?>

Записей пока нет

Следите за обновлениями — мы регулярно публикуем новые статьи.

1): ?> $html, 'totalPages' => $totalPages, 'currentPage' => $page, 'category' => $category], JSON_UNESCAPED_UNICODE);