Laravel 12 E-Commerce Project

Laravel 12 E-Commerce Project - Show On Sale Products On Home Page


Laravel 12 E-Commerce Project Tutorial

Showing On Sale Products on the Home Page

Hi everyone, welcome back to the Laravel E-Commerce Project Tutorial. In this video, we will learn how to show products that are currently on sale dynamically on the home page.

  1. Fetch On Sale Products in `HomeController`

    Open your `HomeController.php` and update the `index` function (where you fetch other data for the home page). We need to query products that have a value set for the `sale_price` column. We will fetch up to 8 products in random order.

    public function index()
    {
        // Fetch up to 8 products that have a non-null sale_price
        $sproducts = Product::whereNotNull("sale_price")
                            ->orWhere("sale_price","<>","")
                            ->inRandomOrder()
                            ->get()
                            ->take(8);
                            
        // ... other data fetching logic ...
        
        // Return the on-sale products to the view
        return view("index", compact("slides", "sproducts")); 
        // Assuming "slides" from Part 45 is also passed
    }
    
  2. Update the Frontend View (`index.blade.php`)

    Open `resources/views/index.blade.php`. Find the section dedicated to "On Sale Products" and replace the static product list with a dynamic loop using the `$sproducts` collection.

    <div class="product-tabs-content">
        <div class="tab-content">
            <div class="tab-pane fade show active" id="tab?">
                <div class="swiper-container">
                    <div class="swiper-wrapper">
                        @foreach ($sproducts as $product)
                        <div class="swiper-slide">
                            <div class="single-product-02">
                                <div class="product-images">
                                    <a href="{{ route("shop.product.details", ["product_slug" => $product->slug]) }}">
                                        <img src="{{ asset("uploads/products") }}/{{ $product->image }}" 
                                             width="270" height="303" alt="{{ $product->name }}">
                                    </a>
                                </div>
                                <div class="product-content">
                                    <h4 class="title">
                                        <a href="{{ route("shop.product.details", ["product_slug" => $product->slug]) }}">
                                            {{ $product->name }}
                                        </a>
                                    </h4>
                                    <div class="price">
                                        <span class="sale-price">
                                            @if ($product->sale_price)
                                            <s class="sprice">${{ $product->regular_price }}</s> 
                                            ${{ $product->sale_price }}
                                            @else
                                            ${{ $product->regular_price }}
                                            @endif
                                        </span>
                                    </div>
                                </div>
                            </div>
                        </div>
                        @endforeach
                    </div>
                </div>
            </div>
        </div>
    </div>
    
  3. Price Display Logic

    The code uses conditional logic to display the pricing: if a `sale_price` exists, it shows the regular price with a strikethrough (`<s>`) next to the sale price; otherwise, it only displays the regular price.

Verification and Testing ✨

Save the files and refresh the Home Page. The "On Sale Products" section should now display the products that have a sale price configured in the database, with their discounted prices clearly shown.

Thanks for watching this video. Don'tforget to subscribe to my channel!

Written by Surfside Media

Senior Full Stack Developer specializing in Web Technologies.