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' => 'Кейсы', ]; $slug = trim($_GET['slug'] ?? ''); $search = trim($_GET['search'] ?? ''); $category = trim($_GET['cat'] ?? ''); $page = max(1, (int)($_GET['page'] ?? 1)); $perPage = 12; // Single post if ($slug !== '') { $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 bp.slug=? AND bp.status='published' LIMIT 1"); $stmt->execute([$slug]); $post = $stmt->fetch(); $pageTitle = $post ? ($post['title'] . ' — ' . SITE_NAME) : 'Пост не найден — ' . SITE_NAME; $pageDesc = $post ? ($post['excerpt'] ?: mb_substr(strip_tags($post['content']), 0, 200)) : ''; $robots = $post ? 'index, follow' : 'noindex, nofollow'; $canonical = $post ? '/blog/' . $post['slug'] : '/blog/'; } else { $pageTitle = 'Блог — ' . SITE_NAME; $pageDesc = 'Инженерный блог AegisOne Engineering: риск-инжиниринг, SLA, инциденты, аудит систем безопасности.'; $robots = 'index, follow'; $canonical = '/blog/'; } ?>
Управление рисками, SLA, инциденты и инженерная экспертиза