Skip to content

Commit 0ee9b1c

Browse files
committed
Settings model
Filament resources for settings and redirects Page controller + views
1 parent 05d0184 commit 0ee9b1c

29 files changed

+1040
-29
lines changed

composer.json

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
],
1818
"require": {
1919
"php": "^8.4",
20-
"spatie/laravel-package-tools": "^1.16",
20+
"artesaos/seotools": "^1.3",
2121
"illuminate/contracts": "^10.0||^11.0||^12.0",
22-
"statikbe/laravel-filament-flexible-content-blocks": "^2.4",
23-
"spatie/laravel-missing-page-redirector": "^2.11"
22+
"mcamara/laravel-localization": "^2.3",
23+
"spatie/laravel-missing-page-redirector": "^2.11",
24+
"spatie/laravel-package-tools": "^1.16",
25+
"statikbe/laravel-filament-flexible-content-blocks": "^2.4"
2426
},
2527
"require-dev": {
2628
"laravel/pint": "^1.14",
@@ -52,7 +54,7 @@
5254
"scripts": {
5355
"post-autoload-dump": "@composer run prepare",
5456
"prepare": "@php vendor/bin/testbench package:discover --ansi",
55-
"analyse": "vendor/bin/phpstan analyse",
57+
"analyse": "vendor/bin/phpstan analyse --memory-limit 1G",
5658
"test": "vendor/bin/pest",
5759
"test-coverage": "vendor/bin/pest --coverage",
5860
"format": "vendor/bin/pint"
@@ -68,10 +70,10 @@
6870
"extra": {
6971
"laravel": {
7072
"providers": [
71-
"FilamentFlexibleContentBlockPagesServiceProvider"
73+
"Statikbe\\FilamentFlexibleContentBlockPages\\FilamentFlexibleContentBlockPagesServiceProvider"
7274
],
7375
"aliases": {
74-
"LaravelFilamentFlexibleContentBlockPages": "FilamentFlexibleContentBlockPages"
76+
"FilamentFlexibleContentBlockPages": "Statikbe\\FilamentFlexibleContentBlockPages\\Facades\\FilamentFlexibleContentBlockPages"
7577
}
7678
}
7779
},
Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,34 @@
11
<?php
22

33
// config for Statikbe/FilamentFlexibleContentBlockPages
4+
use Statikbe\FilamentFlexibleContentBlockPages\FilamentFlexibleContentBlockPagesConfig;
5+
46
return [
57
'models' => [
68
'page' => \Statikbe\FilamentFlexibleContentBlockPages\Models\Page::class,
9+
'redirect' => \Statikbe\FilamentFlexibleContentBlockPages\Models\Redirect::class,
10+
'settings' => \Statikbe\FilamentFlexibleContentBlockPages\Models\Settings::class,
711
],
812

913
'table_names' => [
10-
'pages' => 'pages',
11-
'authors' => 'users',
14+
FilamentFlexibleContentBlockPagesConfig::TYPE_PAGE => 'pages',
15+
FilamentFlexibleContentBlockPagesConfig::TYPE_AUTHOR => 'users',
16+
FilamentFlexibleContentBlockPagesConfig::TYPE_SETTINGS => 'settings',
17+
FilamentFlexibleContentBlockPagesConfig::TYPE_REDIRECT => 'redirects',
1218
],
1319

1420
'resources' => [
15-
'pages' => \Statikbe\FilamentFlexibleContentBlockPages\Resources\PageResource::class,
21+
FilamentFlexibleContentBlockPagesConfig::TYPE_PAGE => \Statikbe\FilamentFlexibleContentBlockPages\Resources\PageResource::class,
22+
FilamentFlexibleContentBlockPagesConfig::TYPE_SETTINGS => \Statikbe\FilamentFlexibleContentBlockPages\Resources\SettingsResource::class,
23+
FilamentFlexibleContentBlockPagesConfig::TYPE_REDIRECT => \Statikbe\FilamentFlexibleContentBlockPages\Resources\RedirectResource::class,
1624
],
1725

1826
'panel' => [
1927
'path' => 'content',
2028
],
29+
30+
'seo' => [
31+
'default_canonical_locale' => 'nl',
32+
],
33+
2134
];

database/migrations/create_redirects_table.php.stub

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
use Illuminate\Database\Migrations\Migration;
44
use Illuminate\Database\Schema\Blueprint;
55
use Illuminate\Support\Facades\Schema;
6+
use Statikbe\FilamentFlexibleContentBlockPages\Facades\FilamentFlexibleContentBlockPages;
67

78
return new class extends Migration {
89
public function up()
910
{
10-
Schema::create('redirects', function (Blueprint $table) {
11+
Schema::create(FilamentFlexibleContentBlockPages::config()->getRedirectTable(), function (Blueprint $table) {
1112
$table->id();
1213
$table->string('old_url');
1314
$table->string('new_url');
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
use Statikbe\FilamentFlexibleContentBlockPages\Facades\FilamentFlexibleContentBlockPages;
7+
use Statikbe\FilamentFlexibleContentBlockPages\Models\Settings;
8+
9+
return new class extends Migration {
10+
public function up()
11+
{
12+
Schema::create(FilamentFlexibleContentBlockPages::config()->getSettingsTable(), function (Blueprint $table) {
13+
$table->id();
14+
$table->string(Settings::SETTING_SITE_TITLE);
15+
$table->text(Settings::SETTING_CONTACT_INFO)->nullable();
16+
$table->json(Settings::SETTING_FOOTER_COPYRIGHT)->nullable();
17+
$table->timestamps();
18+
});
19+
}
20+
};

resources/lang/nl/filament-flexible-content-block-pages.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,22 @@
1616
'created_at_col' => 'Aangemaakt op',
1717
],
1818
],
19-
19+
'redirects' => [
20+
'redirects_lbl' => 'Redirect',
21+
'redirects_plural_lbl' => 'Redirects',
22+
'redirect_old_url' => 'Oude URL',
23+
'redirect_new_url' => 'Nieuwe URL',
24+
'redirect_status_code' => 'Status code',
25+
],
26+
'settings' => [
27+
'settings_lbl' => 'Instelling',
28+
'settings_plural_lbl' => 'Instellingen',
29+
'navigation_group' => 'Instellingen',
30+
'settings_tab_site_general' => 'Algemeen',
31+
'site_title' => 'Titel van de website',
32+
'settings_contact_info' => 'Contactgegevens',
33+
'settings_tab_seo' => 'SEO',
34+
'settings_default_seo_image' => 'Standaard SEO-afbeelding',
35+
'settings_default_seo_image_hint' => 'Indien er geen SEO-afbeelding voor een pagina is ingesteld, wordt deze afbeelding gebruikt.',
36+
],
2037
];
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
@if(count(LaravelLocalization::getSupportedLocales()) > 1)
2+
@php
3+
use \Illuminate\Support\Facades\Route;
4+
5+
$page = Route::current()->parameter('page');
6+
@endphp
7+
8+
<nav class="relative inline-block text-right">
9+
<div class="py-1 flex" role="none">
10+
@foreach(LaravelLocalization::getSupportedLocales() as $localeCode => $properties)
11+
<a href="{{$page && is_object($page) ? $page->getViewUrl($localeCode) : '#'}}"
12+
class="text-gray-700 block px-4 py-2 text-sm"
13+
role="menuitem"
14+
id="menu-item-{{$localeCode}}">
15+
{{ $properties['native'] }}
16+
</a>
17+
@endforeach
18+
</div>
19+
</nav>
20+
@endif
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<!DOCTYPE html>
2+
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1">
6+
<meta name="csrf-token" content="{{ csrf_token() }}">
7+
8+
<title>{{ \Artesaos\SEOTools\SEOTools::getTitle() ?? flexiblePagesSetting(\Statikbe\FilamentFlexibleContentBlockPages\Models\Settings::SETTING_SITE_TITLE, app()->getLocale(), config('app.name') }}</title>
9+
10+
{!! \Artesaos\SEOTools\SEOTools::generate() !!}
11+
12+
<!-- Scripts -->
13+
@vite(['resources/css/app.css', 'resources/js/app.js'])
14+
15+
</head>
16+
<body class="font-sans antialiased">
17+
<div class="min-h-screen">
18+
<!-- Page Content -->
19+
{{ $slot }}
20+
</div>
21+
</body>
22+
</html>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
@php
2+
use \Statikbe\FilamentFlexibleContentBlockPages\Models\Settings;
3+
use \Statikbe\FilamentFlexibleContentBlockPages\Models\Page;
4+
5+
/* @var Page $page */
6+
@endphp
7+
8+
<x-layouts.base title="{{ $page->title }}" wide="true">
9+
<header>
10+
<x-language-switch/>
11+
</header>
12+
13+
<main class="prose-headings:font-base">
14+
15+
<x-flexible-hero :page="$page"/>
16+
17+
<x-flexible-content-blocks :page="$page"/>
18+
19+
</main>
20+
21+
<footer>
22+
<div>{{flexiblePagesSetting(Settings::SETTING_FOOTER_COPYRIGHT)}}</div>
23+
</footer>
24+
</x-layouts.base>

src/FilamentFlexibleContentBlockPagesConfig.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,49 @@
22

33
namespace Statikbe\FilamentFlexibleContentBlockPages;
44

5+
use Filament\Resources\Resource;
56
use Statikbe\FilamentFlexibleContentBlockPages\Models\Page;
7+
use Statikbe\FilamentFlexibleContentBlockPages\Models\Redirect;
8+
use Statikbe\FilamentFlexibleContentBlockPages\Models\Settings;
69

710
class FilamentFlexibleContentBlockPagesConfig
811
{
12+
const TYPE_PAGE = 'pages';
13+
14+
const TYPE_REDIRECT = 'redirects';
15+
16+
const TYPE_SETTINGS = 'settings';
17+
18+
const TYPE_AUTHOR = 'authors';
19+
920
private string $pageModel;
1021

22+
private string $redirectModel;
23+
24+
private string $settingsModel;
25+
1126
public function __construct()
1227
{
1328
$this->pageModel = $this->packageConfig('models.page', Page::class);
29+
$this->redirectModel = $this->packageConfig('models.redirect', \Statikbe\FilamentFlexibleContentBlockPages\Models\Redirect::class);
30+
$this->settingsModel = $this->packageConfig('models.settings', \Statikbe\FilamentFlexibleContentBlockPages\Models\Settings::class);
1431
}
1532

1633
public function getPageModel(): Page
1734
{
1835
return app($this->pageModel);
1936
}
2037

38+
public function getRedirectModel(): Redirect
39+
{
40+
return app($this->redirectModel);
41+
}
42+
43+
public function getSettingsModel(): Settings
44+
{
45+
return app($this->settingsModel);
46+
}
47+
2148
public function getAuthorsTable(): string
2249
{
2350
return $this->packageConfig('table_names.authors', 'users');
@@ -28,6 +55,16 @@ public function getPagesTable(): string
2855
return $this->packageConfig('table_names.pages', 'pages');
2956
}
3057

58+
public function getRedirectsTable(): string
59+
{
60+
return $this->packageConfig('table_names.redirects', 'redirects');
61+
}
62+
63+
public function getSettingsTable(): string
64+
{
65+
return $this->packageConfig('table_names.settings', 'settings');
66+
}
67+
3168
/**
3269
* @return array<class-string<resource>>
3370
*/
@@ -41,6 +78,11 @@ public function getPanelPath(): string
4178
return $this->packageConfig('panel.path', 'content');
4279
}
4380

81+
public function getSEODefaultCanonicalLocale(): string
82+
{
83+
return $this->packageConfig('seo.default_canonical_locale', 'en');
84+
}
85+
4486
private function packageConfig(string $configKey, $default = null): mixed
4587
{
4688
return config('filament-flexible-content-block-pages.'.$configKey);

src/FilamentFlexibleContentBlockPagesServiceProvider.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ public function configurePackage(Package $package): void
1818
->name('laravel-filament-flexible-content-block-pages')
1919
->hasConfigFile()
2020
->hasViews()
21-
->hasMigration('create_pages_table')
21+
->hasMigrations([
22+
'create_pages_table',
23+
'create_redirects_table',
24+
'create_settings_table',
25+
])
2226
->hasTranslations();
2327
}
2428
}

0 commit comments

Comments
 (0)