Compare commits
8 Commits
b405cad6fe
...
189cb53856
| Author | SHA1 | Date | |
|---|---|---|---|
| 189cb53856 | |||
| d316f392bc | |||
| 2d1c7ea4f9 | |||
| bae4204d44 | |||
| 1ceccb0d79 | |||
| ed369a5bf2 | |||
| 6d564bb285 | |||
| fb4479929d |
@@ -3,13 +3,13 @@
|
||||
namespace App\Filament\Pages;
|
||||
|
||||
use App\Settings\HomeSettings;
|
||||
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\Components\Grid;
|
||||
use Filament\Forms\Components\Repeater;
|
||||
use Filament\Forms\Components\Section;
|
||||
use Filament\Forms\Components\Textarea;
|
||||
use Filament\Forms\Components\TextInput;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Pages\Page;
|
||||
use Filament\Pages\SettingsPage;
|
||||
use Illuminate\Contracts\Support\Htmlable;
|
||||
|
||||
@@ -29,7 +29,8 @@ class HomePageSettings extends SettingsPage
|
||||
->schema([
|
||||
TextInput::make('hero_badge_text')
|
||||
->label('Hero Badge Text')
|
||||
->maxLength(50),
|
||||
->maxLength(50)
|
||||
->required(),
|
||||
TextInput::make('hero_header')
|
||||
->label('Hero Header')
|
||||
->required()
|
||||
@@ -37,15 +38,18 @@ class HomePageSettings extends SettingsPage
|
||||
Textarea::make('hero_sub_header')
|
||||
->label('Hero Sub Header')
|
||||
->rows(3)
|
||||
->maxLength(255),
|
||||
->maxLength(255)
|
||||
->required(),
|
||||
Grid::make()->schema([
|
||||
TextInput::make('hero_link_button_text')
|
||||
->label('Hero Button Text')
|
||||
->maxLength(50),
|
||||
->maxLength(50)
|
||||
->required(),
|
||||
TextInput::make('hero_link_button_url')
|
||||
->label('Hero Button URL')
|
||||
->maxLength(255)
|
||||
->url(),
|
||||
->url()
|
||||
->required(),
|
||||
])->columns(2),
|
||||
]),
|
||||
|
||||
@@ -55,7 +59,8 @@ class HomePageSettings extends SettingsPage
|
||||
->schema([
|
||||
TextInput::make('about_subtitle')
|
||||
->label('About Subtitle')
|
||||
->maxLength(100),
|
||||
->maxLength(100)
|
||||
->required(),
|
||||
TextInput::make('about_header')
|
||||
->label('About Header')
|
||||
->required()
|
||||
@@ -63,46 +68,55 @@ class HomePageSettings extends SettingsPage
|
||||
Textarea::make('about_paragraph')
|
||||
->label('About Paragraph')
|
||||
->rows(5)
|
||||
->maxLength(65535),
|
||||
->maxLength(65535)
|
||||
->required(),
|
||||
Grid::make()->schema([
|
||||
TextInput::make('about_projects_text')
|
||||
->label('Projects Text')
|
||||
->maxLength(100),
|
||||
->maxLength(100)
|
||||
->required(),
|
||||
|
||||
TextInput::make('about_projects_number')
|
||||
->label('Projects Number')
|
||||
->numeric(),
|
||||
|
||||
->numeric()
|
||||
->required(),
|
||||
|
||||
])->columns(2),
|
||||
Grid::make()->schema([
|
||||
TextInput::make('about_members_text')
|
||||
->label('Members Text')
|
||||
->maxLength(100),
|
||||
|
||||
->maxLength(100)
|
||||
->required(),
|
||||
|
||||
TextInput::make('about_members_number')
|
||||
->label('Members Number')
|
||||
->numeric(),
|
||||
|
||||
->numeric()
|
||||
->required(),
|
||||
|
||||
])->columns(2),
|
||||
Grid::make()->schema([
|
||||
|
||||
TextInput::make('about_reviews_text')
|
||||
->label('Reviews Text')
|
||||
->maxLength(100),
|
||||
->maxLength(100)
|
||||
->required(),
|
||||
|
||||
TextInput::make('about_reviews_number')
|
||||
->label('Reviews Number')
|
||||
->numeric(),
|
||||
|
||||
->numeric()
|
||||
->required(),
|
||||
|
||||
])->columns(2),
|
||||
Grid::make()->schema([
|
||||
TextInput::make('about_button_text')
|
||||
->label('About Button Text')
|
||||
->maxLength(50),
|
||||
->maxLength(50)
|
||||
->required(),
|
||||
TextInput::make('about_button_url')
|
||||
->label('About Button URL')
|
||||
->maxLength(255)
|
||||
->url(),
|
||||
->url()
|
||||
->required(),
|
||||
])->columns(2),
|
||||
|
||||
Grid::make()->schema([
|
||||
@@ -111,13 +125,15 @@ class HomePageSettings extends SettingsPage
|
||||
->image()
|
||||
->maxSize(2048)
|
||||
->disk('public')
|
||||
->directory('about-images'),
|
||||
->directory('about-images')
|
||||
->required(),
|
||||
FileUpload::make('about_image_two')
|
||||
->label('About Image Two (375x391)')
|
||||
->image()
|
||||
->maxSize(2048)
|
||||
->disk('public')
|
||||
->directory('about-images'),
|
||||
->directory('about-images')
|
||||
->required(),
|
||||
])->columns(2),
|
||||
]),
|
||||
|
||||
@@ -125,10 +141,126 @@ class HomePageSettings extends SettingsPage
|
||||
->description('Upload or link the background video for the hero section.')
|
||||
->icon('heroicon-o-camera')
|
||||
->schema([
|
||||
TextInput::make('bg_video')
|
||||
->label('Background Video URL')
|
||||
->maxLength(255)
|
||||
->url(),
|
||||
FileUpload::make('bg_video')
|
||||
->label('Background Video')
|
||||
->acceptedFileTypes(['video/mp4', 'video/webm', 'video/ogg'])
|
||||
->maxSize(51200) // 50MB
|
||||
->disk('public')
|
||||
->directory('homepage-videos')
|
||||
->required(),
|
||||
]),
|
||||
|
||||
Section::make('Industry Area')
|
||||
->description('Manage the content for the industry area section.')
|
||||
->icon('heroicon-o-building-office')
|
||||
->schema([
|
||||
TextInput::make('industry_subtitle')
|
||||
->label('Subtitle')
|
||||
->maxLength(100)
|
||||
->required(),
|
||||
TextInput::make('industry_header')
|
||||
->label('Header')
|
||||
->required()
|
||||
->maxLength(255),
|
||||
Textarea::make('industry_paragraph')
|
||||
->label('Paragraph')
|
||||
->rows(3)
|
||||
->maxLength(65535)
|
||||
->required(),
|
||||
Grid::make()->schema([
|
||||
TextInput::make('industry_button_text')
|
||||
->label('Button Text')
|
||||
->maxLength(50)
|
||||
->required(),
|
||||
TextInput::make('industry_button_url')
|
||||
->label('Button URL')
|
||||
->maxLength(255)
|
||||
->url()
|
||||
->required(),
|
||||
])->columns(2),
|
||||
FileUpload::make('industry_image_one')
|
||||
->label('Industry Image One (520x400)')
|
||||
->image()
|
||||
->maxSize(2048)
|
||||
->disk('public')
|
||||
->directory('industry-images')
|
||||
->required(),
|
||||
Repeater::make('industry_items')
|
||||
->label('Industry Items')
|
||||
->schema([
|
||||
FileUpload::make('icon')
|
||||
->label('Icon (SVG)')
|
||||
->directory('industry-icons')
|
||||
->acceptedFileTypes(['image/svg+xml'])
|
||||
->maxSize(1024) // 1MB
|
||||
->required(),
|
||||
TextInput::make('title')
|
||||
->label('Title')
|
||||
->required()
|
||||
->maxLength(100),
|
||||
Textarea::make('description')
|
||||
->label('Description')
|
||||
->rows(2)
|
||||
->maxLength(255)
|
||||
->required(),
|
||||
])
|
||||
->columns(2)
|
||||
->minItems(1)
|
||||
->maxItems(5)
|
||||
->defaultItems(2)
|
||||
->reorderable()
|
||||
->collapsible(),
|
||||
]),
|
||||
|
||||
Section::make('Text Slide Area')
|
||||
->description('Manage the content for the text slide area section.')
|
||||
->icon('heroicon-o-chat-bubble-bottom-center-text')
|
||||
->schema([
|
||||
TextInput::make('text_slide_subtitle')
|
||||
->label('Subtitle')
|
||||
->maxLength(100)
|
||||
->required(),
|
||||
TextInput::make('text_slide_header')
|
||||
->label('Header')
|
||||
->required()
|
||||
->maxLength(255),
|
||||
FileUpload::make('text_slide_image')
|
||||
->label('Text Slide Image (540x350)')
|
||||
->image()
|
||||
->maxSize(2048)
|
||||
->disk('public')
|
||||
->directory('text-slide-images')
|
||||
->required(),
|
||||
TextInput::make('text_slide_counter_number')
|
||||
->label('Counter Number')
|
||||
->numeric()
|
||||
->default(29)
|
||||
->required(),
|
||||
Repeater::make('text_slide_items')
|
||||
->label('Text Slide Items')
|
||||
->schema([
|
||||
FileUpload::make('icon')
|
||||
->label('Icon (SVG)')
|
||||
->directory('text-slide-icons')
|
||||
->acceptedFileTypes(['image/svg+xml'])
|
||||
->maxSize(1024) // 1MB
|
||||
->required(),
|
||||
TextInput::make('link')
|
||||
->label('Link')
|
||||
->required()
|
||||
->url()
|
||||
->maxLength(255),
|
||||
TextInput::make('text')
|
||||
->label('Text')
|
||||
->required()
|
||||
->maxLength(100),
|
||||
])
|
||||
->columns(3)
|
||||
->minItems(1)
|
||||
->maxItems(10)
|
||||
->defaultItems(6)
|
||||
->reorderable()
|
||||
->collapsible(),
|
||||
]),
|
||||
])
|
||||
->columns(1)
|
||||
|
||||
109
app/Filament/Pages/ManagePortfolio.php
Normal file
109
app/Filament/Pages/ManagePortfolio.php
Normal file
@@ -0,0 +1,109 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Pages;
|
||||
|
||||
use App\Settings\PortfolioSettings;
|
||||
use Filament\Forms\Components\FileUpload;
|
||||
use Filament\Forms\Components\Grid;
|
||||
use Filament\Forms\Components\Repeater;
|
||||
use Filament\Forms\Components\Section;
|
||||
use Filament\Forms\Components\TextInput;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Pages\SettingsPage;
|
||||
use Illuminate\Contracts\Support\Htmlable;
|
||||
|
||||
class ManagePortfolio extends SettingsPage
|
||||
{
|
||||
protected static ?string $navigationIcon = 'heroicon-o-briefcase';
|
||||
|
||||
protected static string $settings = PortfolioSettings::class;
|
||||
|
||||
public function form(Form $form): Form
|
||||
{
|
||||
return $form
|
||||
->schema([
|
||||
Section::make('Portfolio Section Content')
|
||||
->description('Manage the main content for the portfolio section.')
|
||||
->icon('heroicon-o-document-text')
|
||||
->schema([
|
||||
TextInput::make('portfolio_header')
|
||||
->label('Header')
|
||||
->required()
|
||||
->maxLength(255),
|
||||
Grid::make()->schema([
|
||||
TextInput::make('portfolio_button_text')
|
||||
->label('Button Text')
|
||||
->required()
|
||||
->maxLength(50),
|
||||
TextInput::make('portfolio_button_url')
|
||||
->label('Button URL')
|
||||
->required()
|
||||
->maxLength(255)
|
||||
->url(),
|
||||
])->columns(2),
|
||||
]),
|
||||
Section::make('Portfolio Items')
|
||||
->description('Manage individual portfolio items.')
|
||||
->icon('heroicon-o-photo')
|
||||
->schema([
|
||||
Repeater::make('portfolio_items')
|
||||
->label('Portfolio Items')
|
||||
->schema([
|
||||
FileUpload::make('image')
|
||||
->label('Image (700x525)')
|
||||
->image()
|
||||
->maxSize(2048)
|
||||
->disk('public')
|
||||
->directory('portfolio-images')
|
||||
->required(),
|
||||
TextInput::make('category')
|
||||
->label('Category')
|
||||
->required()
|
||||
->maxLength(100),
|
||||
TextInput::make('title')
|
||||
->label('Title')
|
||||
->required()
|
||||
->maxLength(255),
|
||||
TextInput::make('link')
|
||||
->label('Link')
|
||||
->required()
|
||||
->maxLength(255)
|
||||
->url(),
|
||||
])
|
||||
->columns(2)
|
||||
->minItems(1)
|
||||
->maxItems(8)
|
||||
->defaultItems(4)
|
||||
->reorderable()
|
||||
->collapsible(),
|
||||
]),
|
||||
])
|
||||
->columns(1)
|
||||
->statePath('data');
|
||||
}
|
||||
|
||||
public static function getNavigationGroup(): ?string
|
||||
{
|
||||
return __('CMS');
|
||||
}
|
||||
|
||||
public static function getNavigationLabel(): string
|
||||
{
|
||||
return __('Portfolio');
|
||||
}
|
||||
|
||||
public function getTitle(): string|Htmlable
|
||||
{
|
||||
return 'Portfolio';
|
||||
}
|
||||
|
||||
public function getHeading(): string|Htmlable
|
||||
{
|
||||
return 'Edit portfolio section content from here';
|
||||
}
|
||||
|
||||
public function getSubheading(): string|Htmlable|null
|
||||
{
|
||||
return 'Manage the portfolio section content, including items, categories, and titles.';
|
||||
}
|
||||
}
|
||||
@@ -38,10 +38,12 @@ class ManageSite extends SettingsPage
|
||||
->maxLength(100),
|
||||
Forms\Components\TextInput::make('tagline')
|
||||
->label('Site Tagline')
|
||||
->required()
|
||||
->helperText('A short phrase describing your site')
|
||||
->maxLength(150),
|
||||
Forms\Components\Textarea::make('description')
|
||||
->label('Site Description')
|
||||
->required()
|
||||
->helperText('A detailed description of your website')
|
||||
->rows(3)
|
||||
->maxLength(500),
|
||||
@@ -65,13 +67,16 @@ class ManageSite extends SettingsPage
|
||||
->maxLength(100),
|
||||
Forms\Components\TextInput::make('company_phone')
|
||||
->label('Company Phone')
|
||||
->required()
|
||||
->maxLength(20),
|
||||
Forms\Components\TextInput::make('company_phone_2')
|
||||
->label('Company Additional Phone')
|
||||
->required()
|
||||
->maxLength(20),
|
||||
])->columns(2),
|
||||
Forms\Components\Textarea::make('company_address')
|
||||
->label('Company Address')
|
||||
->required()
|
||||
->rows(2)
|
||||
->maxLength(200),
|
||||
]),
|
||||
@@ -94,17 +99,20 @@ class ManageSite extends SettingsPage
|
||||
->schema([
|
||||
Forms\Components\TextInput::make('copyright_text')
|
||||
->label('Copyright Text')
|
||||
->required()
|
||||
->maxLength(200),
|
||||
|
||||
Forms\Components\Grid::make()->schema([
|
||||
Forms\Components\TextInput::make('terms_url')
|
||||
->label('Terms & Conditions URL')
|
||||
->required()
|
||||
->maxLength(100)
|
||||
->prefix(function (Forms\Get $get) {
|
||||
return url('/');
|
||||
}),
|
||||
Forms\Components\TextInput::make('privacy_url')
|
||||
->label('Privacy Policy URL')
|
||||
->required()
|
||||
->maxLength(100)
|
||||
->prefix(function (Forms\Get $get) {
|
||||
return url('/');
|
||||
@@ -120,10 +128,12 @@ class ManageSite extends SettingsPage
|
||||
Forms\Components\Grid::make()->schema([
|
||||
Forms\Components\Textarea::make('custom_404_message')
|
||||
->label('404 Not Found Message')
|
||||
->required()
|
||||
->rows(2)
|
||||
->maxLength(500),
|
||||
Forms\Components\Textarea::make('custom_500_message')
|
||||
->label('500 Server Error Message')
|
||||
->required()
|
||||
->rows(2)
|
||||
->maxLength(500),
|
||||
])->columns(2),
|
||||
|
||||
@@ -28,18 +28,22 @@ class ManageSiteSocialSettings extends SettingsPage
|
||||
Forms\Components\Grid::make()->schema([
|
||||
Forms\Components\TextInput::make('facebook_url')
|
||||
->label('Facebook URL')
|
||||
->required()
|
||||
->prefix('https://')
|
||||
->helperText('e.g., facebook.com/yourpage'),
|
||||
Forms\Components\TextInput::make('twitter_url')
|
||||
->label('Twitter/X URL')
|
||||
->required()
|
||||
->prefix('https://')
|
||||
->helperText('e.g., twitter.com/yourusername'),
|
||||
Forms\Components\TextInput::make('instagram_url')
|
||||
->label('Instagram URL')
|
||||
->required()
|
||||
->prefix('https://')
|
||||
->helperText('e.g., instagram.com/yourusername'),
|
||||
Forms\Components\TextInput::make('linkedin_url')
|
||||
->label('LinkedIn URL')
|
||||
->required()
|
||||
->prefix('https://')
|
||||
->helperText('e.g., linkedin.com/company/yourcompany'),
|
||||
])->columns(2),
|
||||
|
||||
377
app/Filament/Pages/ManageSolutions.php
Normal file
377
app/Filament/Pages/ManageSolutions.php
Normal file
@@ -0,0 +1,377 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Pages;
|
||||
|
||||
use App\Settings\SolutionSettings;
|
||||
use Filament\Forms\Components\FileUpload;
|
||||
use Filament\Forms\Components\Grid;
|
||||
use Filament\Forms\Components\Repeater;
|
||||
use Filament\Forms\Components\Section;
|
||||
use Filament\Forms\Components\Select;
|
||||
use Filament\Forms\Components\TextInput;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Pages\SettingsPage;
|
||||
use Illuminate\Contracts\Support\Htmlable;
|
||||
|
||||
class ManageSolutions extends SettingsPage
|
||||
{
|
||||
protected static ?string $navigationIcon = 'heroicon-o-wrench-screwdriver';
|
||||
|
||||
protected static string $settings = SolutionSettings::class;
|
||||
|
||||
public function form(Form $form): Form
|
||||
{
|
||||
return $form
|
||||
->schema([
|
||||
Section::make('Solutions Section')
|
||||
->description('Manage the content for the solutions section on the homepage.')
|
||||
->icon('heroicon-o-puzzle-piece')
|
||||
->schema([
|
||||
TextInput::make('solutions_subtitle')
|
||||
->label('Subtitle')
|
||||
->required()
|
||||
->maxLength(100),
|
||||
TextInput::make('solutions_header')
|
||||
->label('Header')
|
||||
->required()
|
||||
->maxLength(255),
|
||||
FileUpload::make('solutions_image')
|
||||
->label('Image 1060x453')
|
||||
->image()
|
||||
->directory('solutions')
|
||||
->required(),
|
||||
Grid::make()->schema([
|
||||
TextInput::make('solutions_button_text')
|
||||
->label('Button Text')
|
||||
->required()
|
||||
->maxLength(50),
|
||||
TextInput::make('solutions_button_url')
|
||||
->label('Button URL')
|
||||
->required()
|
||||
->maxLength(255)
|
||||
->url(),
|
||||
])->columns(2),
|
||||
]),
|
||||
Section::make('Solution Items')
|
||||
->description('Manage individual solution items.')
|
||||
->icon('heroicon-o-cube')
|
||||
->schema([
|
||||
Repeater::make('solution_items')
|
||||
->label('Solution Items')
|
||||
->schema([
|
||||
Select::make('icon_class')
|
||||
->label('Icon Class')
|
||||
->searchable()
|
||||
->helperText('e.g., flaticon-it-department. Refer to Flaticon for available icons.')
|
||||
->required()
|
||||
->options(self::getIconOptions()),
|
||||
TextInput::make('title')
|
||||
->label('Title')
|
||||
->required()
|
||||
->maxLength(100),
|
||||
TextInput::make('link')
|
||||
->label('Link')
|
||||
->required()
|
||||
->maxLength(255)
|
||||
->url(),
|
||||
])
|
||||
->columns(3)
|
||||
->minItems(1)
|
||||
->maxItems(6)
|
||||
->defaultItems(3)
|
||||
->grid(2)
|
||||
->reorderable()
|
||||
->collapsible(),
|
||||
]),
|
||||
])
|
||||
->columns(1)
|
||||
->statePath('data');
|
||||
}
|
||||
|
||||
private static function getIconOptions(): array
|
||||
{
|
||||
return [
|
||||
"microsoft-word" => "microsoft-word",
|
||||
"text-box" => "text-box",
|
||||
"document-1" => "document-1",
|
||||
"layers-1" => "layers-1",
|
||||
"folder-1" => "folder-1",
|
||||
"contract" => "contract",
|
||||
"layer" => "layer",
|
||||
"download-pdf" => "download-pdf",
|
||||
"pdf" => "pdf",
|
||||
"cloud-computing" => "cloud-computing",
|
||||
"downloads" => "downloads",
|
||||
"layers" => "layers",
|
||||
"document" => "document",
|
||||
"light-bulb-1" => "light-bulb-1",
|
||||
"idea-2" => "idea-2",
|
||||
"light-bulb" => "light-bulb",
|
||||
"idea-1" => "idea-1",
|
||||
"solution-2" => "solution-2",
|
||||
"lightbulb" => "lightbulb",
|
||||
"menus" => "menus",
|
||||
"support-1" => "support-1",
|
||||
"swipe-left" => "swipe-left",
|
||||
"development" => "development",
|
||||
"domain" => "domain",
|
||||
"pets" => "pets",
|
||||
"diagram" => "diagram",
|
||||
"targeting" => "targeting",
|
||||
"business-intelligence" => "business-intelligence",
|
||||
"menu-6" => "menu-6",
|
||||
"high-quality" => "high-quality",
|
||||
"campaign" => "campaign",
|
||||
"brain" => "brain",
|
||||
"software-application" => "software-application",
|
||||
"apps" => "apps",
|
||||
"wrench-1" => "wrench-1",
|
||||
"social-media-marketing-1" => "social-media-marketing-1",
|
||||
"category-1" => "category-1",
|
||||
"trophy-3" => "trophy-3",
|
||||
"email-marketing" => "email-marketing",
|
||||
"setting" => "setting",
|
||||
"more" => "more",
|
||||
"menu-5" => "menu-5",
|
||||
"menu-4" => "menu-4",
|
||||
"medical" => "medical",
|
||||
"sparkle" => "sparkle",
|
||||
"menu-3" => "menu-3",
|
||||
"technology-2" => "technology-2",
|
||||
"process" => "process",
|
||||
"hearth-1" => "hearth-1",
|
||||
"hearth" => "hearth",
|
||||
"technology-1" => "technology-1",
|
||||
"category" => "category",
|
||||
"customer-care" => "customer-care",
|
||||
"folder" => "folder",
|
||||
"portfolio-1" => "portfolio-1",
|
||||
"report" => "report",
|
||||
"thinking" => "thinking",
|
||||
"fingerprint" => "fingerprint",
|
||||
"clock-2" => "clock-2",
|
||||
"award" => "award",
|
||||
"paper-plane" => "paper-plane",
|
||||
"repair" => "repair",
|
||||
"email-5" => "email-5",
|
||||
"strategy" => "strategy",
|
||||
"portfolio" => "portfolio",
|
||||
"web-design" => "web-design",
|
||||
"email-4" => "email-4",
|
||||
"down-arrow-1" => "down-arrow-1",
|
||||
"location-2" => "location-2",
|
||||
"phone-call-2" => "phone-call-2",
|
||||
"telephone-call" => "telephone-call",
|
||||
"teamwork" => "teamwork",
|
||||
"up-arrow-1" => "up-arrow-1",
|
||||
"menu-2" => "menu-2",
|
||||
"developing" => "developing",
|
||||
"money-bag" => "money-bag",
|
||||
"thumbs-up" => "thumbs-up",
|
||||
"profits" => "profits",
|
||||
"location-1" => "location-1",
|
||||
"help-1" => "help-1",
|
||||
"online-chat" => "online-chat",
|
||||
"worker" => "worker",
|
||||
"smart-home" => "smart-home",
|
||||
"customer-service-1" => "customer-service-1",
|
||||
"internet" => "internet",
|
||||
"cash-flow" => "cash-flow",
|
||||
"monitor" => "monitor",
|
||||
"search-1" => "search-1",
|
||||
"wrench" => "wrench",
|
||||
"coin" => "coin",
|
||||
"cash" => "cash",
|
||||
"analyst" => "analyst",
|
||||
"dashboard-1" => "dashboard-1",
|
||||
"digital" => "digital",
|
||||
"searching" => "searching",
|
||||
"email-3" => "email-3",
|
||||
"star-1" => "star-1",
|
||||
"touch" => "touch",
|
||||
"medal" => "medal",
|
||||
"world-wide-web-1" => "world-wide-web-1",
|
||||
"phone" => "phone",
|
||||
"social-media" => "social-media",
|
||||
"24-7" => "24-7",
|
||||
"hard-work" => "hard-work",
|
||||
"star" => "star",
|
||||
"plus" => "plus",
|
||||
"minus-2" => "minus-2",
|
||||
"menu-1" => "menu-1",
|
||||
"cloud" => "cloud",
|
||||
"handshake" => "handshake",
|
||||
"people" => "people",
|
||||
"ai" => "ai",
|
||||
"save-money" => "save-money",
|
||||
"shopping-online" => "shopping-online",
|
||||
"profit-1" => "profit-1",
|
||||
"blockchain" => "blockchain",
|
||||
"sales" => "sales",
|
||||
"back-in-time" => "back-in-time",
|
||||
"clock-1" => "clock-1",
|
||||
"user-3" => "user-3",
|
||||
"user-2" => "user-2",
|
||||
"pawprint" => "pawprint",
|
||||
"payment-method" => "payment-method",
|
||||
"world-wide-web" => "world-wide-web",
|
||||
"minus-1" => "minus-1",
|
||||
"add-1" => "add-1",
|
||||
"management" => "management",
|
||||
"help" => "help",
|
||||
"chip" => "chip",
|
||||
"artificial-intelligence" => "artificial-intelligence",
|
||||
"group" => "group",
|
||||
"money-1" => "money-1",
|
||||
"conversation" => "conversation",
|
||||
"email-2" => "email-2",
|
||||
"rating" => "rating",
|
||||
"placeholder" => "placeholder",
|
||||
"trophy-2" => "trophy-2",
|
||||
"cpu" => "cpu",
|
||||
"home" => "home",
|
||||
"right-arrow-1" => "right-arrow-1",
|
||||
"like" => "like",
|
||||
"mail" => "mail",
|
||||
"briefcase" => "briefcase",
|
||||
"money" => "money",
|
||||
"up-arrow" => "up-arrow",
|
||||
"trophy-1" => "trophy-1",
|
||||
"user-1" => "user-1",
|
||||
"question" => "question",
|
||||
"team-1" => "team-1",
|
||||
"user" => "user",
|
||||
"email-1" => "email-1",
|
||||
"price-tag-1" => "price-tag-1",
|
||||
"tag" => "tag",
|
||||
"loupe" => "loupe",
|
||||
"right-arrow" => "right-arrow",
|
||||
"left-arrow-1" => "left-arrow-1",
|
||||
"down-arrow" => "down-arrow",
|
||||
"price-tag" => "price-tag",
|
||||
"stars" => "stars",
|
||||
"search" => "search",
|
||||
"phone-call-1" => "phone-call-1",
|
||||
"award-symbol" => "award-symbol",
|
||||
"christmas-stars" => "christmas-stars",
|
||||
"minus" => "minus",
|
||||
"add" => "add",
|
||||
"cancel-1" => "cancel-1",
|
||||
"checked" => "checked",
|
||||
"cyber-security" => "cyber-security",
|
||||
"data-protection" => "data-protection",
|
||||
"hosting" => "hosting",
|
||||
"brand-awareness" => "brand-awareness",
|
||||
"ux-design" => "ux-design",
|
||||
"influencer" => "influencer",
|
||||
"online-advertising" => "online-advertising",
|
||||
"web-management" => "web-management",
|
||||
"seo-1" => "seo-1",
|
||||
"computer" => "computer",
|
||||
"software-development" => "software-development",
|
||||
"coding-1" => "coding-1",
|
||||
"coding" => "coding",
|
||||
"app-development" => "app-development",
|
||||
"content-marketing" => "content-marketing",
|
||||
"social-media-marketing" => "social-media-marketing",
|
||||
"analysis-1" => "analysis-1",
|
||||
"twitter" => "twitter",
|
||||
"repairing" => "repairing",
|
||||
"data-visualization" => "data-visualization",
|
||||
"information-technology" => "information-technology",
|
||||
"statistics-1" => "statistics-1",
|
||||
"exploration" => "exploration",
|
||||
"project-1" => "project-1",
|
||||
"cross-mark" => "cross-mark",
|
||||
"search-analysis" => "search-analysis",
|
||||
"system" => "system",
|
||||
"hashtag-1" => "hashtag-1",
|
||||
"hashtag" => "hashtag",
|
||||
"it-department" => "it-department",
|
||||
"creative" => "creative",
|
||||
"online-analytical" => "online-analytical",
|
||||
"secure-data" => "secure-data",
|
||||
"slash" => "slash",
|
||||
"creative-thinking" => "creative-thinking",
|
||||
"right-up" => "right-up",
|
||||
"dashboard" => "dashboard",
|
||||
"profit" => "profit",
|
||||
"project" => "project",
|
||||
"phone-call" => "phone-call",
|
||||
"seo" => "seo",
|
||||
"prototype" => "prototype",
|
||||
"creative-process" => "creative-process",
|
||||
"growth" => "growth",
|
||||
"technical-support" => "technical-support",
|
||||
"technology" => "technology",
|
||||
"solution-1" => "solution-1",
|
||||
"creative-tools" => "creative-tools",
|
||||
"data-science" => "data-science",
|
||||
"costumer" => "costumer",
|
||||
"cooperation" => "cooperation",
|
||||
"next" => "next",
|
||||
"back" => "back",
|
||||
"brand" => "brand",
|
||||
"right-arrows" => "right-arrows",
|
||||
"idea" => "idea",
|
||||
"design-thinking" => "design-thinking",
|
||||
"check" => "check",
|
||||
"cross" => "cross",
|
||||
"right" => "right",
|
||||
"link" => "link",
|
||||
"server" => "server",
|
||||
"analysis" => "analysis",
|
||||
"support" => "support",
|
||||
"project-management" => "project-management",
|
||||
"networking" => "networking",
|
||||
"team" => "team",
|
||||
"check-mark" => "check-mark",
|
||||
"consultation" => "consultation",
|
||||
"solution" => "solution",
|
||||
"success" => "success",
|
||||
"customer-review" => "customer-review",
|
||||
"select" => "select",
|
||||
"statistics" => "statistics",
|
||||
"machine-learning" => "machine-learning",
|
||||
"vector" => "vector",
|
||||
"trophy" => "trophy",
|
||||
"data" => "data",
|
||||
"clock" => "clock",
|
||||
"cancel" => "cancel",
|
||||
"customer-service" => "customer-service",
|
||||
"digital-marketing" => "digital-marketing",
|
||||
"email" => "email",
|
||||
"stats" => "stats",
|
||||
"menu" => "menu",
|
||||
"location" => "location",
|
||||
"tick" => "tick",
|
||||
"left-arrow" => "left-arrow",
|
||||
"dots-menu" => "dots-menu",
|
||||
];
|
||||
}
|
||||
|
||||
public static function getNavigationGroup(): ?string
|
||||
{
|
||||
return __('CMS');
|
||||
}
|
||||
|
||||
public static function getNavigationLabel(): string
|
||||
{
|
||||
return __('Solutions');
|
||||
}
|
||||
|
||||
public function getTitle(): string|Htmlable
|
||||
{
|
||||
return 'Solutions';
|
||||
}
|
||||
|
||||
public function getHeading(): string|Htmlable
|
||||
{
|
||||
return 'Edit solutions text, icons, and links from here';
|
||||
}
|
||||
|
||||
public function getSubheading(): string|Htmlable|null
|
||||
{
|
||||
return 'Manage the solutions section content, including individual solution items.';
|
||||
}
|
||||
}
|
||||
114
app/Filament/Pages/ManageSuccess.php
Normal file
114
app/Filament/Pages/ManageSuccess.php
Normal file
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Pages;
|
||||
|
||||
use App\Settings\SuccessSettings;
|
||||
use Filament\Forms\Components\Grid;
|
||||
use Filament\Forms\Components\Repeater;
|
||||
use Filament\Forms\Components\Section;
|
||||
use Filament\Forms\Components\Textarea;
|
||||
use Filament\Forms\Components\TextInput;
|
||||
use Filament\Forms\Components\FileUpload;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Pages\SettingsPage;
|
||||
use Illuminate\Contracts\Support\Htmlable;
|
||||
|
||||
class ManageSuccess extends SettingsPage
|
||||
{
|
||||
protected static ?string $navigationIcon = 'heroicon-o-check-circle';
|
||||
|
||||
protected static string $settings = SuccessSettings::class;
|
||||
|
||||
public function form(Form $form): Form
|
||||
{
|
||||
return $form
|
||||
->schema([
|
||||
Section::make('Success Section Content')
|
||||
->description('Manage the main content for the success section.')
|
||||
->icon('heroicon-o-document-text')
|
||||
->schema([
|
||||
TextInput::make('success_subtitle')
|
||||
->label('Subtitle')
|
||||
->required()
|
||||
->maxLength(100),
|
||||
TextInput::make('success_header')
|
||||
->label('Header')
|
||||
->required()
|
||||
->maxLength(255),
|
||||
Textarea::make('success_paragraph')
|
||||
->label('Paragraph')
|
||||
->required()
|
||||
->rows(3)
|
||||
->maxLength(65535),
|
||||
Grid::make()->schema([
|
||||
TextInput::make('success_button_text')
|
||||
->label('Button Text')
|
||||
->required()
|
||||
->maxLength(50),
|
||||
TextInput::make('success_button_url')
|
||||
->label('Button URL')
|
||||
->required()
|
||||
->maxLength(255)
|
||||
->url(),
|
||||
])->columns(2),
|
||||
FileUpload::make('success_image')
|
||||
->label('Image')
|
||||
->directory('cms')
|
||||
->image()
|
||||
->required(),
|
||||
]),
|
||||
Section::make('Skill Items')
|
||||
->description('Manage the skill items with their names and percentages.')
|
||||
->icon('heroicon-o-adjustments-vertical')
|
||||
->schema([
|
||||
Repeater::make('skill_items')
|
||||
->label('Skill Items')
|
||||
->schema([
|
||||
TextInput::make('name')
|
||||
->label('Skill Name')
|
||||
->required()
|
||||
->maxLength(100),
|
||||
TextInput::make('percentage')
|
||||
->label('Percentage')
|
||||
->numeric()
|
||||
->required()
|
||||
->minValue(0)
|
||||
->maxValue(100),
|
||||
])
|
||||
->columns(2)
|
||||
->minItems(1)
|
||||
->maxItems(5)
|
||||
->defaultItems(2)
|
||||
->reorderable()
|
||||
->collapsible(),
|
||||
]),
|
||||
])
|
||||
->columns(1)
|
||||
->statePath('data');
|
||||
}
|
||||
|
||||
public static function getNavigationGroup(): ?string
|
||||
{
|
||||
return __('CMS');
|
||||
}
|
||||
|
||||
public static function getNavigationLabel(): string
|
||||
{
|
||||
return __('Success Section');
|
||||
}
|
||||
|
||||
public function getTitle(): string|Htmlable
|
||||
{
|
||||
return 'Success Section';
|
||||
}
|
||||
|
||||
public function getHeading(): string|Htmlable
|
||||
{
|
||||
return 'Edit success section content from here';
|
||||
}
|
||||
|
||||
public function getSubheading(): string|Htmlable|null
|
||||
{
|
||||
return 'Manage the success section content, including text, button, and skill bars.';
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,7 @@
|
||||
namespace App\Filament\Resources;
|
||||
|
||||
use App\Filament\Resources\BrandResource\Pages;
|
||||
use App\Filament\Resources\BrandResource\RelationManagers;
|
||||
use App\Models\Brand;
|
||||
use Filament\Forms;
|
||||
use Filament\Forms\Components\FileUpload;
|
||||
use Filament\Forms\Components\TextInput;
|
||||
use Filament\Forms\Components\Toggle;
|
||||
@@ -16,8 +14,6 @@ use Filament\Tables\Columns\ImageColumn;
|
||||
use Filament\Tables\Columns\TextColumn;
|
||||
use Filament\Tables\Columns\ToggleColumn;
|
||||
use Filament\Tables\Table;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\SoftDeletingScope;
|
||||
|
||||
class BrandResource extends Resource
|
||||
{
|
||||
@@ -36,12 +32,12 @@ class BrandResource extends Resource
|
||||
FileUpload::make('image')
|
||||
->image()
|
||||
->imageEditor()
|
||||
->rules(['required', 'image',]),
|
||||
->rules(['required', 'image']),
|
||||
|
||||
Toggle::make('active')
|
||||
->label('Is active')
|
||||
->onColor('success')
|
||||
->offColor('danger')
|
||||
->offColor('danger'),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
114
app/Filament/Resources/NewsResource.php
Normal file
114
app/Filament/Resources/NewsResource.php
Normal file
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources;
|
||||
|
||||
use App\Filament\Resources\NewsResource\Pages;
|
||||
use App\Models\News;
|
||||
use Filament\Forms;
|
||||
use Filament\Forms\Components\DateTimePicker;
|
||||
use Filament\Forms\Components\FileUpload;
|
||||
use Filament\Forms\Components\RichEditor;
|
||||
use Filament\Forms\Components\TextInput;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
use Filament\Tables\Columns\ImageColumn;
|
||||
use Filament\Tables\Table;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class NewsResource extends Resource
|
||||
{
|
||||
protected static ?string $model = News::class;
|
||||
|
||||
protected static ?string $navigationIcon = 'heroicon-o-newspaper';
|
||||
|
||||
protected static ?string $navigationGroup = 'CMS';
|
||||
|
||||
public static function form(Form $form): Form
|
||||
{
|
||||
return $form
|
||||
->schema([
|
||||
Forms\Components\Card::make()
|
||||
->schema([
|
||||
TextInput::make('title')
|
||||
->required()
|
||||
->maxLength(255)
|
||||
->reactive()
|
||||
->afterStateUpdated(fn (string $operation, $state, Forms\Set $set) => $operation === 'create' ? $set('slug', Str::slug($state)) : null),
|
||||
TextInput::make('slug')
|
||||
->required()
|
||||
->maxLength(255)
|
||||
->disabled()
|
||||
->dehydrated()
|
||||
->unique(News::class, 'slug', ignoreRecord: true),
|
||||
FileUpload::make('image')
|
||||
->image()
|
||||
->directory('news')
|
||||
->nullable()
|
||||
->columnSpanFull(),
|
||||
RichEditor::make('content')
|
||||
->required()
|
||||
->columnSpanFull(),
|
||||
DateTimePicker::make('published_at')
|
||||
->required()
|
||||
->default(now()),
|
||||
])
|
||||
->columns(2),
|
||||
]);
|
||||
}
|
||||
|
||||
public static function table(Table $table): Table
|
||||
{
|
||||
return $table
|
||||
->columns([
|
||||
ImageColumn::make('image')
|
||||
->square()
|
||||
->toggleable(isToggledHiddenByDefault: true),
|
||||
Tables\Columns\TextColumn::make('title')
|
||||
->searchable()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('slug')
|
||||
->searchable()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('published_at')
|
||||
->dateTime()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('created_at')
|
||||
->dateTime()
|
||||
->sortable()
|
||||
->toggleable(isToggledHiddenByDefault: true),
|
||||
Tables\Columns\TextColumn::make('updated_at')
|
||||
->dateTime()
|
||||
->sortable()
|
||||
->toggleable(isToggledHiddenByDefault: true),
|
||||
])
|
||||
->filters([
|
||||
//
|
||||
])
|
||||
->actions([
|
||||
Tables\Actions\EditAction::make(),
|
||||
Tables\Actions\DeleteAction::make(),
|
||||
])
|
||||
->bulkActions([
|
||||
Tables\Actions\BulkActionGroup::make([
|
||||
Tables\Actions\DeleteBulkAction::make(),
|
||||
]),
|
||||
]);
|
||||
}
|
||||
|
||||
public static function getRelations(): array
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
public static function getPages(): array
|
||||
{
|
||||
return [
|
||||
'index' => Pages\ListNews::route('/'),
|
||||
'create' => Pages\CreateNews::route('/create'),
|
||||
'edit' => Pages\EditNews::route('/{record}/edit'),
|
||||
];
|
||||
}
|
||||
}
|
||||
11
app/Filament/Resources/NewsResource/Pages/CreateNews.php
Normal file
11
app/Filament/Resources/NewsResource/Pages/CreateNews.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources\NewsResource\Pages;
|
||||
|
||||
use App\Filament\Resources\NewsResource;
|
||||
use Filament\Resources\Pages\CreateRecord;
|
||||
|
||||
class CreateNews extends CreateRecord
|
||||
{
|
||||
protected static string $resource = NewsResource::class;
|
||||
}
|
||||
19
app/Filament/Resources/NewsResource/Pages/EditNews.php
Normal file
19
app/Filament/Resources/NewsResource/Pages/EditNews.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources\NewsResource\Pages;
|
||||
|
||||
use App\Filament\Resources\NewsResource;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\EditRecord;
|
||||
|
||||
class EditNews extends EditRecord
|
||||
{
|
||||
protected static string $resource = NewsResource::class;
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
Actions\DeleteAction::make(),
|
||||
];
|
||||
}
|
||||
}
|
||||
19
app/Filament/Resources/NewsResource/Pages/ManageNews.php
Normal file
19
app/Filament/Resources/NewsResource/Pages/ManageNews.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources\NewsResource\Pages;
|
||||
|
||||
use App\Filament\Resources\NewsResource;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\ListRecords;
|
||||
|
||||
class ListNews extends ListRecords
|
||||
{
|
||||
protected static string $resource = NewsResource::class;
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
Actions\CreateAction::make(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class BrandController extends Controller
|
||||
{
|
||||
//
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Internship;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class InternshipsPageController extends Controller
|
||||
{
|
||||
|
||||
@@ -8,7 +8,9 @@ class NewsPageController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('web.pages.news.index');
|
||||
$allNews = News::all();
|
||||
|
||||
return view('web.pages.news.index', compact('allNews'));
|
||||
}
|
||||
|
||||
public function show(News $news)
|
||||
|
||||
@@ -10,8 +10,8 @@ class OurSolutionPageController extends Controller
|
||||
{
|
||||
return view('web.pages.our-solutions.index');
|
||||
}
|
||||
public function show(Solution $solution)
|
||||
|
||||
public function show(Solution $solution)
|
||||
{
|
||||
return view('web.pages.our-solutions.show', compact('solution'));
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ use Illuminate\Support\Facades\Storage;
|
||||
* @property int $id
|
||||
* @property string $name
|
||||
* @property string $image
|
||||
* @property boolean $active
|
||||
* @property bool $active
|
||||
* @property \Illuminate\Support\Facades\Date $created_at
|
||||
* @property \Illuminate\Support\Facades\Date $updated_at
|
||||
*/
|
||||
@@ -17,6 +17,7 @@ class Brand extends Model
|
||||
{
|
||||
/**
|
||||
* Casts
|
||||
*
|
||||
* @var array<string, string>
|
||||
*/
|
||||
protected $casts = [
|
||||
@@ -40,6 +41,6 @@ class Brand extends Model
|
||||
*/
|
||||
public function imageUrl(): string
|
||||
{
|
||||
return url('/storage/' . $this->image);
|
||||
return url('/storage/'.$this->image);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ class News extends Model
|
||||
'title',
|
||||
'slug',
|
||||
'content',
|
||||
'image',
|
||||
'published_at',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,4 +14,4 @@ class Solution extends Model
|
||||
'description',
|
||||
'slug',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,4 +15,4 @@ class Story extends Model
|
||||
'content',
|
||||
'published_at',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,11 +2,9 @@
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
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;
|
||||
|
||||
@@ -44,6 +44,30 @@ class HomeSettings extends Settings
|
||||
|
||||
public string $about_image_two;
|
||||
|
||||
public string $industry_subtitle;
|
||||
|
||||
public string $industry_header;
|
||||
|
||||
public string $industry_paragraph;
|
||||
|
||||
public string $industry_button_text;
|
||||
|
||||
public string $industry_button_url;
|
||||
|
||||
public string $industry_image_one;
|
||||
|
||||
public array $industry_items;
|
||||
|
||||
public string $text_slide_subtitle;
|
||||
|
||||
public string $text_slide_header;
|
||||
|
||||
public string $text_slide_image;
|
||||
|
||||
public int $text_slide_counter_number;
|
||||
|
||||
public array $text_slide_items;
|
||||
|
||||
public static function group(): string
|
||||
{
|
||||
return 'cms_homepage';
|
||||
|
||||
21
app/Settings/PortfolioSettings.php
Normal file
21
app/Settings/PortfolioSettings.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Settings;
|
||||
|
||||
use Spatie\LaravelSettings\Settings;
|
||||
|
||||
class PortfolioSettings extends Settings
|
||||
{
|
||||
public string $portfolio_header;
|
||||
|
||||
public string $portfolio_button_text;
|
||||
|
||||
public string $portfolio_button_url;
|
||||
|
||||
public array $portfolio_items;
|
||||
|
||||
public static function group(): string
|
||||
{
|
||||
return 'cms_portfolio';
|
||||
}
|
||||
}
|
||||
25
app/Settings/SolutionSettings.php
Normal file
25
app/Settings/SolutionSettings.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Settings;
|
||||
|
||||
use Spatie\LaravelSettings\Settings;
|
||||
|
||||
class SolutionSettings extends Settings
|
||||
{
|
||||
public string $solutions_subtitle;
|
||||
|
||||
public string $solutions_header;
|
||||
|
||||
public string $solutions_button_text;
|
||||
|
||||
public string $solutions_button_url;
|
||||
|
||||
public ?string $solutions_image;
|
||||
|
||||
public array $solution_items;
|
||||
|
||||
public static function group(): string
|
||||
{
|
||||
return 'cms_solutions';
|
||||
}
|
||||
}
|
||||
27
app/Settings/SuccessSettings.php
Normal file
27
app/Settings/SuccessSettings.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Settings;
|
||||
|
||||
use Spatie\LaravelSettings\Settings;
|
||||
|
||||
class SuccessSettings extends Settings
|
||||
{
|
||||
public string $success_subtitle;
|
||||
|
||||
public string $success_header;
|
||||
|
||||
public string $success_paragraph;
|
||||
|
||||
public string $success_button_text;
|
||||
|
||||
public string $success_button_url;
|
||||
|
||||
public array $skill_items;
|
||||
|
||||
public string $success_image;
|
||||
|
||||
public static function group(): string
|
||||
{
|
||||
return 'cms_success';
|
||||
}
|
||||
}
|
||||
@@ -56,7 +56,7 @@
|
||||
],
|
||||
"dev": [
|
||||
"Composer\\Config::disableProcessTimeout",
|
||||
"npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite"
|
||||
"npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve --host=0.0.0.0\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite"
|
||||
],
|
||||
"test": [
|
||||
"@php artisan config:clear --ansi",
|
||||
|
||||
24
database/factories/NewsFactory.php
Normal file
24
database/factories/NewsFactory.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use App\Models\News;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class NewsFactory extends Factory
|
||||
{
|
||||
protected $model = News::class;
|
||||
|
||||
public function definition()
|
||||
{
|
||||
$title = $this->faker->sentence(6);
|
||||
return [
|
||||
'title' => $title,
|
||||
'slug' => Str::slug($title),
|
||||
'content' => $this->faker->paragraphs(3, true),
|
||||
'image' => 'news/' . $this->faker->image('public/storage/news', 640, 480, null, false),
|
||||
'published_at' => $this->faker->dateTimeBetween('-1 year', 'now'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,11 @@ return new class extends Migration
|
||||
{
|
||||
Schema::create('news', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('title');
|
||||
$table->string('slug')->unique();
|
||||
$table->longText('content');
|
||||
$table->string('image')->nullable();
|
||||
$table->timestamp('published_at');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\Brand;
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\File;
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\User;
|
||||
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
@@ -16,6 +15,7 @@ class DatabaseSeeder extends Seeder
|
||||
$this->call([
|
||||
UsersTableSeeder::class,
|
||||
BrandTableSeeder::class,
|
||||
NewsTableSeeder::class,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
18
database/seeders/NewsTableSeeder.php
Normal file
18
database/seeders/NewsTableSeeder.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
use App\Models\News;
|
||||
|
||||
class NewsTableSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
News::factory()->count(12)->create();
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class UsersTableSeeder extends Seeder
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@ return new class extends SettingsMigration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
$this->migrator->add('cms_homepage.bg_video', 'http://127.0.0.1:8000/web/assets/video/banner.mp4');
|
||||
$this->migrator->add('cms_homepage.bg_video', 'http://192.168.1.180: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');
|
||||
@@ -24,7 +24,7 @@ return new class extends SettingsMigration
|
||||
$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');
|
||||
$this->migrator->add('cms_homepage.about_image_one', 'http://192.168.1.180:8000/web/assets/img/about/about-5.jpg');
|
||||
$this->migrator->add('cms_homepage.about_image_two', 'http://192.168.1.180:8000/web/assets/img/about/about-6.jpg');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
use Spatie\LaravelSettings\Migrations\SettingsMigration;
|
||||
|
||||
return new class extends SettingsMigration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
$this->migrator->add('cms_solutions.solutions_subtitle', 'Our Services');
|
||||
$this->migrator->add('cms_solutions.solutions_header', 'Provide Quality Services');
|
||||
$this->migrator->add('cms_solutions.solutions_button_text', 'more Services');
|
||||
$this->migrator->add('cms_solutions.solutions_image', 'http://192.168.1.180:8000/web/assets/img/page/services.jpg');
|
||||
$this->migrator->add('cms_solutions.solutions_button_url', 'http://gujurly.com');
|
||||
$this->migrator->add('cms_solutions.solution_items', [
|
||||
['icon_class' => 'flaticon-it-department', 'title' => 'Flooring Installation', 'link' => 'http://gujurly.com'],
|
||||
['icon_class' => 'flaticon-project', 'title' => 'Building Architecture', 'link' => 'http://gujurly.com'],
|
||||
['icon_class' => 'flaticon-design-thinking', 'title' => 'Interior Design', 'link' => 'http://gujurly.com'],
|
||||
['icon_class' => 'flaticon-data', 'title' => 'House Renovation', 'link' => 'http://gujurly.com'],
|
||||
]);
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
use Spatie\LaravelSettings\Migrations\SettingsMigration;
|
||||
|
||||
return new class extends SettingsMigration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
$this->migrator->add('cms_success.success_subtitle', 'Construction Advices');
|
||||
$this->migrator->add('cms_success.success_header', 'Building Success With Expert Advisory Services');
|
||||
$this->migrator->add('cms_success.success_paragraph', 'With a focus on innovation and sustainability, we help you navigate complex challenges, ensuring');
|
||||
$this->migrator->add('cms_success.success_button_text', 'Get Advices');
|
||||
$this->migrator->add('cms_success.success_button_url', 'http://gujurly.com');
|
||||
$this->migrator->add('cms_success.skill_items', [
|
||||
['name' => 'Building Construction', 'percentage' => 89],
|
||||
['name' => 'Interiors Design', 'percentage' => 70],
|
||||
]);
|
||||
$this->migrator->add('cms_success.success_image', 'cms/skill.jpg');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
use Spatie\LaravelSettings\Migrations\SettingsMigration;
|
||||
|
||||
return new class extends SettingsMigration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
$this->migrator->add('cms_portfolio.portfolio_header', 'Get Expert Construction Advice and a Free Quote');
|
||||
$this->migrator->add('cms_portfolio.portfolio_button_text', 'Start a Journey');
|
||||
$this->migrator->add('cms_portfolio.portfolio_button_url', 'request-quote.html');
|
||||
$this->migrator->add('cms_portfolio.portfolio_items', [
|
||||
['image' => 'portfolio/portfolio-6.jpg', 'category' => 'Hospitality', 'title' => 'Seaside Resort Expansion', 'link' => '#'],
|
||||
['image' => 'portfolio/portfolio-2.jpg', 'category' => 'Retail', 'title' => 'Urban Mall Development', 'link' => '#'],
|
||||
['image' => 'portfolio/portfolio-4.jpg', 'category' => 'Residential', 'title' => 'Luxury Home Renovation', 'link' => '#'],
|
||||
['image' => 'portfolio/portfolio-8.jpg', 'category' => 'Architecture', 'title' => 'Modern Architecture', 'link' => '#'],
|
||||
]);
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
use Spatie\LaravelSettings\Migrations\SettingsMigration;
|
||||
|
||||
return new class extends SettingsMigration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
$this->migrator->add('cms_homepage.industry_subtitle', 'Industry Certifications');
|
||||
$this->migrator->add('cms_homepage.industry_header', 'We Drive Client Success with Creative Building Designs');
|
||||
$this->migrator->add('cms_homepage.industry_paragraph', 'At BuildGo, we pride ourselves on transforming our clients\' visions into reality. Our innovative and client-focused designs ensure that every project stands out.');
|
||||
$this->migrator->add('cms_homepage.industry_button_text', 'Contact Us');
|
||||
$this->migrator->add('cms_homepage.industry_button_url', 'contact.html');
|
||||
$this->migrator->add('cms_homepage.industry_image_one', 'page/image-2.jpg');
|
||||
$this->migrator->add('cms_homepage.industry_items', [
|
||||
['icon' => 'icon/icon-3.svg', 'title' => 'Custom Designs', 'description' => 'Tailored building solutions that reflect your vision style'],
|
||||
['icon' => 'icon/icon-2.svg', 'title' => 'Interior Plans', 'description' => 'Creating aesthetically pleasing functional interior spaces'],
|
||||
]);
|
||||
|
||||
$this->migrator->add('cms_homepage.text_slide_subtitle', 'Construction design');
|
||||
$this->migrator->add('cms_homepage.text_slide_header', 'Digital Consulting The Key to Smarter Building');
|
||||
$this->migrator->add('cms_homepage.text_slide_image', 'page/cta.jpg');
|
||||
$this->migrator->add('cms_homepage.text_slide_counter_number', 29);
|
||||
$this->migrator->add('cms_homepage.text_slide_items', [
|
||||
['icon' => 'icon/star-dark.svg', 'link' => 'portfolio-details', 'text' => 'Residential'],
|
||||
['icon' => 'icon/star-dark.svg', 'link' => 'portfolio-details', 'text' => 'Architecture'],
|
||||
['icon' => 'icon/star-dark.svg', 'link' => 'portfolio-details', 'text' => 'Community'],
|
||||
['icon' => 'icon/star-dark.svg', 'link' => 'portfolio-details', 'text' => 'Healthcare'],
|
||||
['icon' => 'icon/star-dark.svg', 'link' => 'portfolio-details', 'text' => 'Seaside Resort'],
|
||||
['icon' => 'icon/star-dark.svg', 'link' => 'portfolio-details', 'text' => 'Modern'],
|
||||
]);
|
||||
}
|
||||
};
|
||||
@@ -1,11 +1,15 @@
|
||||
@extends('web.layouts.app')
|
||||
|
||||
@inject('solutionSettings', 'App\Settings\SolutionSettings')
|
||||
@inject('successSettings', 'App\Settings\SuccessSettings')
|
||||
@inject('portfolioSettings', 'App\Settings\PortfolioSettings')
|
||||
|
||||
@section('content')
|
||||
<!-- Banner Area Start -->
|
||||
<div class="banner__four">
|
||||
{{-- BG video --}}
|
||||
<div class="bg-video">
|
||||
<video autoplay muted loop id="myVideo"><source src="{{ $homeSettings->bg_video }}" type="video/mp4"></video>
|
||||
<video autoplay muted loop id="myVideo"><source src="/storage/{{ $homeSettings->bg_video }}" type="video/mp4"></video>
|
||||
</div>
|
||||
|
||||
{{-- Hero --}}
|
||||
@@ -126,16 +130,16 @@
|
||||
<div class="row">
|
||||
<div class="col-xl-5 col-lg-6 lg-mb-25">
|
||||
<div class="services__four-title section-padding pb-0">
|
||||
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">Our Services</span>
|
||||
<h2 class="title_split_anim">Provide Quality Services</h2>
|
||||
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">{{ $solutionSettings->solutions_subtitle }}</span>
|
||||
<h2 class="title_split_anim">{{ $solutionSettings->solutions_header }}</h2>
|
||||
<div class="item_bounce">
|
||||
<a class="build_button mt-40" href="services.html">more Services<i class="flaticon-right-up"></i></a>
|
||||
<a class="build_button mt-40" href="{{ $solutionSettings->solutions_button_url }}">{{ $solutionSettings->solutions_button_text }}<i class="flaticon-right-up"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-7 col-lg-6">
|
||||
<div class="services__four-image wow img_top_animation">
|
||||
<img src="/web/assets/img/page/services.jpg" alt="image">
|
||||
<img src="/storage/{{ $solutionSettings->solutions_image }}" alt="image">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -143,34 +147,15 @@
|
||||
<div class="col-xl-12">
|
||||
<div class="swiper services_four_slide data_cursor" data-cursor-text="Drag">
|
||||
<div class="swiper-wrapper">
|
||||
<div class="swiper-slide">
|
||||
<div class="services__one-item">
|
||||
<i class="flaticon-it-department"></i>
|
||||
<h4><a href="#">Flooring Installation</a></h4>
|
||||
<a class="more_btn" href="#">Read More<i class="flaticon-right-up"></i></a>
|
||||
@foreach($solutionSettings->solution_items as $item)
|
||||
<div class="swiper-slide">
|
||||
<div class="services__one-item">
|
||||
<i class="{{ $item['icon_class'] }}"></i>
|
||||
<h4><a href="{{ $item['link'] }}">{{ $item['title'] }}</a></h4>
|
||||
<a class="more_btn" href="{{ $item['link'] }}">Read More<i class="flaticon-right-up"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-slide">
|
||||
<div class="services__one-item">
|
||||
<i class="flaticon-project"></i>
|
||||
<h4><a href="#">Building Architecture</a></h4>
|
||||
<a class="more_btn" href="#">Read More<i class="flaticon-right-up"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-slide">
|
||||
<div class="services__one-item">
|
||||
<i class="flaticon-design-thinking"></i>
|
||||
<h4><a href="#">Interior Design</a></h4>
|
||||
<a class="more_btn" href="#">Read More<i class="flaticon-right-up"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-slide">
|
||||
<div class="services__one-item">
|
||||
<i class="flaticon-data"></i>
|
||||
<h4><a href="#">House Renovation</a></h4>
|
||||
<a class="more_btn" href="#">Read More<i class="flaticon-right-up"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -184,36 +169,29 @@
|
||||
<div class="row al-center">
|
||||
<div class="col-lg-6 lg-mb-25">
|
||||
<div class="success__area-title mr-70 xl-mr-0">
|
||||
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">Construction Advices</span>
|
||||
<h2 class="title_split_anim mb-20">Building Success With Expert Advisory Services</h2>
|
||||
<p class="wow fadeInUp" data-wow-delay=".4s">With a focus on innovation and sustainability, we help you navigate complex challenges, ensuring</p>
|
||||
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">{{ $successSettings->success_subtitle }}</span>
|
||||
<h2 class="title_split_anim mb-20">{{ $successSettings->success_header }}</h2>
|
||||
<p class="wow fadeInUp" data-wow-delay=".4s">{{ $successSettings->success_paragraph }}</p>
|
||||
<div class="item_bounce">
|
||||
<a class="build_button mt-25" href="contact.html">Get Advices<i class="flaticon-right-up"></i></a>
|
||||
<a class="build_button mt-25" href="{{ $successSettings->success_button_url }}">{{ $successSettings->success_button_text }}<i class="flaticon-right-up"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="success__area-right">
|
||||
<img class="lg_img_full wow img_top_animation" src="/web/assets/img/page/skill.jpg" alt="image">
|
||||
<img class="lg_img_full wow img_top_animation" src="/storage/{{ $successSettings->success_image }}" alt="image">
|
||||
<div class="success__area-right-skill mt-40 wow fadeInUp" data-wow-delay=".5s">
|
||||
<div class="skill__area-item">
|
||||
<div class="skill__area-item-content">
|
||||
<h6>Building Construction</h6>
|
||||
<span class="skill__area-item-count"><span class="counter">89</span>%</span>
|
||||
@foreach($successSettings->skill_items as $skill)
|
||||
<div class="skill__area-item">
|
||||
<div class="skill__area-item-content">
|
||||
<h6>{{ $skill['name'] }}</h6>
|
||||
<span class="skill__area-item-count"><span class="counter">{{ $skill['percentage'] }}</span>%</span>
|
||||
</div>
|
||||
<div class="skill__area-item-inner">
|
||||
<div class="skill__area-item-bar" data-width="{{ $skill['percentage'] }}"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="skill__area-item-inner">
|
||||
<div class="skill__area-item-bar" data-width="89"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="skill__area-item">
|
||||
<div class="skill__area-item-content">
|
||||
<h6>Interiors Design</h6>
|
||||
<span class="skill__area-item-count"><span class="counter">70</span>%</span>
|
||||
</div>
|
||||
<div class="skill__area-item-inner">
|
||||
<div class="skill__area-item-bar" data-width="70"></div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -227,42 +205,17 @@
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<div class="portfolio__four-area">
|
||||
<div class="portfolio__four-area-item">
|
||||
<img src="/web/assets/img/portfolio/portfolio-6.jpg" alt="image">
|
||||
<div class="portfolio__four-area-item-area">
|
||||
<div class="portfolio__one-item-content">
|
||||
<span>Hospitality</span>
|
||||
<h4><a href="#" class="text-white">Seaside Resort Expansion</a></h4>
|
||||
@foreach($portfolioSettings->portfolio_items as $item)
|
||||
<div class="portfolio__four-area-item">
|
||||
<img src="/storage/{{ $item['image'] }}" alt="image">
|
||||
<div class="portfolio__four-area-item-area">
|
||||
<div class="portfolio__one-item-content">
|
||||
<span>{{ $item['category'] }}</span>
|
||||
<h4><a href="{{ $item['link'] }}" class="text-white">{{ $item['title'] }}</a></h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="portfolio__four-area-item">
|
||||
<img src="/web/assets/img/portfolio/portfolio-2.jpg" alt="image">
|
||||
<div class="portfolio__four-area-item-area">
|
||||
<div class="portfolio__one-item-content">
|
||||
<span>Retail</span>
|
||||
<h4><a href="#" class="text-white">Urban Mall Development</a></h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="portfolio__four-area-item">
|
||||
<img src="/web/assets/img/portfolio/portfolio-4.jpg" alt="image">
|
||||
<div class="portfolio__four-area-item-area">
|
||||
<div class="portfolio__one-item-content">
|
||||
<span>Residential</span>
|
||||
<h4><a href="#" class="text-white">Luxury Home Renovation</a></h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="portfolio__four-area-item">
|
||||
<img src="/web/assets/img/portfolio/portfolio-8.jpg" alt="image">
|
||||
<div class="portfolio__four-area-item-area">
|
||||
<div class="portfolio__one-item-content">
|
||||
<span>Architecture</span>
|
||||
<h4><a href="#" class="text-white">Modern Architecture</a></h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -270,11 +223,11 @@
|
||||
<div class="container mt-60">
|
||||
<div class="row al-center">
|
||||
<div class="col-xl-5 col-md-7 md-mb-25 lg-t-center title_split_anim">
|
||||
<h3>Get Expert Construction Advice and a Free Quote</h3>
|
||||
<h3>{{ $portfolioSettings->portfolio_header }}</h3>
|
||||
</div>
|
||||
<div class="col-xl-7 col-md-5 t-right lg-t-center">
|
||||
<div class="item_bounce">
|
||||
<a class="build_button" href="request-quote.html">Start a Journey<i class="flaticon-right-up"></i></a>
|
||||
<a class="build_button" href="{{ $portfolioSettings->portfolio_button_url }}">{{ $portfolioSettings->portfolio_button_text }}<i class="flaticon-right-up"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -287,32 +240,27 @@
|
||||
<div class="row al-center">
|
||||
<div class="col-lg-6 lg-mb-30">
|
||||
<div class="industry__four-left">
|
||||
<img class="lg_img_full wow img_top_animation" src="/web/assets/img/page/image-2.jpg" alt="image">
|
||||
<img class="lg_img_full wow img_top_animation" src="/storage/{{ $homeSettings->industry_image_one }}" alt="image">
|
||||
<div class="row mt-40">
|
||||
<div class="col-md-6 md-mb-25 wow fadeInUp" data-wow-delay=".4s">
|
||||
<div class="industry__four-left-item borders pr-10 lg-pr-0">
|
||||
<img src="/web/assets/img/icon/icon-3.svg" alt="image">
|
||||
<h5>Custom Designs</h5>
|
||||
<p>Tailored building solutions that reflect your vision style</p>
|
||||
@foreach($homeSettings->industry_items as $item)
|
||||
<div class="col-md-6 md-mb-25 wow fadeInUp" data-wow-delay=".4s">
|
||||
<div class="industry__four-left-item borders pr-10 lg-pr-0">
|
||||
<img src="/storage/{{ $item['icon'] }}" alt="image">
|
||||
<h5>{{ $item['title'] }}</h5>
|
||||
<p>{{ $item['description'] }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 wow fadeInUp" data-wow-delay=".8s">
|
||||
<div class="industry__four-left-item pl-20 xl-pl-0">
|
||||
<img src="/web/assets/img/icon/icon-2.svg" alt="image">
|
||||
<h5>Interior Plans</h5>
|
||||
<p>Creating aesthetically pleasing functional interior spaces</p>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="industry__four-right ml-45 xl-ml-0">
|
||||
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">Industry Certifications</span>
|
||||
<h2 class="title_split_anim mb-20">We Drive Client Success with Creative Building Designs</h2>
|
||||
<p class="wow fadeInUp" data-wow-delay=".4s">At BuildGo, we pride ourselves on transforming our clients' visions into reality. Our innovative and client-focused designs ensure that every project stands out.</p>
|
||||
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">{{ $homeSettings->industry_subtitle }}</span>
|
||||
<h2 class="title_split_anim mb-20">{{ $homeSettings->industry_header }}</h2>
|
||||
<p class="wow fadeInUp" data-wow-delay=".4s">{{ $homeSettings->industry_paragraph }}</p>
|
||||
<div class="item_bounce">
|
||||
<a class="build_button mt-25" href="contact.html">Contact Us<i class="flaticon-right-up"></i></a>
|
||||
<a class="build_button mt-25" href="{{ $homeSettings->industry_button_url }}">{{ $homeSettings->industry_button_text }}<i class="flaticon-right-up"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -326,15 +274,15 @@
|
||||
<div class="row">
|
||||
<div class="col-lg-6 lg-mb-30">
|
||||
<div class="text__slide-title mt-35 lg-mt-0">
|
||||
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">Construction design</span>
|
||||
<h2 class="title_split_anim">Digital Consulting The Key to Smarter Building</h2>
|
||||
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">{{ $homeSettings->text_slide_subtitle }}</span>
|
||||
<h2 class="title_split_anim">{{ $homeSettings->text_slide_header }}</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="text__slide-right">
|
||||
<img class="wow img_left_animation" src="/web/assets/img/page/cta.jpg" alt="image">
|
||||
<img class="wow img_left_animation" src="/storage/{{ $homeSettings->text_slide_image }}" alt="image">
|
||||
<div class="text__slide-right-counter item_bounce" style="background-image: url('/web/assets/img/shape/content-1.png');">
|
||||
<h2><span class="counter">29</span>+</h2>
|
||||
<h2><span class="counter">{{ $homeSettings->text_slide_counter_number }}</span>+</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -344,22 +292,16 @@
|
||||
<div class="text-slide">
|
||||
<div class="sliders text_scroll">
|
||||
<ul>
|
||||
<li><img src="/web/assets/img/icon/star-dark.svg" alt="icon"><a href="portfolio-details">Residential</a></li>
|
||||
<li><img src="/web/assets/img/icon/star-dark.svg" alt="icon"><a href="portfolio-details">Architecture</a></li>
|
||||
<li><img src="/web/assets/img/icon/star-dark.svg" alt="icon"><a href="portfolio-details">Community</a></li>
|
||||
<li><img src="/web/assets/img/icon/star-dark.svg" alt="icon"><a href="portfolio-details">Healthcare</a></li>
|
||||
<li><img src="/web/assets/img/icon/star-dark.svg" alt="icon"><a href="portfolio-details">Seaside Resort</a></li>
|
||||
<li><img src="/web/assets/img/icon/star-dark.svg" alt="icon"><a href="portfolio-details">Modern</a></li>
|
||||
@foreach($homeSettings->text_slide_items as $item)
|
||||
<li><img src="/storage/{{ $item['icon'] }}" alt="icon"><a href="{{ $item['link'] }}">{{ $item['text'] }}</a></li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sliders text_scroll">
|
||||
<ul>
|
||||
<li><img src="/web/assets/img/icon/star-dark.svg" alt="icon"><a href="portfolio-details">Residential</a></li>
|
||||
<li><img src="/web/assets/img/icon/star-dark.svg" alt="icon"><a href="portfolio-details">Architecture</a></li>
|
||||
<li><img src="/web/assets/img/icon/star-dark.svg" alt="icon"><a href="portfolio-details">Community</a></li>
|
||||
<li><img src="/web/assets/img/icon/star-dark.svg" alt="icon"><a href="portfolio-details">Healthcare</a></li>
|
||||
<li><img src="/web/assets/img/icon/star-dark.svg" alt="icon"><a href="portfolio-details">Seaside Resort</a></li>
|
||||
<li><img src="/web/assets/img/icon/star-dark.svg" alt="icon"><a href="portfolio-details">Modern</a></li>
|
||||
@foreach($homeSettings->text_slide_items as $item)
|
||||
<li><img src="/storage/{{ $item['icon'] }}" alt="icon"><a href="{{ $item['link'] }}">{{ $item['text'] }}</a></li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1 +1,58 @@
|
||||
w
|
||||
@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>Blog 3 Columns</h2>
|
||||
<ul>
|
||||
<li><a href="index.html">Home</a><i class="fa-regular fa-angle-right"></i></li>
|
||||
<li>Blog 3 Columns</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Breadcrumb Area End -->
|
||||
<!-- Blog Area Start -->
|
||||
<div class="blog-three__columns section-padding-three">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
@foreach ($allNews as $news)
|
||||
<div class="col-xl-4 col-lg-6 wow fadeInUp" data-wow-delay=".4s">
|
||||
<div class="blog__one-item">
|
||||
<div class="blog__one-item-image">
|
||||
<a href="{{ route('news.show', $news->slug) }}"><img src="/storage/{{ $news->image }}" alt="image"></a>
|
||||
<div class="blog__one-item-image-date">
|
||||
<h6><i class="fa-regular fa-calendar"></i>{{ \Carbon\Carbon::parse($news->published_at)->format('d M') }}</h6>
|
||||
</div>
|
||||
</div>
|
||||
<div class="blog__one-item-content">
|
||||
<h4><a href="{{ route('news.show', $news->slug) }}">{{ $news->title }}</a></h4>
|
||||
<a class="more_btn" href="{{ route('news.show', $news->slug) }}">Read More<i class="flaticon-right-up"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<div class="row mt-25">
|
||||
<div class="col-xl-12">
|
||||
<div class="theme__pagination t-center">
|
||||
<ul>
|
||||
<li><a class="active" href="#">01</a></li>
|
||||
<li><a href="#">02</a></li>
|
||||
<li><a href="#"><i class="far fa-ellipsis-h"></i></a></li>
|
||||
<li><a href="#">05</a></li>
|
||||
<li><a href="#"><i class="fa-regular fa-angle-right"></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Blog Area End -->
|
||||
@endsection
|
||||
Reference in New Issue
Block a user