Compare commits

..

3 Commits

39 changed files with 582 additions and 40 deletions

View File

@@ -7,6 +7,7 @@ use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Form;
use Filament\Pages\Page;
use Filament\Pages\SettingsPage;
@@ -18,8 +19,6 @@ class HomePageSettings extends SettingsPage
protected static string $settings = HomeSettings::class;
protected static string $view = 'filament.pages.home-page-settings';
public function form(Form $form): Form
{
return $form
@@ -49,9 +48,82 @@ class HomePageSettings extends SettingsPage
->url(),
])->columns(2),
]),
Section::make('About Section')
->description('Manage the about section content on the homepage.')
->icon('heroicon-o-building-office-2')
->schema([
TextInput::make('about_subtitle')
->label('About Subtitle')
->maxLength(100),
TextInput::make('about_header')
->label('About Header')
->required()
->maxLength(255),
Textarea::make('about_paragraph')
->label('About Paragraph')
->rows(5)
->maxLength(65535),
Grid::make()->schema([
TextInput::make('about_projects_text')
->label('Projects Text')
->maxLength(100),
TextInput::make('about_projects_number')
->label('Projects Number')
->numeric(),
])->columns(2),
Grid::make()->schema([
TextInput::make('about_members_text')
->label('Members Text')
->maxLength(100),
TextInput::make('about_members_number')
->label('Members Number')
->numeric(),
])->columns(2),
Grid::make()->schema([
TextInput::make('about_reviews_text')
->label('Reviews Text')
->maxLength(100),
TextInput::make('about_reviews_number')
->label('Reviews Number')
->numeric(),
])->columns(2),
Grid::make()->schema([
TextInput::make('about_button_text')
->label('About Button Text')
->maxLength(50),
TextInput::make('about_button_url')
->label('About Button URL')
->maxLength(255)
->url(),
])->columns(2),
Grid::make()->schema([
FileUpload::make('about_image_one')
->label('About Image One (245x410)')
->image()
->maxSize(2048)
->disk('public')
->directory('about-images'),
FileUpload::make('about_image_two')
->label('About Image Two (375x391)')
->image()
->maxSize(2048)
->disk('public')
->directory('about-images'),
])->columns(2),
]),
Section::make('Background Video')
->description('Upload or link the background video for the hero section.')
->icon('heroicon-o-video')
->icon('heroicon-o-camera')
->schema([
TextInput::make('bg_video')
->label('Background Video URL')

View File

@@ -2,7 +2,23 @@
namespace App\Http\Controllers;
use App\Models\Career;
use Illuminate\Http\Request;
class CareersPageController extends Controller
{
//
public function index()
{
return view('web.pages.careers.index');
}
public function store(Request $request)
{
dd($request->all());
}
public function show(Career $career)
{
return view('web.pages.careers.show', compact('career'));
}
}

View File

@@ -2,7 +2,17 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ContactPageController extends Controller
{
//
public function index()
{
return view('web.pages.contact.index');
}
public function store(Request $request)
{
dd($request->all());
}
}

View File

@@ -2,10 +2,16 @@
namespace App\Http\Controllers;
use App\Models\Brand;
use App\Settings\HomeSettings;
class HomePageController extends Controller
{
public function index()
{
return view('web.pages.home.index');
$brands = Brand::query()->get(['id', 'image']);
$homeSettings = app(HomeSettings::class);
return view('web.pages.home.index', compact('homeSettings', 'brands'));
}
}

View File

@@ -2,7 +2,23 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Internship;
class InternshipsPageController extends Controller
{
//
public function index()
{
return view('web.pages.internships.index');
}
public function store(Request $request)
{
dd($request->all());
}
public function show(Internship $internship)
{
return view('web.pages.internships.show', compact('internship'));
}
}

View File

@@ -4,5 +4,13 @@ namespace App\Http\Controllers;
class LegalPageController extends Controller
{
//
public function terms()
{
return view('web.pages.legal.terms');
}
public function privacy()
{
return view('web.pages.legal.privacy');
}
}

View File

@@ -2,7 +2,17 @@
namespace App\Http\Controllers;
use App\Models\News;
class NewsPageController extends Controller
{
//
public function index()
{
return view('web.pages.news.index');
}
public function show(News $news)
{
return view('web.pages.news.show', compact('news'));
}
}

View File

@@ -2,7 +2,17 @@
namespace App\Http\Controllers;
use App\Models\Solution;
class OurSolutionPageController extends Controller
{
//
public function index()
{
return view('web.pages.our-solutions.index');
}
public function show(Solution $solution)
{
return view('web.pages.our-solutions.show', compact('solution'));
}
}

View File

@@ -2,7 +2,17 @@
namespace App\Http\Controllers;
use App\Models\Story;
class StoryPageController extends Controller
{
//
public function index()
{
return view('web.pages.stories.index');
}
public function show(Story $story)
{
return view('web.pages.stories.show', compact('story'));
}
}

15
app/Models/Career.php Normal file
View File

@@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Career extends Model
{
protected $fillable = [
'title',
'description',
'location',
'salary',
];
}

10
app/Models/Internship.php Normal file
View File

@@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Internship extends Model
{
//
}

18
app/Models/News.php Normal file
View File

@@ -0,0 +1,18 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class News extends Model
{
use HasFactory;
protected $fillable = [
'title',
'slug',
'content',
'published_at',
];
}

17
app/Models/Solution.php Normal file
View File

@@ -0,0 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Solution extends Model
{
use HasFactory;
protected $fillable = [
'title',
'description',
'slug',
];
}

18
app/Models/Story.php Normal file
View File

@@ -0,0 +1,18 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Story extends Model
{
use HasFactory;
protected $fillable = [
'title',
'slug',
'content',
'published_at',
];
}

View File

@@ -2,11 +2,11 @@
namespace App\Providers;
use App\Filament\CMS\Home\HomeSettings;
use App\Models\Brand;
use App\Settings\SiteSettings;
use App\Settings\SiteSocialSettings;
use Illuminate\Database\Eloquent\Model;
use App\Settings\HomeSettings;
use Illuminate\Support\Facades\View as ViewFacade;
use Illuminate\Support\ServiceProvider;
use Illuminate\View\View;
@@ -42,12 +42,5 @@ class AppServiceProvider extends ServiceProvider
$view->with('settings', app(SiteSettings::class));
$view->with('socialMedia', app(SiteSocialSettings::class));
});
ViewFacade::composer('web.pages.home.index', function (View $view) {
$brands = Brand::query()->get(['id', 'image']);
$view->with('homepage', app(HomeSettings::class));
$view->with('brands', $brands);
});
}
}

