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