From 1508654176aa3ccbb9350c10de15cafc0e7e200d Mon Sep 17 00:00:00 2001 From: Windows Store Date: Mon, 17 Aug 2026 13:04:11 +0330 Subject: [PATCH] feat(tours): add tour listing with pagination and routers --- app/Http/Controllers/TourController.php | 17 +++++ app/Models/Tour.php | 6 +- app/Providers/AppServiceProvider.php | 4 +- resources/views/index.blade.php | 3 + resources/views/tours/index.blade.php | 89 +++++++++++++++++++++++++ routes/web.php | 1 + 6 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 resources/views/tours/index.blade.php diff --git a/app/Http/Controllers/TourController.php b/app/Http/Controllers/TourController.php index e7b2145..a33b99f 100644 --- a/app/Http/Controllers/TourController.php +++ b/app/Http/Controllers/TourController.php @@ -3,10 +3,27 @@ namespace App\Http\Controllers; use App\Models\Tour; +use Carbon\Carbon; use Illuminate\Http\Request; class TourController extends Controller { + + + public function index() + { + $tours = Tour::with('tour_details')->latest()->paginate(6); + + $tours->each(function ($tour) { + $detail = $tour->tour_details->first(); + + $tour->nights = $detail + ? Carbon::parse($detail->start_date)->diffInDays(Carbon::parse($detail->end_date)) + : null; + }); + + return view('tours.index', compact('tours')); + } public function show(Tour $tour) { $tour->load([ diff --git a/app/Models/Tour.php b/app/Models/Tour.php index 54295e5..c846839 100644 --- a/app/Models/Tour.php +++ b/app/Models/Tour.php @@ -33,7 +33,11 @@ use Illuminate\Database\Eloquent\Model; */ class Tour extends Model { - protected $table = 'tours'; + /** + * @var float|mixed|null + */ + public mixed $nights; + protected $table = 'tours'; protected $casts = [ 'file_id' => 'int', diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 452e6b6..4ff2f27 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -3,6 +3,7 @@ namespace App\Providers; use Illuminate\Support\ServiceProvider; +use Illuminate\Pagination\Paginator; class AppServiceProvider extends ServiceProvider { @@ -19,6 +20,7 @@ class AppServiceProvider extends ServiceProvider */ public function boot(): void { - // + Paginator::useBootstrapFive(); + } } diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php index 1867c49..483f007 100644 --- a/resources/views/index.blade.php +++ b/resources/views/index.blade.php @@ -222,7 +222,10 @@
+ تور ها + +

اخرین تور های ما

diff --git a/resources/views/tours/index.blade.php b/resources/views/tours/index.blade.php new file mode 100644 index 0000000..64d538f --- /dev/null +++ b/resources/views/tours/index.blade.php @@ -0,0 +1,89 @@ +@extends('layouts.app') + +@section('content') +
+ + + + + + +
+
+
+ +
+
+
+
{{ $tours->total() }} نتیجه پیدا شد
+ + +
+
+
+ @forelse($tours as $tour) +
+
+
+ {{ $tour->title }} + +
+
+
+ {{ $tour->tour_type }} + {{ $tour->destinationAirport->city ?? '' }} +
+

{{ $tour->title }}

+

{{ $tour->summary }}

+
+ + @if($tour->nights) + سفر {{ $tour->nights + 1 }} روز و {{ $tour->nights }} شب + @endif +
+
+
+ @if($tour->price) + از {{ number_format($tour->price) }} تومان + @endif +
+ +
+
+
+
+ @empty +
+

هیچ توری یافت نشد.

+
+ @endforelse + +
+
+ {{ $tours->links() }} +
+
+

نمایش {{ $tours->firstItem() }} - {{ $tours->lastItem() }} از {{ $tours->total() }} تور

+
+
+ + +
+
+
+
+
+ +
+ +@endsection diff --git a/routes/web.php b/routes/web.php index 1f2d6d5..10a231e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -8,5 +8,6 @@ Route::get('/' , [IndexController::class , 'index'])->name('index'); Route::prefix('tour')->controller(TourController::class)->name('tour.')->group(function (){ + Route::get('index' , 'index')->name('index'); Route::get('show/{tour}' , 'show')->name('show'); });