feat: display tours dynamically on index page
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Flight;
|
||||
use App\Models\Tour;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class IndexController extends Controller
|
||||
@@ -9,6 +11,12 @@ class IndexController extends Controller
|
||||
//
|
||||
public function index()
|
||||
{
|
||||
return view('index');
|
||||
$tours = Tour::query()
|
||||
->with(['file', 'tour_details','originAirport' , 'destinationAirport'])
|
||||
->orderByDesc('created_at')
|
||||
->limit(4)
|
||||
->get();
|
||||
|
||||
return view('index' , compact('tours'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Tour;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class TourController extends Controller
|
||||
{
|
||||
public function show(Tour $tour)
|
||||
{
|
||||
$tour->load([
|
||||
'tour_details',
|
||||
'originAirport',
|
||||
'destinationAirport',
|
||||
'file',
|
||||
]);
|
||||
|
||||
return view('tours.show', compact('tour'));
|
||||
}
|
||||
}
|
||||
+13
-2
@@ -12,15 +12,16 @@ use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* Class Airport
|
||||
*
|
||||
*
|
||||
* @property int $id
|
||||
* @property string $name
|
||||
* @property string $city
|
||||
* @property string $country
|
||||
* @property Carbon $created_at
|
||||
* @property Carbon $updated_at
|
||||
*
|
||||
*
|
||||
* @property Collection|Flight[] $flights
|
||||
* @property Collection|Tour[] $tours
|
||||
*
|
||||
* @package App\Models
|
||||
*/
|
||||
@@ -38,4 +39,14 @@ class Airport extends Model
|
||||
{
|
||||
return $this->hasMany(Flight::class, 'origin_airports_id');
|
||||
}
|
||||
|
||||
public function originTours()
|
||||
{
|
||||
return $this->hasMany(Tour::class, 'origin_airports_id');
|
||||
}
|
||||
|
||||
public function destinationTours()
|
||||
{
|
||||
return $this->hasMany(Tour::class, 'destination_airports_id');
|
||||
}
|
||||
}
|
||||
|
||||
+24
-6
@@ -12,17 +12,21 @@ use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* Class Tour
|
||||
*
|
||||
*
|
||||
* @property int $id
|
||||
* @property string $title
|
||||
* @property int $file_id
|
||||
* @property int|null $file_id
|
||||
* @property string $tour_type
|
||||
* @property string $summary
|
||||
* @property string $description
|
||||
* @property Carbon $created_at
|
||||
* @property Carbon $updated_at
|
||||
*
|
||||
* @property File $file
|
||||
* @property int $origin_airports_id
|
||||
* @property int $destination_airports_id
|
||||
*
|
||||
* @property Airport $originAirport
|
||||
* @property Airport $destinationAirport
|
||||
* @property File|null $file
|
||||
* @property Collection|TourDetail[] $tour_details
|
||||
*
|
||||
* @package App\Models
|
||||
@@ -32,7 +36,9 @@ class Tour extends Model
|
||||
protected $table = 'tours';
|
||||
|
||||
protected $casts = [
|
||||
'file_id' => 'int'
|
||||
'file_id' => 'int',
|
||||
'origin_airports_id' => 'int',
|
||||
'destination_airports_id' => 'int'
|
||||
];
|
||||
|
||||
protected $fillable = [
|
||||
@@ -40,9 +46,21 @@ class Tour extends Model
|
||||
'file_id',
|
||||
'tour_type',
|
||||
'summary',
|
||||
'description'
|
||||
'description',
|
||||
'origin_airports_id',
|
||||
'destination_airports_id'
|
||||
];
|
||||
|
||||
public function originAirport()
|
||||
{
|
||||
return $this->belongsTo(Airport::class, 'origin_airports_id');
|
||||
}
|
||||
|
||||
public function destinationAirport()
|
||||
{
|
||||
return $this->belongsTo(Airport::class, 'destination_airports_id');
|
||||
}
|
||||
|
||||
public function file()
|
||||
{
|
||||
return $this->belongsTo(File::class);
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
<div class="col-md-6 col-lg-3">
|
||||
|
||||
|
||||
<div class="activity-item wow fadeInUp" data-wow-duration="1s" data-wow-delay=".25s">
|
||||
<div class="activity-img">
|
||||
<img src="assets/img/activity/01.jpg" alt>
|
||||
<a href="{{route('tour.show' , $card->id)}}" class="add-wishlist"><i class="far fa-heart"></i></a>
|
||||
</div>
|
||||
<div class="activity-content">
|
||||
<h4 class="activity-title"><a href="{{route('tour.show' , $card->id)}}">{{$card->title}}</a></h4><span
|
||||
class="activity-rate-type">{{$card->tour_type}}</span>
|
||||
<div class="activity-rate " style="">
|
||||
<span class="badge"><i class="fal form-group-icon"></i> {{$card->tour_details->first()?->capacity}}</span>
|
||||
|
||||
<span class="activity-rate-review">{{ $card->originAirport->city }} -> {{ $card->destinationAirport->city }}</span>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="activity-bottom">
|
||||
<div class="activity-price">
|
||||
<span class="activity-price-amount">
|
||||
{{ number_format($card->tour_details->first()?->price) }} تومان
|
||||
</span>
|
||||
</div>
|
||||
<div class="activity-text-btn">
|
||||
<a href="{{route('tour.show' , $card->id)}}">نمایش جزئیات <i class="fas fa-arrow-left"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
@@ -222,215 +222,17 @@
|
||||
<div class="row">
|
||||
<div class="col-lg-6 mx-auto wow fadeInDown" data-wow-duration="1s" data-wow-delay=".25s">
|
||||
<div class="site-heading text-center">
|
||||
<span class="site-title-tagline">فعالیت</span>
|
||||
<h2 class="site-title">محبوب ترین فعالیت های ما</h2>
|
||||
<span class="site-title-tagline">تور ها</span>
|
||||
<h2 class="site-title">اخرین تور های ما</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="activity-item wow fadeInUp" data-wow-duration="1s" data-wow-delay=".25s">
|
||||
<div class="activity-img">
|
||||
<img src="assets/img/activity/01.jpg" alt>
|
||||
<a href="#" class="add-wishlist"><i class="far fa-heart"></i></a>
|
||||
</div>
|
||||
<div class="activity-content">
|
||||
<h4 class="activity-title"><a href="#">کوهنوردی برفی</a></h4>
|
||||
<p><i class="far fa-location-dot"></i> 25/B جاده میلف خیابان انقلاب</p>
|
||||
<div class="activity-rate">
|
||||
<span class="badge"><i class="fal fa-star"></i> 5.0</span>
|
||||
<span class="activity-rate-type">عالی</span>
|
||||
<span class="activity-rate-review">(2.5k بررسی)</span>
|
||||
</div>
|
||||
<div class="activity-bottom">
|
||||
<div class="activity-price">
|
||||
<span class="activity-price-amount">30 تومان</span>
|
||||
</div>
|
||||
<div class="activity-text-btn">
|
||||
<a href="#">نمایش جزئیات <i class="fas fa-arrow-left"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="activity-item wow fadeInUp" data-wow-duration="1s" data-wow-delay=".50s">
|
||||
<div class="activity-img">
|
||||
<img src="assets/img/activity/02.jpg" alt>
|
||||
<a href="#" class="add-wishlist"><i class="far fa-heart"></i></a>
|
||||
</div>
|
||||
<div class="activity-content">
|
||||
<h4 class="activity-title"><a href="#">کوهنوردی برفی</a></h4>
|
||||
<p><i class="far fa-location-dot"></i> 25/B جاده میلف خیابان انقلاب</p>
|
||||
<div class="activity-rate">
|
||||
<span class="badge"><i class="fal fa-star"></i> 5.0</span>
|
||||
<span class="activity-rate-type">عالی</span>
|
||||
<span class="activity-rate-review">(2.5k بررسی)</span>
|
||||
</div>
|
||||
<div class="activity-bottom">
|
||||
<div class="activity-price">
|
||||
<span class="activity-price-amount">30 تومان</span>
|
||||
</div>
|
||||
<div class="activity-text-btn">
|
||||
<a href="#">نمایش جزئیات <i class="fas fa-arrow-left"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="activity-item wow fadeInUp" data-wow-duration="1s" data-wow-delay=".75s">
|
||||
<div class="activity-img">
|
||||
<span class="badge">ویژه</span>
|
||||
<img src="assets/img/activity/03.jpg" alt>
|
||||
<a href="#" class="add-wishlist"><i class="far fa-heart"></i></a>
|
||||
</div>
|
||||
<div class="activity-content">
|
||||
<h4 class="activity-title"><a href="#">کوهنوردی برفی</a></h4>
|
||||
<p><i class="far fa-location-dot"></i> 25/B جاده میلف خیابان انقلاب</p>
|
||||
<div class="activity-rate">
|
||||
<span class="badge"><i class="fal fa-star"></i> 5.0</span>
|
||||
<span class="activity-rate-type">عالی</span>
|
||||
<span class="activity-rate-review">(2.5k بررسی)</span>
|
||||
</div>
|
||||
<div class="activity-bottom">
|
||||
<div class="activity-price">
|
||||
<span class="activity-price-amount">30 تومان</span>
|
||||
</div>
|
||||
<div class="activity-text-btn">
|
||||
<a href="#">نمایش جزئیات <i class="fas fa-arrow-left"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="activity-item wow fadeInUp" data-wow-duration="1s" data-wow-delay="1s">
|
||||
<div class="activity-img">
|
||||
<img src="assets/img/activity/04.jpg" alt>
|
||||
<a href="#" class="add-wishlist"><i class="far fa-heart"></i></a>
|
||||
</div>
|
||||
<div class="activity-content">
|
||||
<h4 class="activity-title"><a href="#">کوهنوردی برفی</a></h4>
|
||||
<p><i class="far fa-location-dot"></i> 25/B جاده میلف خیابان انقلاب</p>
|
||||
<div class="activity-rate">
|
||||
<span class="badge"><i class="fal fa-star"></i> 5.0</span>
|
||||
<span class="activity-rate-type">عالی</span>
|
||||
<span class="activity-rate-review">(2.5k بررسی)</span>
|
||||
</div>
|
||||
<div class="activity-bottom">
|
||||
<div class="activity-price">
|
||||
<span class="activity-price-amount">30 تومان</span>
|
||||
</div>
|
||||
<div class="activity-text-btn">
|
||||
<a href="#">نمایش جزئیات <i class="fas fa-arrow-left"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="activity-item wow fadeInUp" data-wow-duration="1s" data-wow-delay=".25s">
|
||||
<div class="activity-img">
|
||||
<img src="assets/img/activity/05.jpg" alt>
|
||||
<a href="#" class="add-wishlist"><i class="far fa-heart"></i></a>
|
||||
</div>
|
||||
<div class="activity-content">
|
||||
<h4 class="activity-title"><a href="#">کوهنوردی برفی</a></h4>
|
||||
<p><i class="far fa-location-dot"></i> 25/B جاده میلف خیابان انقلاب</p>
|
||||
<div class="activity-rate">
|
||||
<span class="badge"><i class="fal fa-star"></i> 5.0</span>
|
||||
<span class="activity-rate-type">عالی</span>
|
||||
<span class="activity-rate-review">(2.5k بررسی)</span>
|
||||
</div>
|
||||
<div class="activity-bottom">
|
||||
<div class="activity-price">
|
||||
<span class="activity-price-amount">30 تومان</span>
|
||||
</div>
|
||||
<div class="activity-text-btn">
|
||||
<a href="#">نمایش جزئیات <i class="fas fa-arrow-left"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="activity-item wow fadeInUp" data-wow-duration="1s" data-wow-delay=".50s">
|
||||
<div class="activity-img">
|
||||
<span class="badge">ویژه</span>
|
||||
<img src="assets/img/activity/06.jpg" alt>
|
||||
<a href="#" class="add-wishlist"><i class="far fa-heart"></i></a>
|
||||
</div>
|
||||
<div class="activity-content">
|
||||
<h4 class="activity-title"><a href="#">کوهنوردی برفی</a></h4>
|
||||
<p><i class="far fa-location-dot"></i> 25/B جاده میلف خیابان انقلاب</p>
|
||||
<div class="activity-rate">
|
||||
<span class="badge"><i class="fal fa-star"></i> 5.0</span>
|
||||
<span class="activity-rate-type">عالی</span>
|
||||
<span class="activity-rate-review">(2.5k بررسی)</span>
|
||||
</div>
|
||||
<div class="activity-bottom">
|
||||
<div class="activity-price">
|
||||
<span class="activity-price-amount">30 تومان</span>
|
||||
</div>
|
||||
<div class="activity-text-btn">
|
||||
<a href="#">نمایش جزئیات <i class="fas fa-arrow-left"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="activity-item wow fadeInUp" data-wow-duration="1s" data-wow-delay=".75s">
|
||||
<div class="activity-img">
|
||||
<span class="badge badge-discount">ذخیره 25%</span>
|
||||
<img src="assets/img/activity/07.jpg" alt>
|
||||
<a href="#" class="add-wishlist"><i class="far fa-heart"></i></a>
|
||||
</div>
|
||||
<div class="activity-content">
|
||||
<h4 class="activity-title"><a href="#">کوهنوردی برفی</a></h4>
|
||||
<p><i class="far fa-location-dot"></i> 25/B جاده میلف خیابان انقلاب</p>
|
||||
<div class="activity-rate">
|
||||
<span class="badge"><i class="fal fa-star"></i> 5.0</span>
|
||||
<span class="activity-rate-type">عالی</span>
|
||||
<span class="activity-rate-review">(2.5k بررسی)</span>
|
||||
</div>
|
||||
<div class="activity-bottom">
|
||||
<div class="activity-price">
|
||||
<span class="activity-price-amount">30 تومان</span>
|
||||
</div>
|
||||
<div class="activity-text-btn">
|
||||
<a href="#">نمایش جزئیات <i class="fas fa-arrow-left"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="activity-item wow fadeInUp" data-wow-duration="1s" data-wow-delay="1s">
|
||||
<div class="activity-img">
|
||||
<img src="assets/img/activity/08.jpg" alt>
|
||||
<a href="#" class="add-wishlist"><i class="far fa-heart"></i></a>
|
||||
</div>
|
||||
<div class="activity-content">
|
||||
<h4 class="activity-title"><a href="#">کوهنوردی برفی</a></h4>
|
||||
<p><i class="far fa-location-dot"></i> 25/B جاده میلف خیابان انقلاب</p>
|
||||
<div class="activity-rate">
|
||||
<span class="badge"><i class="fal fa-star"></i> 5.0</span>
|
||||
<span class="activity-rate-type">عالی</span>
|
||||
<span class="activity-rate-review">(2.5k بررسی)</span>
|
||||
</div>
|
||||
<div class="activity-bottom">
|
||||
<div class="activity-price">
|
||||
<span class="activity-price-amount">30 تومان</span>
|
||||
</div>
|
||||
<div class="activity-text-btn">
|
||||
<a href="#">نمایش جزئیات <i class="fas fa-arrow-left"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@foreach($tours as $card)
|
||||
@include('components.flightcard')
|
||||
@endforeach
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -25,24 +25,10 @@
|
||||
<div class="col-md-5">
|
||||
<div class="header-top-right">
|
||||
<div class="lang">
|
||||
<select name="lang" class="select">
|
||||
<option value="1">انگلیس</option>
|
||||
<option value="2">روس</option>
|
||||
<option value="3">روم</option>
|
||||
<option value="4">فرانس</option>
|
||||
<option value="5">اسپین</option>
|
||||
<option value="6">پرتقال</option>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
<div class="currency">
|
||||
<select name="currency" class="select">
|
||||
<option value="1">دلار</option>
|
||||
<option value="2">یورو</option>
|
||||
<option value="3">ریال</option>
|
||||
<option value="4">ین</option>
|
||||
<option value="5">پوند</option>
|
||||
<option value="6">فرانک</option>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
<div class="account">
|
||||
@if(auth()->check())
|
||||
|
||||
@@ -72,9 +72,7 @@
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown">پرواز</a>
|
||||
<ul class="dropdown-menu fade-down">
|
||||
<li><a class="dropdown-item" href="flight-grid.html">شبکه پرواز</a></li>
|
||||
<li><a class="dropdown-item" href="flight-list.html">لیست پرواز</a></li>
|
||||
<li><a class="dropdown-item" href="flight-full-width.html">پرواز با عرض کامل</a>
|
||||
<li><a class="dropdown-item" href="flight-full-width.html">یست پرواز</a>
|
||||
</li>
|
||||
<li><a class="dropdown-item" href="flight-single.html">اطلاعات پرواز</a></li>
|
||||
<li><a class="dropdown-item" href="flight-booking.html">رزرو پرواز</a></li>
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\IndexController;
|
||||
use App\Http\Controllers\TourController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::get('/' , [IndexController::class , 'index'])->name('index');
|
||||
|
||||
|
||||
Route::prefix('tour')->controller(TourController::class)->name('tour.')->group(function (){
|
||||
Route::get('show/{tour}' , 'show')->name('show');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user