artworkService = $artworkService; } public function show(Request $request, $id, $slug = null, $group = null) { $path = trim($request->path(), '/'); $segments = array_values(array_filter(explode('/', $path))); if (count($segments) < 2 || strtolower($segments[0]) !== 'category') { return view('shared.placeholder'); } $parts = array_slice($segments, 1); $first = $parts[0] ?? null; if ($first !== null && ctype_digit((string) $first)) { try { $category = Category::findOrFail((int) $first); $contentTypeSlug = $category->contentType->slug ?? null; $canonical = '/' . strtolower($contentTypeSlug) . '/' . $category->full_slug_path; return redirect($canonical, 301); } catch (ModelNotFoundException $e) { abort(404); } } $contentTypeSlug = array_shift($parts); $slugs = array_merge([$contentTypeSlug], $parts); $perPage = (int) $request->get('per_page', 40); $sort = (string) $request->get('sort', 'latest'); try { $artworks = $this->artworkService->getArtworksByCategoryPath($slugs, $perPage, $sort); } catch (ModelNotFoundException $e) { abort(404); } try { $category = Category::whereHas('contentType', function ($q) use ($contentTypeSlug) { $q->where('slug', strtolower($contentTypeSlug)); })->whereNull('parent_id')->where('slug', strtolower($parts[0] ?? ''))->first(); if ($category && count($parts) > 1) { $cur = $category; foreach (array_slice($parts, 1) as $slugPart) { $cur = $cur->children()->where('slug', strtolower($slugPart))->first(); if (! $cur) { abort(404); } } $category = $cur; } } catch (\Throwable $e) { $category = null; } if (! $category) { abort(404); } $subcategories = $category->children()->orderBy('sort_order')->orderBy('name')->get(); $page_title = $category->name; $page_meta_description = $category->description ?? ($category->contentType->name . ' artworks on Skinbase'); $page_meta_keywords = strtolower($category->contentType->slug) . ', skinbase, artworks, wallpapers, skins, photography'; return view('web.category', compact( 'page_title', 'page_meta_description', 'page_meta_keywords', 'group', 'category', 'subcategories', 'artworks' )); } public function browseCategories() { $data = app(\App\Services\LegacyService::class)->browseCategories(); return view('web.categories', $data); } }