View File

@@ -18,6 +18,32 @@ class HomeSettings extends Settings
public string $hero_link_button_text;
public string $about_subtitle;
public string $about_header;
public string $about_paragraph;
public int $about_projects_number;
public string $about_projects_text;
public int $about_members_number;
public string $about_members_text;
public int $about_reviews_number;
public string $about_reviews_text;
public string $about_button_text;
public string $about_button_url;
public string $about_image_one;
public string $about_image_two;
public static function group(): string
{
return 'cms_homepage';

View File

@@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('solutions', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('solutions');
}
};

View File

@@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('news', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('news');
}
};

View File

@@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('stories', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('stories');
}
};

View File

@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('careers', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('description');
$table->string('location');
$table->string('salary')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('careers');
}
};

View File

@@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('internships', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('internships');
}
};

View File

@@ -14,6 +14,7 @@ class DatabaseSeeder extends Seeder
public function run(): void
{
$this->call([
UsersTableSeeder::class,
BrandTableSeeder::class,
]);
}

View File

@@ -0,0 +1,21 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\User;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
User::create([
'name' => 'nurmuhammet',
'email' => 'nurmuhammet@mail.com',
'password' => bcrypt('payload10'),
]);
}
}

View File

@@ -6,11 +6,25 @@ return new class extends SettingsMigration
{
public function up(): void
{
$this->migrator->add('cms_homepage.bg_video', '/web/assets/video/banner.mp4');
$this->migrator->add('cms_homepage.bg_video', 'http://127.0.0.1:8000/web/assets/video/banner.mp4');
$this->migrator->add('cms_homepage.hero_badge_text', 'Expert Solutions');
$this->migrator->add('cms_homepage.hero_header', 'Shaping Future');
$this->migrator->add('cms_homepage.hero_sub_header', 'Architecture');
$this->migrator->add('cms_homepage.hero_link_button_url', 'http://gujurly.com');
$this->migrator->add('cms_homepage.hero_link_button_text', 'Start today');
$this->migrator->add('cms_homepage.about_subtitle', 'About Our Company');
$this->migrator->add('cms_homepage.about_header', 'Leading Construction Innovation With Digital Consulting');
$this->migrator->add('cms_homepage.about_paragraph', 'We focus on optimizing efficiency, managing risks, and delivering innovative solutions tailored to meet unique project needs and enhance productivity.');
$this->migrator->add('cms_homepage.about_projects_number', 678);
$this->migrator->add('cms_homepage.about_projects_text', 'Complete Projects');
$this->migrator->add('cms_homepage.about_members_number', 120);
$this->migrator->add('cms_homepage.about_members_text', 'Team Members');
$this->migrator->add('cms_homepage.about_reviews_number', 635);
$this->migrator->add('cms_homepage.about_reviews_text', 'Client Reviews');
$this->migrator->add('cms_homepage.about_button_text', 'Our Story');
$this->migrator->add('cms_homepage.about_button_url', 'http://gujurly.com');
$this->migrator->add('cms_homepage.about_image_one', 'http://127.0.0.1:8000/web/assets/img/about/about-5.jpg');
$this->migrator->add('cms_homepage.about_image_two', 'http://127.0.0.1:8000/web/assets/img/about/about-6.jpg');
}
};

