feat:complete tour index

This commit is contained in:
2026-08-17 16:00:51 +03:30
parent 4095f0bed2
commit 6a8ecb0030
3 changed files with 66 additions and 16 deletions
+15 -1
View File
@@ -2,9 +2,23 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Enums\FlightStatus;
use App\Enums\TourStatus;
use App\Models\Tour;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class TourController extends Controller class TourController extends Controller
{ {
// public function index()
{
$tours = Tour::query()
->where('status', TourStatus::ENABLE)
->with('file')
->applySort()
->paginate()
->withQueryString();
return view('tours.index', compact('tours'));
}
} }
+30
View File
@@ -7,6 +7,8 @@
namespace App\Models; namespace App\Models;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Contracts\Database\Query\Builder;
use Illuminate\Database\Eloquent\Attributes\Scope;
use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
@@ -81,4 +83,32 @@ class Tour extends Model
{ {
return $this->hasMany(TourDate::class); return $this->hasMany(TourDate::class);
} }
#[Scope]
protected function applySort(Builder $query): void
{
$request = request();
switch ($request->input('sort')) {
case 'most_viewed':
{
$query->orderByDesc('views');
break;
}
case 'cheapest':
{
$query->orderBy('price');
break;
}
case 'expensive':
{
$query->orderByDesc('price');
break;
}
default:
{
$query->orderByDesc('created_at');
}
}
}
} }
+21 -15
View File
@@ -1,8 +1,8 @@
<div class="col-md-6 col-lg-3"> <div class="col-md-6 col-lg-4">
<div class="flight-item"> <div class="flight-item">
<div class="flight-img"> <div class="flight-img">
<img src="assets/img/flight/01.jpg" alt> <div class="flight-img"> <img src="assets/img/flight/01.jpg" alt>
<a href="#" class="add-wishlist"> <a href="#" class="add-wishlist">
<i class="far fa-heart"></i> <i class="far fa-heart"></i>
@@ -15,39 +15,44 @@
<div class="flight-title-info"> <div class="flight-title-info">
<img src="assets/img/flight/airline-1.png" alt>
<h4> <h4>
<a href="#"> <a href="{{ route('tours.show', $tour) }}">
{{ $tour->origin }} {{ $tour->title }}
<i class="far fa-exchange"></i>
{{ $tour->destination }}
</a> </a>
</h4> </h4>
</div> </div>
<p class="flight-date"> <p class="flight-date">
<i class="far fa-calendar-days"></i> <i class="far fa-clock"></i>
سفر {{ $tour->duration }} روز
{{ $tour->duration }} روز @if($tour->duration > 1)
و {{ $tour->duration - 1 }} شب
@endif
</p> </p>
</div> </div>
<div class="mb-3">
<p>
<i class="far fa-location-dot"></i>
{{ $tour->summary }}
</p>
</div>
<div class="flight-bottom"> <div class="flight-bottom">
<div class="flight-price"> <div class="flight-price">
از از
<span> <span>
{{ number_format($tour->price) }} تومان {{ number_format($tour->price) }}
تومان
</span> </span>
</div> </div>
<div class="flight-text-btn"> <div class="flight-text-btn">
<a href="#"> <a href="{{ route('tours.show', $tour) }}">
نمایش جزئیات نمایش جزئیات
<i class="fas fa-arrow-left"></i> <i class="fas fa-arrow-left"></i>
</a> </a>
@@ -59,3 +64,4 @@
</div> </div>
</div> </div>
</div>