diff --git a/content/search-results.php b/content/search-results.php index c4793b5..5cd0a40 100644 --- a/content/search-results.php +++ b/content/search-results.php @@ -2,20 +2,37 @@ if (session_status() === PHP_SESSION_NONE) { session_start(); } +require_once __DIR__ . '/../includes/resultsHelper.php'; -$all_results = $_SESSION["search_results"] ?? []; +$rawResults = $_SESSION["search_results"] ?? []; $query = $_SESSION["search_query"] ?? ""; -$totalResultsCount = count($all_results); -$limit = isset($_GET['limit']) ? (int)$_GET['limit'] : 10; +// Sortierung / Kategorie / Limit: GET-Parameter haben Vorrang, sonst +// Rückfall auf die zuletzt in der Session gemerkten Werte. So bleibt +// z.B. ein reiner Pagination-Link (?page=2) bei der aktuellen +// Sortierung/Filterung. +$currentSort = $_GET['sort'] ?? ($_SESSION['search_sort'] ?? 'alphabet'); +if (!in_array($currentSort, ['alphabet', 'likes', 'newest', 'oldest'])) { + $currentSort = 'alphabet'; +} +$_SESSION['search_sort'] = $currentSort; + +$currentCategory = strtolower($_GET['category'] ?? ($_SESSION['search_category'] ?? 'all')); +$_SESSION['search_category'] = $currentCategory; + +$limit = isset($_GET['limit']) ? (int)$_GET['limit'] : ($_SESSION['search_limit'] ?? 10); if (!in_array($limit, [10, 20, 50, 100])) { $limit = 10; } +$_SESSION['search_limit'] = $limit; -// Gesamtseitenzahl -$totalPages = max(1, ceil($totalResultsCount / $limit)); +// Serverseitig sortieren + filtern (gleiche Logik wie im JSON-Endpoint für JS-Nutzer) +$filteredResults = sortSearchResults($rawResults, $currentSort); +$filteredResults = filterSearchResultsByCategory($filteredResults, $currentCategory); + +$totalResultsCount = count($filteredResults); +$totalPages = max(1, (int)ceil($totalResultsCount / $limit)); -// Aktuelle Seite auslesen und validieren $currentPage = isset($_GET['page']) ? (int)$_GET['page'] : 1; if ($currentPage < 1) { $currentPage = 1; @@ -23,42 +40,59 @@ if ($currentPage < 1) { $currentPage = $totalPages; } -// Startpunkt im Array berechnen (Offset) $offset = ($currentPage - 1) * $limit; -// Nur die Ergebnisse für die aktuelle Seite ausschneiden -//$results = array_slice($all_results, $offset, $limit); -$results = $all_results; +// Dies ist die No-JS-Basisversion: nur die aktuelle Seite wird gerendert. +// Bei aktiviertem JS lädt js/results-app.js zusätzlich den kompletten +// Datensatz nach (ein einziger Request) und übernimmt Sortierung, Filter +// und Pagination danach komplett im Browser, ohne weitere Serveranfragen. +$results = array_slice($filteredResults, $offset, $limit); $resultCount = count($results); +// Kategorien für das Auswahlfeld (Wert => Label) +$categories = [ + 'Deutsch' => 'Deutsch', 'Englisch' => 'Englisch', 'Franzoesisch' => 'Französisch', + 'Latein' => 'Latein', 'Literatur' => 'Literatur', 'Mathematik' => 'Mathematik', + 'Biologie' => 'Biologie', 'Informatik' => 'Informatik', 'Chemie' => 'Chemie', + 'Physik' => 'Physik', 'Astronomie' => 'Astronomie', 'Geschichte' => 'Geschichte', + 'Erdkunde' => 'Erdkunde', 'Sozialkunde' => 'Sozialkunde', 'Wirtschaftskunde' => 'Wirtschaftskunde', + 'Religion' => 'Religion', 'Ethikunterricht' => 'Ethikunterricht', 'Philosophie' => 'Philosophie', + 'Psychologie' => 'Psychologie', 'Kunst' => 'Kunst', 'Musik' => 'Musik', 'Theater' => 'Theater', + 'Technik' => 'Technik', 'Werken' => 'Werken', 'Hauswirtschaft' => 'Hauswirtschaft', 'Sport' => 'Sport', +]; ?> -