Refactor navigation settings across multiple pages: update navigation groups and labels for HomePageSettings, ManageCtaSettings, ManagePortfolio, ManageSolutions, ManageSuccess, and ManageSite. Introduce solutions data fetching in OurSolutionPageController and enhance header navigation with dynamic solutions list. Update database migration to include new fields for solutions.

This commit is contained in:
2025-07-28 20:06:11 +05:00
parent 74fc3b5e6a
commit 7fdb99cc79
16 changed files with 182 additions and 16 deletions

View File

@@ -15,6 +15,10 @@ use Illuminate\Contracts\Support\Htmlable;
class HomePageSettings extends SettingsPage class HomePageSettings extends SettingsPage
{ {
protected static ?string $navigationGroup = 'Home';
protected static ?string $navigationIcon = 'heroicon-o-home';
protected static string $settings = HomeSettings::class; protected static string $settings = HomeSettings::class;
public function form(Form $form): Form public function form(Form $form): Form
@@ -267,12 +271,12 @@ class HomePageSettings extends SettingsPage
public static function getNavigationGroup(): ?string public static function getNavigationGroup(): ?string
{ {
return __('CMS'); return __('Home');
} }
public static function getNavigationLabel(): string public static function getNavigationLabel(): string
{ {
return __('Home'); return __('Home Page Settings');
} }
public function getTitle(): string|Htmlable public function getTitle(): string|Htmlable

View File

@@ -11,11 +11,16 @@ use Filament\Forms\Components\FileUpload;
class ManageCtaSettings extends SettingsPage class ManageCtaSettings extends SettingsPage
{ {
protected static ?string $navigationGroup = 'CMS'; protected static ?string $navigationGroup = 'CMS';
protected static ?string $navigationLabel = 'Call To Action';
protected static ?string $navigationIcon = 'heroicon-o-megaphone'; protected static ?string $navigationIcon = 'heroicon-o-megaphone';
protected static string $settings = CtaSettings::class; protected static string $settings = CtaSettings::class;
public static function getNavigationLabel(): string
{
return 'Call To Action';
}
public function form(Form $form): Form public function form(Form $form): Form
{ {
return $form return $form

View File

@@ -14,6 +14,8 @@ use Illuminate\Contracts\Support\Htmlable;
class ManagePortfolio extends SettingsPage class ManagePortfolio extends SettingsPage
{ {
protected static ?string $navigationGroup = 'Home';
protected static ?string $navigationIcon = 'heroicon-o-briefcase'; protected static ?string $navigationIcon = 'heroicon-o-briefcase';
protected static string $settings = PortfolioSettings::class; protected static string $settings = PortfolioSettings::class;
@@ -84,7 +86,7 @@ class ManagePortfolio extends SettingsPage
public static function getNavigationGroup(): ?string public static function getNavigationGroup(): ?string
{ {
return __('CMS'); return __('Home');
} }
public static function getNavigationLabel(): string public static function getNavigationLabel(): string

View File

@@ -10,6 +10,8 @@ use Illuminate\Contracts\Support\Htmlable;
class ManageSite extends SettingsPage class ManageSite extends SettingsPage
{ {
protected static ?string $navigationGroup = 'Settings';
protected static ?string $navigationIcon = 'heroicon-o-globe-alt'; protected static ?string $navigationIcon = 'heroicon-o-globe-alt';
protected static string $settings = SiteSettings::class; protected static string $settings = SiteSettings::class;

View File

@@ -10,7 +10,7 @@ use Illuminate\Contracts\Support\Htmlable;
class ManageSiteSocialSettings extends SettingsPage class ManageSiteSocialSettings extends SettingsPage
{ {
protected static ?int $navigationSort = 4; protected static ?string $navigationGroup = 'Settings';
protected static ?string $navigationIcon = 'heroicon-o-share'; protected static ?string $navigationIcon = 'heroicon-o-share';

View File

@@ -15,6 +15,8 @@ use Illuminate\Contracts\Support\Htmlable;
class ManageSolutions extends SettingsPage class ManageSolutions extends SettingsPage
{ {
protected static ?string $navigationGroup = 'Home';
protected static ?string $navigationIcon = 'heroicon-o-wrench-screwdriver'; protected static ?string $navigationIcon = 'heroicon-o-wrench-screwdriver';
protected static string $settings = SolutionSettings::class; protected static string $settings = SolutionSettings::class;
@@ -352,12 +354,12 @@ class ManageSolutions extends SettingsPage
public static function getNavigationGroup(): ?string public static function getNavigationGroup(): ?string
{ {
return __('CMS'); return __('Home');
} }
public static function getNavigationLabel(): string public static function getNavigationLabel(): string
{ {
return __('Solutions'); return __('Manage Solutions');
} }
public function getTitle(): string|Htmlable public function getTitle(): string|Htmlable

View File

@@ -15,6 +15,8 @@ use Illuminate\Contracts\Support\Htmlable;
class ManageSuccess extends SettingsPage class ManageSuccess extends SettingsPage
{ {
protected static ?string $navigationGroup = 'Home';
protected static ?string $navigationIcon = 'heroicon-o-check-circle'; protected static ?string $navigationIcon = 'heroicon-o-check-circle';
protected static string $settings = SuccessSettings::class; protected static string $settings = SuccessSettings::class;
@@ -89,7 +91,7 @@ class ManageSuccess extends SettingsPage
public static function getNavigationGroup(): ?string public static function getNavigationGroup(): ?string
{ {
return __('CMS'); return __('Home');
} }
public static function getNavigationLabel(): string public static function getNavigationLabel(): string

View File

@@ -19,7 +19,7 @@ class BrandResource extends Resource
{ {
protected static ?string $model = Brand::class; protected static ?string $model = Brand::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; protected static ?string $navigationIcon = 'heroicon-o-tag';
public static function form(Form $form): Form public static function form(Form $form): Form
{ {

View File

@@ -0,0 +1,85 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\SolutionResource\Pages;
use App\Filament\Resources\SolutionResource\RelationManagers;
use App\Models\Solution;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class SolutionResource extends Resource
{
protected static ?string $model = Solution::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Solutions';
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('title')
->required()
->maxLength(255),
Forms\Components\TextInput::make('slug')
->required()
->maxLength(255),
Forms\Components\RichEditor::make('description')
->required()
->columnSpanFull(),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('title')
->searchable(),
Tables\Columns\TextColumn::make('slug')
->searchable(),
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(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListSolutions::route('/'),
'create' => Pages\CreateSolution::route('/create'),
'edit' => Pages\EditSolution::route('/{record}/edit'),
];
}
}

View File

@@ -0,0 +1,12 @@
<?php
namespace App\Filament\Resources\SolutionResource\Pages;
use App\Filament\Resources\SolutionResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateSolution extends CreateRecord
{
protected static string $resource = SolutionResource::class;
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\SolutionResource\Pages;
use App\Filament\Resources\SolutionResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditSolution extends EditRecord
{
protected static string $resource = SolutionResource::class;
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\SolutionResource\Pages;
use App\Filament\Resources\SolutionResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListSolutions extends ListRecords
{
protected static string $resource = SolutionResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}

View File

@@ -8,7 +8,9 @@ class OurSolutionPageController extends Controller
{ {
public function index() public function index()
{ {
return view('web.pages.our-solutions.index'); $solutions = Solution::all();
return view('web.pages.our-solutions.index', compact('solutions'));
} }
public function show(Solution $solution) public function show(Solution $solution)

View File

@@ -2,6 +2,7 @@
namespace App\Providers; namespace App\Providers;
use App\Models\Solution;
use App\Settings\SiteSettings; use App\Settings\SiteSettings;
use App\Settings\SiteSocialSettings; use App\Settings\SiteSocialSettings;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
@@ -27,6 +28,7 @@ class AppServiceProvider extends ServiceProvider
Model::unguard(); Model::unguard();
$this->addSettingsToViews(); $this->addSettingsToViews();
$this->addSolutionsToViews();
// logDB(); // logDB();
} }
@@ -41,4 +43,14 @@ class AppServiceProvider extends ServiceProvider
$view->with('socialMedia', app(SiteSocialSettings::class)); $view->with('socialMedia', app(SiteSocialSettings::class));
}); });
} }
/**
* Add solutions to views
*/
public function addSolutionsToViews(): void
{
ViewFacade::composer(['web.layouts.navigation.header'], function (View $view) {
$view->with('solutions', Solution::query()->latest()->get());
});
}
} }

View File

@@ -13,6 +13,9 @@ return new class extends Migration
{ {
Schema::create('solutions', function (Blueprint $table) { Schema::create('solutions', function (Blueprint $table) {
$table->id(); $table->id();
$table->string('title');
$table->text('description');
$table->string('slug')->unique();
$table->timestamps(); $table->timestamps();
}); });
} }

View File

@@ -20,12 +20,9 @@
<li class="menu-item-has-children"><a href="{{ route('our-solutions.index') }}">{{ __('Our solutions') }}</a> <li class="menu-item-has-children"><a href="{{ route('our-solutions.index') }}">{{ __('Our solutions') }}</a>
<ul class="sub-menu"> <ul class="sub-menu">
<li><a href="history.html">Company History</a></li> @foreach($solutions as $solution)
<li><a href="testimonial.html">Testimonials</a></li> <li><a href="{{ route('our-solutions.show', $solution->slug) }}">{{ $solution->name }}</a></li>
<li><a href="pricing.html">Price Plans</a></li> @endforeach
<li><a href="faq.html">FAQ's</a></li>
<li><a href="request-quote.html">Request Quote</a></li>
<li><a href="404-error.html">404 Page</a></li>
</ul> </ul>
</li> </li>