Update footer and header navigation links to reflect new route for success stories, and remove pagination section from news index view for cleaner layout.

This commit is contained in:
2025-07-28 21:17:54 +05:00
parent 41abdb6fc8
commit 9b3ca3ff66
13 changed files with 351 additions and 17 deletions

View File

@@ -0,0 +1,116 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\SuccessResource\Pages;
use App\Filament\Resources\SuccessResource\RelationManagers;
use App\Models\Success;
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 SuccessResource extends Resource
{
protected static ?string $model = Success::class;
protected static ?string $navigationIcon = 'heroicon-o-bookmark-square';
protected static ?string $navigationGroup = 'Success Stories';
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(Success::class, 'slug', ignoreRecord: true),
FileUpload::make('image')
->label('Image 1100x660')
->image()
->directory('success')
->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\ListSuccesses::route('/'),
'create' => Pages\CreateSuccess::route('/create'),
'edit' => Pages\EditSuccess::route('/{record}/edit'),
];
}
}

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use App\Models\Success;
use Illuminate\Http\Request;
class SuccessPageController extends Controller
{
public function index()
{
$allSuccesses = Success::query()->latest()->get();
return view('web.pages.success.index', compact('allSuccesses'));
}
public function show($success)
{
$success = Success::where('slug', $success)->firstOrFail();
$recentSuccesses = Success::query()->latest()->limit(3)->get();
return view('web.pages.success.show', compact('success', 'recentSuccesses'));
}
}

19
app/Models/Success.php Normal file
View File

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

View File

@@ -0,0 +1,32 @@
<?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('successes', 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();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('successes');
}
};

View File

@@ -32,7 +32,7 @@
<li><a href="{{ route('about-us.index') }}">{{ __('About Us') }}</a></li> <li><a href="{{ route('about-us.index') }}">{{ __('About Us') }}</a></li>
<li><a href="{{ route('our-solutions.index') }}">{{ __('Our solutions') }}</a></li> <li><a href="{{ route('our-solutions.index') }}">{{ __('Our solutions') }}</a></li>
<li><a href="{{ route('career.index') }}">{{ __('Career Opportunities') }}</a></li> <li><a href="{{ route('career.index') }}">{{ __('Career Opportunities') }}</a></li>
<li><a href="{{ route('story.index') }}">{{ __('Success stories') }}</a></li> <li><a href="{{ route('success.index') }}">{{ __('Success stories') }}</a></li>
</ul> </ul>
</div> </div>
</div> </div>

View File

@@ -29,7 +29,7 @@
<li class="menu-item-has-children"><a href="#">{{ __('News & Stories') }}</a> <li class="menu-item-has-children"><a href="#">{{ __('News & Stories') }}</a>
<ul class="sub-menu"> <ul class="sub-menu">
<li><a href="{{ route('news.index') }}">{{ __('News') }}</a></li> <li><a href="{{ route('news.index') }}">{{ __('News') }}</a></li>
<li><a href="{{ route('story.index') }}">{{ __('Success Stories') }}</a></li> <li><a href="{{ route('success.index') }}">{{ __('Success Stories') }}</a></li>
</ul> </ul>
</li> </li>

View File

@@ -39,19 +39,6 @@
</div> </div>
@endforeach @endforeach
</div> </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>
</div> </div>
<!-- Blog Area End --> <!-- Blog Area End -->

View File

