prepare( "SELECT a.*, c.name AS category_name FROM kb_articles a JOIN kb_categories c ON c.id = a.category_id WHERE a.is_published = 1 AND (a.title LIKE ? OR a.body LIKE ?) ORDER BY a.views DESC" ); $like = '%' . $q . '%'; $stmt->execute([$like, $like]); return $stmt->fetchAll(); }; $articles = function_exists('dhcm_cache_remember') ? dhcm_cache_remember('kb.search.' . $q, $loadSearch) : $loadSearch(); $categories = []; } else { $loadIndex = static function () use ($pdo): array { $categories = $pdo->query('SELECT * FROM kb_categories ORDER BY sort_order, name')->fetchAll(); $articlesByCategory = []; foreach ($pdo->query('SELECT * FROM kb_articles WHERE is_published = 1 ORDER BY title')->fetchAll() as $article) { $articlesByCategory[(int) $article['category_id']][] = $article; } return ['categories' => $categories, 'articles' => $articlesByCategory]; }; $kbIndex = function_exists('dhcm_cache_remember') ? dhcm_cache_remember('kb.index', $loadIndex) : $loadIndex(); $categories = $kbIndex['categories'] ?? []; $articlesByCategory = $kbIndex['articles'] ?? []; $articles = null; } $pageTitle = 'Wissensdatenbank'; $activePage = 'kb'; $showHeroBanner = true; $showHeroImage = true; $heroEyebrow = 'Wissensdatenbank'; $heroTitle = 'Wonach suchen Sie?'; $heroSubtitle = 'Antworten auf häufige Fragen – oft schneller als der Weg über ein Ticket.'; $heroSearchPlaceholder = 'Suchbegriff eingeben …'; $heroSearchValue = $q; require __DIR__ . '/includes/header_customer.php'; ?>