View File

@@ -1,3 +0,0 @@
<x-filament-panels::page>
</x-filament-panels::page>

View File

@@ -0,0 +1,114 @@
@extends('web.layouts.app')
@section('content')
<!-- Breadcrumb Area Start -->
<div class="breadcrumb__area" style="background-image: url('assets/img/page/breadcrumb.jpg');">
<div class="container">
<div class="row">
<div class="col-xl-12">
<div class="breadcrumb__area-content">
<h2>Contact Us</h2>
<ul>
<li><a href="index.html">Home</a><i class="fa-regular fa-angle-right"></i></li>
<li>Contact Us</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- Breadcrumb Area End -->
<!-- Contact Area Start -->
<div class="contact__area section-padding">
<div class="container">
<div class="row">
<div class="col-lg-5 lg-mb-25">
<div class="contact__area-left mr-40 xl-mr-0">
<div class="title">
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">Contact Us</span>
<h2 class="title_split_anim mb-25">Get In Touch</h2>
<p class="wow fadeInUp" data-wow-delay=".4s">Were here to assist you! Please reach out with any questions, feedback, or project inquiries.</p>
</div>
<div class="contact__area-left-contact wow fadeInUp" data-wow-delay=".7s">
<div class="contact__area-left-contact-item">
<div class="contact__area-left-contact-item-icon">
<i class="flaticon-phone"></i>
</div>
<div class="contact__area-left-contact-item-content">
<span>Phone:</span>
<h6><a href="tel:+123 (256) 568 58">+123 (256) 568 58</a></h6>
</div>
</div>
<div class="contact__area-left-contact-item">
<div class="contact__area-left-contact-item-icon">
<i class="flaticon-email-3"></i>
</div>
<div class="contact__area-left-contact-item-content">
<span>Email Address:</span>
<h6><a href="mailto:needhelp@gmail.com">needhelp@gmail.com</a></h6>
</div>
</div>
<div class="contact__area-left-contact-item">
<div class="contact__area-left-contact-item-icon">
<i class="flaticon-location-1"></i>
</div>
<div class="contact__area-left-contact-item-content">
<span>Location:</span>
<h6><a href="https://google.com/maps" target="_blank">2464 Royal Ln. Mesa, New Jersey 45463</a></h6>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-7 wow fadeInRight" data-wow-delay=".4s">
<div class="contact__area-form">
<h4>Send Message</h4>
<form action="#">
<div class="row">
<div class="col-md-6 mb-25">
<div class="contact__form-area-item">
<input type="text" name="name" placeholder="Full Name" required="required">
</div>
</div>
<div class="col-md-6 md-mb-25">
<div class="contact__form-area-item">
<input type="email" name="email" placeholder="Email Address" required="required">
</div>
</div>
<div class="col-md-12 mb-25">
<div class="contact__form-area-item">
<input type="text" name="subject" placeholder="Subject">
</div>
</div>
<div class="col-md-12 mb-25">
<div class="contact__form-area-item">
<textarea name="message" placeholder="Message"></textarea>
</div>
</div>
<div class="col-md-12">
<div class="contact__form-area-item">
<button class="build_button" type="submit">Submit Message <i class="flaticon-right-up"></i></button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- Contact Area End -->
<!-- Map Area Start -->
<div class="map section-padding pt-0">
<div class="container">
<div class="row">
<div class="col-xl-12 wow fadeInUp" data-wow-delay=".4s">
<div class="map-area">
<iframe loading="lazy" src="https://maps.google.com/maps?q=London%20Eye%2C%20London%2C%20United%20Kingdom&amp;t=m&amp;z=10&amp;output=embed&amp;iwloc=near" title="London Eye, London, United Kingdom" aria-label="London Eye, London, United Kingdom"></iframe>
</div>
</div>
</div>
</div>
</div>
<!-- Map Area End -->
@stop

