Skip to content

Commit e58592e

Browse files
committed
Manage page tree page
1 parent 48708bd commit e58592e

File tree

9 files changed

+116
-3
lines changed

9 files changed

+116
-3
lines changed

database/migrations/create_filament_flexible_content_block_pages_table.php.stub

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ return new class extends Migration
8484
->references('id')
8585
->on($pageTable)
8686
->onDelete('set null');
87+
$table->integer('order')
88+
->default(0);
8789
}
8890

8991
// Deletable:

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
'intro_lbl' => 'Intro',
2828
'is_published_lbl' => 'Is published?',
2929
],
30+
'actions' => [
31+
'page_tree_lbl' => 'Manage hierarchy',
32+
],
3033
],
3134
'redirects' => [
3235
'redirects_lbl' => 'redirect',

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
'intro_lbl' => 'Introduction',
2828
'is_published_lbl' => 'Est publié ?',
2929
],
30+
'actions' => [
31+
'page_tree_lbl' => 'Gérer la hiérarchie',
32+
],
3033
],
3134
'redirects' => [
3235
'redirects_lbl' => 'redirection',

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
'intro_lbl' => 'Introductie',
2828
'is_published_lbl' => 'Is gepubliceerd?',
2929
],
30+
'actions' => [
31+
'page_tree_lbl' => 'Beheer hiërarchie',
32+
],
3033
],
3134
'redirects' => [
3235
'redirects_lbl' => 'redirect',
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace Statikbe\FilamentFlexibleContentBlockPages\Models\Concerns;
4+
5+
use Illuminate\Database\Eloquent\Model;
6+
use Illuminate\Database\Eloquent\Relations\BelongsTo;
7+
use SolutionForest\FilamentTree\Concern\ModelTree;
8+
use Statikbe\FilamentFlexibleContentBlocks\Models\Contracts\HasParent;
9+
10+
/**
11+
* @mixin HasParent
12+
* @mixin Model
13+
*/
14+
trait HasPageTreeTrait
15+
{
16+
use ModelTree;
17+
18+
public function initializeHasPageTreeTrait(): void
19+
{
20+
$this->mergeFillable(['parent_id', 'order']);
21+
$this->mergeCasts(['parent_id' => 'integer', 'order' => 'integer']);
22+
}
23+
24+
public function parent(): BelongsTo
25+
{
26+
return $this->belongsTo(static::class, 'parent_id');
27+
}
28+
29+
public function hasParent(): bool
30+
{
31+
return ! is_null($this->parent_id);
32+
}
33+
34+
public function isParentOf(HasParent $child): bool
35+
{
36+
return $this->id === $child->parent_id;
37+
}
38+
}

src/Models/Page.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
use Spatie\MediaLibrary\HasMedia;
99
use Statikbe\FilamentFlexibleContentBlockPages\Facades\FilamentFlexibleContentBlockPages;
1010
use Statikbe\FilamentFlexibleContentBlockPages\Models\Concerns\HasDatabaseSearchTrait;
11+
use Statikbe\FilamentFlexibleContentBlockPages\Models\Concerns\HasPageTreeTrait;
1112
use Statikbe\FilamentFlexibleContentBlockPages\Models\Concerns\HasTitleMenuLabelTrait;
1213
use Statikbe\FilamentFlexibleContentBlockPages\Models\Contracts\HasMenuLabel;
1314
use Statikbe\FilamentFlexibleContentBlockPages\Observers\PageObserver;
1415
use Statikbe\FilamentFlexibleContentBlocks\Models\Concerns\HasAuthorAttributeTrait;
1516
use Statikbe\FilamentFlexibleContentBlocks\Models\Concerns\HasCodeTrait;
1617
use Statikbe\FilamentFlexibleContentBlocks\Models\Concerns\HasDefaultContentBlocksTrait;
1718
use Statikbe\FilamentFlexibleContentBlocks\Models\Concerns\HasHeroCallToActionsTrait;
18-
use Statikbe\FilamentFlexibleContentBlocks\Models\Concerns\HasParentTrait;
1919
use Statikbe\FilamentFlexibleContentBlocks\Models\Concerns\HasTranslatedContentBlocksTrait;
2020
use Statikbe\FilamentFlexibleContentBlocks\Models\Concerns\HasTranslatedHeroImageAttributesTrait;
2121
use Statikbe\FilamentFlexibleContentBlocks\Models\Concerns\HasTranslatedIntroAttributeTrait;
@@ -46,7 +46,7 @@ class Page extends Model implements HasCode, HasContentBlocks, HasHeroCallToActi
4646
use HasDefaultContentBlocksTrait;
4747
use HasFactory;
4848
use HasHeroCallToActionsTrait;
49-
use HasParentTrait;
49+
use HasPageTreeTrait;
5050
use HasTitleMenuLabelTrait;
5151
use HasTranslatedContentBlocksTrait;
5252
use HasTranslatedHeroImageAttributesTrait;

src/Resources/PageResource.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use Statikbe\FilamentFlexibleContentBlockPages\Resources\PageResource\Pages\CreatePage;
2222
use Statikbe\FilamentFlexibleContentBlockPages\Resources\PageResource\Pages\EditPage;
2323
use Statikbe\FilamentFlexibleContentBlockPages\Resources\PageResource\Pages\ListPages;
24+
use Statikbe\FilamentFlexibleContentBlockPages\Resources\PageResource\Pages\ManagePageTree;
2425
use Statikbe\FilamentFlexibleContentBlocks\Filament\Form\Actions\CopyContentBlocksToLocalesAction;
2526
use Statikbe\FilamentFlexibleContentBlocks\Filament\Form\Fields\AuthorField;
2627
use Statikbe\FilamentFlexibleContentBlocks\Filament\Form\Fields\CodeField;
@@ -243,11 +244,17 @@ public static function getRelations(): array
243244

244245
public static function getPages(): array
245246
{
246-
return [
247+
$pages = [
247248
'index' => ListPages::route('/'),
248249
'create' => CreatePage::route('/create'),
249250
'edit' => EditPage::route('/{record:id}/edit'),
250251
];
252+
253+
if (FilamentFlexibleContentBlockPages::config()->isParentEnabled(static::getModel())) {
254+
$pages['tree'] = ManagePageTree::route('/tree');
255+
}
256+
257+
return $pages;
251258
}
252259

253260
public static function getGloballySearchableAttributes(): array

src/Resources/PageResource/Pages/ListPages.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Statikbe\FilamentFlexibleContentBlockPages\Resources\PageResource\Pages;
44

5+
use Filament\Actions\Action;
56
use Filament\Actions\CreateAction;
67
use Filament\Resources\Pages\ListRecords;
78
use Filament\Resources\Pages\ListRecords\Concerns\Translatable;
@@ -24,6 +25,10 @@ protected function getActions(): array
2425
return [
2526
FlexibleLocaleSwitcher::make(),
2627
CreateAction::make(),
28+
Action::make('page_tree')
29+
->label(flexiblePagesTrans('actions.page_tree_lbl'))
30+
->visible(FilamentFlexibleContentBlockPages::config()->isParentEnabled($this->getModel()))
31+
->url(static::getResource()::getUrl('tree')),
2732
];
2833
}
2934

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
3+
namespace Statikbe\FilamentFlexibleContentBlockPages\Resources\PageResource\Pages;
4+
5+
use SolutionForest\FilamentTree\Resources\Pages\TreePage as BasePage;
6+
use Statikbe\FilamentFlexibleContentBlockPages\Resources\PageResource;
7+
8+
class ManagePageTree extends BasePage
9+
{
10+
protected static string $resource = PageResource::class;
11+
12+
// TODO make page depth configurable
13+
protected static int $maxDepth = 2;
14+
15+
protected function getActions(): array
16+
{
17+
return [
18+
$this->getCreateAction(),
19+
];
20+
}
21+
22+
protected function hasDeleteAction(): bool
23+
{
24+
return false;
25+
}
26+
27+
protected function hasEditAction(): bool
28+
{
29+
return true;
30+
}
31+
32+
protected function hasViewAction(): bool
33+
{
34+
return false;
35+
}
36+
37+
protected function getHeaderWidgets(): array
38+
{
39+
return [];
40+
}
41+
42+
protected function getFooterWidgets(): array
43+
{
44+
return [];
45+
}
46+
47+
// CUSTOMIZE ICON OF EACH RECORD, CAN DELETE
48+
// public function getTreeRecordIcon(?\Illuminate\Database\Eloquent\Model $record = null): ?string
49+
// {
50+
// return null;
51+
// }
52+
}

0 commit comments

Comments
 (0)