From 8836034670bac73fa3798041f29f12582ec503d3 Mon Sep 17 00:00:00 2001 From: NOrtmann1 Date: Sat, 18 Jul 2026 17:17:44 +0200 Subject: [PATCH] Kategoriepaginator --- content/search-results.php | 2 +- content/showCategory.php | 198 +++++++++++---------- php/controller/showCategory-controller.php | 69 ++++--- 3 files changed, 143 insertions(+), 126 deletions(-) diff --git a/content/search-results.php b/content/search-results.php index f70298e..d9a6399 100644 --- a/content/search-results.php +++ b/content/search-results.php @@ -66,7 +66,7 @@ $categories = [ Inhalt: Zeigt die Ergebnisse einer Suche an. Funktioniert ohne JavaScript (serverseitige Sortierung/Filter/Pagination über echte Links + Formulare) und wird bei aktiviertem JS von - js/results-app.js vollständig client-seitig übernommen. + js/search-results.js vollständig client-seitig übernommen. -->
diff --git a/content/showCategory.php b/content/showCategory.php index 064acc7..95e3941 100644 --- a/content/showCategory.php +++ b/content/showCategory.php @@ -5,7 +5,6 @@ if (session_status() === PHP_SESSION_NONE) { require_once __DIR__ . '/../includes/resultsHelper.php'; $rawResults = $_SESSION["search_results"] ?? []; -$query = $_SESSION["search_query"] ?? ""; // Sortierung / Kategorie / Limit: GET-Parameter haben Vorrang, sonst // Rückfall auf die zuletzt in der Session gemerkten Werte. So bleibt @@ -26,9 +25,8 @@ if (!in_array($limit, [10, 20, 50, 100])) { } $_SESSION['search_limit'] = $limit; -// Serverseitig sortieren + filtern +// Serverseitig sortieren $filteredResults = sortSearchResults($rawResults, $currentSort); -$filteredResults = filterSearchResultsByCategory($filteredResults, $currentCategory); $totalResultsCount = count($filteredResults); $totalPages = max(1, (int)ceil($totalResultsCount / $limit)); @@ -49,108 +47,128 @@ $offset = ($currentPage - 1) * $limit; $results = array_slice($filteredResults, $offset, $limit); $resultCount = count($results); ?> + +
+ - + + -
-

- von getAuthor())) ? htmlspecialchars($article->getAuthor()) : 'Anonym'; ?> -

- - ❤️ getLikes())) ? htmlspecialchars($article->getLikes()) : '0'; ?> - -
- +
+ +
+

Ergebnisse

+

Treffer in dieser Kategorie ""

+
+ + +
+ + + +
+
+

+ + + +

+
+

Von:

+ + + ❤️ +
-
- - -

Keine Artikel in dieser Kategorie gefunden.

- +
+
+ + + +

Unzulässige Suchanfrage

+ + 0): ?> +

Keine Beiträge in dieser Kategorie gefunden.

+ + + +
+ +
+ -
- +
+ + + diff --git a/php/controller/showCategory-controller.php b/php/controller/showCategory-controller.php index 938fca0..8414723 100644 --- a/php/controller/showCategory-controller.php +++ b/php/controller/showCategory-controller.php @@ -9,59 +9,58 @@ require_once 'php/model/UserManager.php'; require_once 'php/validator/article-validator.php'; if (isset($_GET["category"]) && !empty($_GET["category"]) && articleCategoryValidator($_GET["category"])){ - $category = $_GET["category"]; + $category = $_GET['category'] ?? 'all'; // Sortierung auslesen (Standard: alphabet) $sortStyle = isset($_GET['sort']) ? trim($_GET['sort']) : 'alphabet'; - // Aktuelle Seite auslesen - $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; - if ($page < 1) { $page = 1; } - - try { + try{ $articleManager = ArticleManager::getInstance(); $userManager = UserManager::getInstance(); - $allArticles = $articleManager->getArticlesByCategory($category); - foreach ($allArticles as $article) { - $article->setAuthor($userManager->findUser($article->getAuthor())["vorname"] . " " . $userManager->findUser($article->getAuthor())["nachname"]); - } - $totalArticles = count($allArticles); - // --- SORTIERUNG LOGIK --- - if ($sortStyle === 'alphabet') { - usort($allArticles, function($a, $b) { - return strcasecmp($a->getTitle(), $b->getTitle()); - }); - } elseif ($sortStyle === 'likes') { - usort($allArticles, function($a, $b) { - return $b->getLikes() <=> $a->getLikes(); // Absteigend nach Likes - }); - } elseif ($sortStyle === 'newest') { - usort($allArticles, function($a, $b) { - return strtotime($b->getCreationDate()) <=> strtotime($a->getCreationDate()); // Neueste zuerst - }); - } elseif ($sortStyle === 'oldest') { - usort($allArticles, function($a, $b) { - return strtotime($a->getCreationDate()) <=> strtotime($b->getCreationDate()); // Älteste zuerst - }); + $results = $articleManager->getArticlesByCategory($category); + + $safeArrayResults = []; + foreach ($results as $obj) { + $safeArrayResults[] = [ + "id" => $obj->getId(), + "title" => $obj->getTitle(), + "content" => $obj->getContent(), + "author" => $userManager->findUser($obj->getAuthor())["vorname"] . " " . $userManager->findUser($obj->getAuthor())["nachname"], + "category" => $obj->getCategory(), + "tags" => $obj->getTags(), + "creationDate" => $obj->getCreationDate(), + "likes" => $obj->getLikes(), + ]; } - // Paginierung konfigurieren - $limit = 10; - $totalPages = ceil($totalArticles / $limit); - if ($page > $totalPages && $totalPages > 0) { $page = $totalPages; } - - $offset = ($page - 1) * $limit; - $articles = array_slice($allArticles, $offset, $limit); + $_SESSION["search_results"] = $safeArrayResults; + $_SESSION["message"] = "new_search_results"; } catch (Exception $e) { $_SESSION["message"] = "internal_error"; include_once "content/404.php"; exit(); } + + $sort = $_GET['sort'] ?? 'alphabet'; + $_SESSION['search_sort'] = $sort; + + $_SESSION['search_category'] = $category; + + $limit = isset($_GET['limit']) ? (int)$_GET['limit'] : 10; + if (!searchLimitValidator($limit)) { + $limit = 10; + } + $_SESSION['search_limit'] = $limit; + + // Neue Suche -> immer wieder bei Seite 1 beginnen + header("Location: ../../index.php?pfad=showCategory&category=" . urlencode($category) . "&sort=" . urlencode($sort) . "&limit=" . $limit . "&page=1"); + exit(); } else { $_SESSION["message"] = "invalid_category"; include_once "content/404.php"; exit(); } + ?> \ No newline at end of file