diff --git a/app/Filament/Resources/SuccessResource.php b/app/Filament/Resources/SuccessResource.php new file mode 100644 index 0000000..69230e3 --- /dev/null +++ b/app/Filament/Resources/SuccessResource.php @@ -0,0 +1,116 @@ +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'), + ]; + } +} diff --git a/app/Filament/Resources/SuccessResource/Pages/CreateSuccess.php b/app/Filament/Resources/SuccessResource/Pages/CreateSuccess.php new file mode 100644 index 0000000..7285fb0 --- /dev/null +++ b/app/Filament/Resources/SuccessResource/Pages/CreateSuccess.php @@ -0,0 +1,12 @@ +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')); + } +} diff --git a/app/Models/Success.php b/app/Models/Success.php new file mode 100644 index 0000000..f8253fc --- /dev/null +++ b/app/Models/Success.php @@ -0,0 +1,19 @@ +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'); + } +}; diff --git a/resources/views/web/layouts/footer.blade.php b/resources/views/web/layouts/footer.blade.php index e0712a8..1522e74 100644 --- a/resources/views/web/layouts/footer.blade.php +++ b/resources/views/web/layouts/footer.blade.php @@ -32,7 +32,7 @@
  • {{ __('About Us') }}
  • {{ __('Our solutions') }}
  • {{ __('Career Opportunities') }}
  • -
  • {{ __('Success stories') }}
  • +
  • {{ __('Success stories') }}
  • diff --git a/resources/views/web/layouts/navigation/header.blade.php b/resources/views/web/layouts/navigation/header.blade.php index fe430ca..f21a38f 100644 --- a/resources/views/web/layouts/navigation/header.blade.php +++ b/resources/views/web/layouts/navigation/header.blade.php @@ -29,7 +29,7 @@ diff --git a/resources/views/web/pages/news/index.blade.php b/resources/views/web/pages/news/index.blade.php index 2cd818f..6f7102b 100644 --- a/resources/views/web/pages/news/index.blade.php +++ b/resources/views/web/pages/news/index.blade.php @@ -39,19 +39,6 @@ @endforeach -
    -
    -
    - -
    -
    -
    diff --git a/resources/views/web/pages/success/index.blade.php b/resources/views/web/pages/success/index.blade.php new file mode 100644 index 0000000..0666990 --- /dev/null +++ b/resources/views/web/pages/success/index.blade.php @@ -0,0 +1,45 @@ +@extends('web.layouts.app') + +@section('content') + + + + +
    +
    +
    + @foreach ($allSuccesses as $success) +
    +
    +
    + image +
    +
    {{ \Carbon\Carbon::parse($success->published_at)->format('d M') }}
    +
    +
    + +
    +
    + @endforeach +
    +
    +
    + +@endsection \ No newline at end of file diff --git a/resources/views/web/pages/success/show.blade.php b/resources/views/web/pages/success/show.blade.php new file mode 100644 index 0000000..cfefd47 --- /dev/null +++ b/resources/views/web/pages/success/show.blade.php @@ -0,0 +1,59 @@ +@extends('web.layouts.app') + +@section('content') + + + + + +
    +
    +
    +
    +
    + image +

    {{ $success->title }}

    +

    {!! $success->content !!}

    +
    +
    +
    +
    + +
    +

    Recent Success Stories

    +
    + @foreach($recentSuccesses as $success) +
    +
    + post-image +
    +
    +
    {{ $success->title }}
    + {{ \Carbon\Carbon::parse($success->published_at)->format('d M Y') }} +
    +
    + @endforeach +
    +
    +
    +
    +
    +
    +
    + +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index a41723f..7faff48 100644 --- a/routes/web.php +++ b/routes/web.php @@ -9,6 +9,7 @@ use App\Http\Controllers\LegalPageController; use App\Http\Controllers\NewsPageController; use App\Http\Controllers\OurSolutionPageController; use App\Http\Controllers\StoryPageController; +use App\Http\Controllers\Web\SuccessPageController; use Illuminate\Support\Facades\Route; // 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'); // Success stories... -Route::get('stories', [StoryPageController::class, 'index'])->name('story.index'); -Route::get('stories/{story:slug}', [StoryPageController::class, 'show'])->name('story.show'); +Route::get('success-stories', [SuccessPageController::class, 'index'])->name('success.index'); +Route::get('success-stories/{success:slug}', [SuccessPageController::class, 'show'])->name('success.show'); // Careers... Route::get('careers', [CareersPageController::class, 'index'])->name('career.index');