@@ -0,0 +1,45 @@
@extends('web.layouts.app')
@section('content')
<!-- Breadcrumb Area Start -->
<div class="breadcrumb__area" style="background-image: url('/web/assets/img/page/breadcrumb.jpg');">
<div class="container">
<div class="row">
<div class="col-xl-12">
<div class="breadcrumb__area-content">
<h2>Success Stories</h2>
<ul>
<li><a href="/">Home</a><i class="fa-regular fa-angle-right"></i></li>
<li>Success Stories</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 ($allSuccesses as $success)
<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('success.show', $success->slug) }}"><img src="/storage/{{ $success->image }}" alt="image"></a>
<div class="blog__one-item-image-date">
<h6><i class="fa-regular fa-calendar"></i>{{ \Carbon\Carbon::parse($success->published_at)->format('d M') }}</h6>
</div>
</div>
<div class="blog__one-item-content">
<h4><a href="{{ route('success.show', $success->slug) }}">{{ $success->title }}</a></h4>
<a class="more_btn" href="{{ route('success.show', $success->slug) }}">Read More<i class="flaticon-right-up"></i></a>
</div>
</div>
</div>
@endforeach
</div>
</div>
</div>
<!-- Blog Area End -->
@endsection

View File

@@ -0,0 +1,59 @@
@extends('web.layouts.app')
@section('content')
<!-- Breadcrumb Area Start -->
<div class="breadcrumb__area" style="background-image: url('/web/assets/img/page/breadcrumb.jpg');">
<div class="container">
<div class="row">
<div class="col-xl-12">
<div class="breadcrumb__area-content">
<h2>{{ $success->title }}</h2>
<ul>
<li><a href="{{ route('home') }}">Home</a><i class="fa-regular fa-angle-right"></i></li>
<li><a href="{{ route('success.index') }}">Success Stories</a><i class="fa-regular fa-angle-right"></i></li>
<li>{{ $success->title }}</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- Breadcrumb Area End -->
<!-- Blog Details Area Start -->
<div class="blog__details section-padding">
<div class="container">
<div class="row">
<div class="col-lg-8 lg-mb-25">
<div class="blog__details-area">
<img src="/storage/{{ $success->image }}" alt="image">
<h3 class="mt-25 mb-20">{{ $success->title }}</h3>
<p>{!! $success->content !!}</p>
</div>
</div>
<div class="col-lg-4 columns_sticky">
<div class="all__sidebar">
<div class="all__sidebar-item">
<h4>Recent Success Stories</h4>
<div class="all__sidebar-item-post dark_image">
@foreach($recentSuccesses as $success)
<div class="post__item">
<div class="post__item-image">
<a href="{{ route('success.show', $success->slug) }}"><img src="/storage/{{ $success->image }}" alt="post-image"></a>
</div>
<div class="post__item-title">
<h6><a href="{{ route('success.show', $success->slug) }}">{{ $success->title }}</a></h6>
<span><i class="far fa-calendar-alt"></i>{{ \Carbon\Carbon::parse($success->published_at)->format('d M Y') }}</span>
</div>
</div>
@endforeach
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Blog Details Area End -->
@endsection

View File

@@ -9,6 +9,7 @@ use App\Http\Controllers\LegalPageController;
use App\Http\Controllers\NewsPageController; use App\Http\Controllers\NewsPageController;
use App\Http\Controllers\OurSolutionPageController; use App\Http\Controllers\OurSolutionPageController;
use App\Http\Controllers\StoryPageController; use App\Http\Controllers\StoryPageController;
use App\Http\Controllers\Web\SuccessPageController;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
// Homepage... // Homepage...
@@ -27,8 +28,8 @@ Route::get('news/{news:slug}', [NewsPageController::class, 'show'])->name('news.
Route::post('news/{news:slug}/comments', [NewsPageController::class, 'storeComment'])->name('comments.store'); Route::post('news/{news:slug}/comments', [NewsPageController::class, 'storeComment'])->name('comments.store');
// Success stories... // Success stories...
Route::get('stories', [StoryPageController::class, 'index'])->name('story.index'); Route::get('success-stories', [SuccessPageController::class, 'index'])->name('success.index');
Route::get('stories/{story:slug}', [StoryPageController::class, 'show'])->name('story.show'); Route::get('success-stories/{success:slug}', [SuccessPageController::class, 'show'])->name('success.show');
// Careers... // Careers...
Route::get('careers', [CareersPageController::class, 'index'])->name('career.index'); Route::get('careers', [CareersPageController::class, 'index'])->name('career.index');