getLikeCount($a); }); break; case 'newest': usort($results, function ($a, $b) { return strcmp($b['creationDate'] ?? '', $a['creationDate'] ?? ''); }); break; case 'oldest': usort($results, function ($a, $b) { return strcmp($a['creationDate'] ?? '', $b['creationDate'] ?? ''); }); break; case 'alphabet': default: usort($results, function ($a, $b) { return strcasecmp($a['title'] ?? '', $b['title'] ?? ''); }); break; } return $results; } /** * Filtert die Ergebnisse ('all' = kein Filter). */ function filterSearchResultsByCategory(array $results, string $category): array { $category = strtolower(trim($category)); if ($category === '' || $category === 'all') { return $results; } return array_values(array_filter($results, function ($item) use ($category) { return strtolower($item['category'] ?? '') === $category; })); } /** * Baut eine Such-Ergebnis-URL für einen bestimmten Seitenwechsel (No-JS-Pagination). */ function buildSearchResultsUrl(int $page, string $query, string $sort, string $category, int $limit): string { return "index.php?pfad=search-results" . "&q=" . urlencode($query) . "&sort=" . urlencode($sort) . "&category=" . urlencode($category) . "&limit=" . $limit . "&page=" . $page; } /** * Rendert eine rein serverseitige Pagination für den No-JS-Fall: */ function renderNoJsPagination(int $currentPage, int $totalPages, string $query, string $sort, string $category, int $limit): string { $html = ''; if ($currentPage > 1) { $html .= '« '; } else { $html .= '« '; } for ($i = 1; $i <= $totalPages; $i++) { if ($i === $currentPage) { $html .= '' . $i . ' '; } else { $html .= '' . $i . ' '; } } if ($currentPage < $totalPages) { $html .= '»'; } else { $html .= '»'; } return $html; }