name) $genres = []; foreach ($model->genres() as $g) { $slug = url_title((string) $g['_id'], '-', true); $genres[$slug] = ['name' => $g['_id'], 'count' => $g['count']]; } ksort($genres); $genreName = ''; if ($genre !== '') { if (! isset($genres[$genre])) { throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound(); } $genreName = $genres[$genre]['name']; } // ---- filters (same shape as the deal feed) ---- $filters = [ 'stores' => array_values(array_filter(array_map('strval', (array) $request->getGet('stores')))), 'kind' => (string) ($request->getGet('kind') ?? ''), 'min_price' => $request->getGet('min_price') !== null ? (string) $request->getGet('min_price') : '', 'max_price' => $request->getGet('max_price') !== null ? (string) $request->getGet('max_price') : '', 'min_cut' => (int) ($request->getGet('min_cut') ?? 0), 'hl_only' => (bool) $request->getGet('hl_only'), 'sort' => (string) ($request->getGet('sort') ?? 'trending'), 'q' => trim((string) ($request->getGet('q') ?? '')), 'price_tier' => (string) ($request->getGet('price_tier') ?? ''), 'discount_tier' => (string) ($request->getGet('discount_tier') ?? ''), 'deal_rating' => (string) ($request->getGet('deal_rating') ?? ''), 'release_range' => (string) ($request->getGet('release_range') ?? ''), 'time_range' => (string) ($request->getGet('time_range') ?? ''), 'genre' => $genreName, 'genres' => array_values(array_filter(array_map('strval', (array) $request->getGet('genres')))), ]; $page = max(1, (int) $request->getGet('page')); $perPage = 20; $feed = $model->feed($filters, $page, $perPage); $data = [ 'pageTitle' => ($genreName !== '' ? ucwords($genreName) . ' games — ' : '') . 'GG.deals', 'filters' => $filters, 'feed' => $feed['rows'], 'total' => $feed['total'], 'pages' => $feed['pages'], 'page' => $page, 'perPage' => $perPage, 'genres' => $genres, 'activeGenre' => $genre, 'activeGenreName' => $genreName, 'stores' => (new StoreModel())->all(), 'stats' => $model->stats(), ]; return view('games', $data); } }