View File

@@ -5,7 +5,7 @@
<div class="banner__four">
{{-- BG video --}}
<div class="bg-video">
<video autoplay muted loop id="myVideo"><source src="{{ $homepage->bg_video }}" type="video/mp4"></video>
<video autoplay muted loop id="myVideo"><source src="{{ $homeSettings->bg_video }}" type="video/mp4"></video>
</div>
{{-- Hero --}}
@@ -13,13 +13,13 @@
<div class="row">
<div class="col-xl-12">
<div class="banner__four-content">
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">{{ $homepage->hero_badge_text }}</span>
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">{{ $homeSettings->hero_badge_text }}</span>
<div class="title_split_anim">
<h1>{{ $homepage->hero_header }}</h1>
<h2>{{ $homepage->hero_sub_header }}</h2>
<h1>{{ $homeSettings->hero_header }}</h1>
<h2>{{ $homeSettings->hero_sub_header }}</h2>
</div>
<div class="item_bounce">
<a class="build_button" href="{{ $homepage->hero_link_button_url }}">{{ $homepage->hero_link_button_text }}<i class="flaticon-right-up"></i></a>
<a class="build_button" href="{{ $homeSettings->hero_link_button_url }}">{{ $homeSettings->hero_link_button_text }}<i class="flaticon-right-up"></i></a>
</div>
<a href="#"><img class="h_rotate" src="/web/assets/img/shape/content.png" alt="image"></a>
</div>
@@ -65,16 +65,16 @@
<div class="row al-center">
<div class="col-lg-3 lg-mb-25">
<div class="about__four-left wow img_top_animation">
<img src="/web/assets/img/about/about-5.jpg" alt="image">
<img src="/storage/{{ $homeSettings->about_image_one }}" alt="image">
</div>
</div>
<div class="col-lg-9">
<div class="about__four-title">
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">About Our Company</span>
<h2 class="title_split_anim mb-20">Leading Construction Innovation With Digital Consulting</h2>
<p class="wow fadeInUp" data-wow-delay=".4s">We focus on optimizing efficiency, managing risks, and delivering innovative solutions tailored to meet unique project needs and enhance productivity.</p>
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">{{ $homeSettings->about_subtitle }}</span>
<h2 class="title_split_anim mb-20">{{ $homeSettings->about_header }}</h2>
<p class="wow fadeInUp" data-wow-delay=".4s">{{ $homeSettings->about_paragraph }}</p>
<div class="item_bounce">
<a class="build_button mt-25" href="history.html">Our Story<i class="flaticon-right-up"></i></a>
<a class="build_button mt-25" href="{{ $homeSettings->about_button_url }}">{{ $homeSettings->about_button_text }}<i class="flaticon-right-up"></i></a>
</div>
</div>
</div>
@@ -86,24 +86,24 @@
<div class="col-md-4 col-sm-6 wow fadeInUp" data-wow-delay=".4s">
<div class="about__four-counter-item">
<div class="box">
<h2><span class="counter">678</span>+</h2>
<span>Complete Projects</span>
<h2><span class="counter">{{ $homeSettings->about_projects_number }}</span>+</h2>
<span>{{ $homeSettings->about_projects_text }}</span>
</div>
</div>
</div>
<div class="col-md-4 col-sm-6 wow fadeInUp" data-wow-delay=".7s">
<div class="about__four-counter-item borders t-center md-t-left">
<div class="box">
<h2><span class="counter">120</span>+</h2>
<span>Team Members</span>
<h2><span class="counter">{{ $homeSettings->about_members_number }}</span>+</h2>
<span>{{ $homeSettings->about_members_text }}</span>
</div>
</div>
</div>
<div class="col-md-4 col-sm-6 wow fadeInUp" data-wow-delay="1s">
<div class="about__four-counter-item t-right md-t-left">
<div class="box">
<h2><span class="counter">635</span>+</h2>
<span>Client Reviews</span>
<h2><span class="counter">{{ $homeSettings->about_reviews_number }}</span>+</h2>
<span>{{ $homeSettings->about_reviews_text }}</span>
</div>
</div>
</div>
@@ -112,7 +112,7 @@
</div>
<div class="col-lg-4 lg-mt-25">
<div class="about__four-right t-right wow img_right_animation">
<img src="/web/assets/img/about/about-6.jpg" alt="image">
<img src="/storage/{{ $homeSettings->about_image_two }}" alt="image">
</div>
</div>
</div>

View File

@@ -0,0 +1 @@
w