{{ $tours->total() }} نتیجه پیدا شد
+ +{{$tour->title}}
++ نمایش {{ $tours->firstItem() }} - + {{ $tours->lastItem() }} + از {{ $tours->total() }} تور +
+diff --git a/app/Http/Controllers/TourController.php b/app/Http/Controllers/TourController.php
new file mode 100644
index 0000000..b654706
--- /dev/null
+++ b/app/Http/Controllers/TourController.php
@@ -0,0 +1,33 @@
+query('sort', 'default');
+
+ $tours = Tour::with([
+ 'originCity',
+ 'city',
+ 'tourDepartures',
+ ])
+ ->applySort($sort)
+ ->paginate(3)
+ ->withQueryString();
+
+ return view('tours.index', compact('title', 'tours', 'sort'));
+ }
+
+ public function show(Tour $tour)
+ {
+ $title= 'جزئیات تور';
+ return view('tours.show', compact('title'));
+ }
+}
diff --git a/app/Models/Tour.php b/app/Models/Tour.php
index 03f1372..4307fcf 100644
--- a/app/Models/Tour.php
+++ b/app/Models/Tour.php
@@ -7,6 +7,8 @@
namespace App\Models;
use Carbon\Carbon;
+use Illuminate\Database\Eloquent\Attributes\Scope;
+use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
@@ -50,6 +52,26 @@ class Tour extends Model
'file_id',
'tour_type'
];
+ #[Scope]
+ protected function applySort(Builder $query, ?string $sort = null): void
+ {
+ switch ($sort) {
+
+ case 'lowest':
+ $query->withMin('tourDepartures', 'price')
+ ->orderBy('tour_departures_min_price');
+ break;
+
+ case 'highest':
+ $query->withMax('tourDepartures', 'price')
+ ->orderByDesc('tour_departures_max_price');
+ break;
+
+ default:
+ $query->orderByDesc('id');
+ break;
+ }
+ }
public function flight()
{
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 452e6b6..86b1719 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -2,6 +2,7 @@
namespace App\Providers;
+use Illuminate\Pagination\Paginator;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
@@ -19,6 +20,6 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot(): void
{
- //
+ Paginator::useBootstrapFive();
}
}
diff --git a/app/helpers/helper.php b/app/helpers/helper.php
index 880b29d..e1e8858 100644
--- a/app/helpers/helper.php
+++ b/app/helpers/helper.php
@@ -1,5 +1,8 @@
tourDepartures->first();
+
+ if (!$departure) {
+ return 'نامشخص';
+ }
+
+ $start = Carbon::parse($departure->start_date);
+ $end = Carbon::parse($departure->end_date);
+
+ $nights = $start->diffInDays($end);
+ $days = $nights + 1;
+
+ return "{$days} روز و {$nights} شب";
+ }
+}
+if (!function_exists('tourDateRange')) {
+ function tourDateRange(Tour $tour): string
+ {
+ $departure = $tour->tourDepartures->first();
+
+ if (!$departure) {
+ return 'تاریخ نامشخص';
+ }
+
+ $start = Verta::instance($departure->start_date);
+ $end = Verta::instance($departure->end_date);
+
+ return $start->format('Y/m/d') . ' - ' . $end->format('Y/m/d');
+ }
+}
diff --git a/composer.json b/composer.json
index da35d55..8c8b634 100644
--- a/composer.json
+++ b/composer.json
@@ -27,7 +27,10 @@
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
- }
+ },
+ "files": [
+ "app/helpers/helper.php"
+ ]
},
"autoload-dev": {
"psr-4": {
diff --git a/resources/views/tours/index.blade.php b/resources/views/tours/index.blade.php
new file mode 100644
index 0000000..f88111a
--- /dev/null
+++ b/resources/views/tours/index.blade.php
@@ -0,0 +1,285 @@
+@extends('layouts.app')
+
+@section('content')
+
+ نمایش {{ $tours->firstItem() }} -
+ {{ $tours->lastItem() }}
+ از {{ $tours->total() }} تور
+ {{ $tours->total() }} نتیجه پیدا شد
+
+ {{$tour->title}}
+