Skip to content

Product List / Category Page

URL: /category/{cat}, /category/{cat}/{subcat}, /category/{cat}/{subcat}/{subsubcat} Template: resources/views/template/productlist.blade.php

Displays a list of products filtered by category. Supports pagination, sorting, and subcategory navigation.


Page Variables

Category Data ($page->misc)

Variable Type Description
$page->misc->products array Array of product arrays (same structure as featureProducts())
$page->misc->category object Current category object
$page->misc->category->name string Category display name
$page->misc->category->description string Category HTML description
$page->misc->category->permalink string Category URL slug
$page->misc->subcategories array Child categories of the current category
$page->misc->pagination object Paginator object
$page->misc->totalCount int Total number of matching products
$page->misc->sort string Current sort order (e.g., 'name_asc', 'price_desc')

Query Parameters

These query parameters can be read with getquery():

Parameter Description
?sort= Sort order (name_asc, name_desc, price_asc, price_desc)
?page= Current page number
?category= Category filter permalink

Template Example

@extends('layout.layout')

@section('headtitle')
    @php $catName = $page->misc->category->name ?? 'Products'; @endphp
    <title>{{ $catName }} | {{ $page->settings->siteTitle }}</title>
@endsection

@section('content')
<div class="container mt-4">

    {{-- Category Header --}}
    @if($page->misc->category ?? false)
        <h1>{{ $page->misc->category->name }}</h1>
        @if($page->misc->category->description ?? false)
            <div class="category-description">
                {!! $page->misc->category->description !!}
            </div>
        @endif
    @endif

    {{-- Subcategory Navigation --}}
    @if(!empty($page->misc->subcategories))
        <div class="subcategory-nav mb-4">
            @foreach($page->misc->subcategories as $subcat)
                <a href="/category/{{ $page->misc->category->permalink }}/{{ $subcat['permalink'] }}"
                   class="btn btn-outline-secondary me-2 mb-2">
                    {{ $subcat['name'] }}
                </a>
            @endforeach
        </div>
    @endif

    {{-- Sort Controls --}}
    <form method="get" class="d-flex mb-4">
        <select name="sort" class="form-select me-2" style="width: auto;">
            <option value="name_asc" {{ getquery('sort') === 'name_asc' ? 'selected' : '' }}>Name A-Z</option>
            <option value="name_desc" {{ getquery('sort') === 'name_desc' ? 'selected' : '' }}>Name Z-A</option>
            <option value="price_asc" {{ getquery('sort') === 'price_asc' ? 'selected' : '' }}>Price: Low to High</option>
            <option value="price_desc" {{ getquery('sort') === 'price_desc' ? 'selected' : '' }}>Price: High to Low</option>
        </select>
        <button type="submit" class="btn btn-secondary">Sort</button>
    </form>

    {{-- Product Count --}}
    @if(isset($page->misc->totalCount))
        <p>{{ $page->misc->totalCount }} products found</p>
    @endif

    {{-- Product Grid --}}
    <div class="row">
        @forelse($page->misc->products ?? [] as $product)
            <div class="col-6 col-md-3 mb-4">
                @include('partial.homepageproduct', compact('product'))
            </div>
        @empty
            <div class="col-12">
                <div class="alert alert-info">No products found in this category.</div>
            </div>
        @endforelse
    </div>

    {{-- Pagination --}}
    @if(isset($page->misc->pagination))
        {!! paginationControl($page->misc->pagination, 'sliding', 'partial.paginator', ['pageRange' => 5]) !!}
    @endif

</div>
@endsection