--- import Layout from '../../layouts/Layout.astro'; import ProductCard from '../../components/ProductCard.astro'; import CatalogFilters from '../../components/CatalogFilters.tsx'; import { getProductsFromDB, getBrandsFromDB, getProductCount } from '../../lib/products'; import { getUserFromCookie } from '../../lib/user-auth'; const url = Astro.url; const brand = url.searchParams.get('merk') || undefined; const gender = url.searchParams.get('geslacht') || undefined; // Hierarchical size filtering: check advanced mode cookie and user profile const user = await getUserFromCookie(Astro.cookies); const advancedOn = Astro.cookies.get('sp_size_mode')?.value === 'on'; const userId = (advancedOn && user?.id) ? user.id : undefined; const size = userId ? undefined : (url.searchParams.get('maat') || Astro.cookies.get('sp_size')?.value || undefined); const sort = (url.searchParams.get('sort') || 'popular') as 'popular' | 'newest' | 'price_asc' | 'price_desc' | 'discount'; const page = Math.max(1, parseInt(url.searchParams.get('pagina') || '1')); const perPage = 36; const products = await getProductsFromDB({ limit: perPage, offset: (page - 1) * perPage, orderBy: sort, brand, gender, size, userId, }); const totalCount = await getProductCount(); const brands = await getBrandsFromDB(); const totalPages = Math.ceil(totalCount / perPage); const title = brand ? `${brand} Sneakers — Vergelijk Prijzen | SneakerPicks` : `Alle Sneakers vergelijken — ${totalCount.toLocaleString('nl-NL')}+ modellen | SneakerPicks`; const description = brand ? `Vergelijk ${brand} sneaker prijzen bij alle Nederlandse shops.` : 'Bekijk en vergelijk alle sneakers. Filter op merk, prijs, maat en geslacht.'; const analyticsItems = products.map((s, i) => ({ item_id: s.id, item_name: `${s.brand} ${s.name}`, item_brand: s.brand, price: s.lowestPrice, index: i })); --- 1}>

Alle Sneakers

{totalCount} sneakers gevonden

({ name: b.name, slug: b.slug, count: b.count }))} currentBrand={brand || ''} currentGender={gender || ''} currentSize={size || ''} currentSort={sort} />
{products.length} resultaten
{products.length > 0 ? (
{products.map((sneaker, i) => ( ))}
) : (

Geen sneakers gevonden met deze filters.

)} {totalPages > 1 && (
{Array.from({ length: Math.min(totalPages, 10) }, (_, i) => i + 1).map(p => { const params = new URLSearchParams(url.searchParams); params.set('pagina', String(p)); return ( {p} ); })}
)}