Skip to content
This repository has been archived by the owner on May 11, 2023. It is now read-only.

Commit

Permalink
Add selection field for slug generation when updating post to be able…
Browse files Browse the repository at this point in the history
… to change title without chaning slug
  • Loading branch information
eleriojavere committed Apr 5, 2021
1 parent 5a49c47 commit fe043bc
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 3 deletions.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@
"doctrine/dbal": "^2.9",
"optimistdigital/nova-locale-field": "^2.0",
"whitecube/nova-flexible-content": "^0.2.4",
"optimistdigital/nova-multiselect-field": ">=1.8.1"
"optimistdigital/nova-multiselect-field": ">=1.8.1",
"digital-creative/conditional-container": "^1.3"
},
"autoload": {
"psr-4": {
Expand Down
2 changes: 1 addition & 1 deletion resources/views/navigation.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
d="M16,15H9V13H16V15M19,11H9V9H19V11M19,7H9V5H19V7M3,5V21H19V23H3A2,2 0 0,1 1,21V5H3M21,1A2,2 0 0,1 23,3V17C23,18.11 22.11,19 21,19H7A2,2 0 0,1 5,17V3C5,1.89 5.89,1 7,1H21M7,3V17H21V3H7Z"/>
</svg>
<span class="sidebar-label">
{{config('nova-blog.navigation_title')}}
{{config('nova-blog.navigation_title', 'Blog')}}
</span>
</h3>

Expand Down
7 changes: 7 additions & 0 deletions src/Models/Post.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@ public function relatedPosts()
protected static function boot()
{
parent::boot();
static::updating(function ($post) {
if ($post->slug_generation === 'new_from_title') {
$post->slug = str_replace(' ', '-', $post->title);
}
unset($post->slug_generation);
});
static::saving(function ($post) {
if ($post->is_pinned) {
Post::where('is_pinned', true)->each(function ($pinnedPost) {
Expand All @@ -66,6 +72,7 @@ protected static function boot()
});
});
}

public function childDraft()
{
return $this->hasOne(Post::class, 'draft_parent_id', 'id');
Expand Down
12 changes: 11 additions & 1 deletion src/Nova/Post.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use Laravel\Nova\Fields\Markdown;
use Laravel\Nova\Fields\Textarea;
use Laravel\Nova\Fields\BelongsTo;
use Laravel\Nova\Fields\Select;
use Froala\NovaFroalaField\Froala;
use OptimistDigital\NovaBlog\NovaBlog;
use Whitecube\NovaFlexibleContent\Flexible;
Expand All @@ -23,9 +24,12 @@
use OptimistDigital\NovaLocaleField\LocaleField;
use OptimistDigital\NovaBlog\Models\RelatedPost;
use OptimistDigital\MultiselectField\Multiselect;
use DigitalCreative\ConditionalContainer\ConditionalContainer;
use DigitalCreative\ConditionalContainer\HasConditionalContainer;

class Post extends TemplateResource
{
use HasConditionalContainer;
public static $title = 'name';
public static $model = 'OptimistDigital\NovaBlog\Models\Post';
public static $displayInNavigation = false;
Expand Down Expand Up @@ -77,7 +81,13 @@ public function fields(Request $request)
config('nova-blog.use_trix') === true ? Trix::make('Title', 'title')->rules('required')->alwaysShow() : Title::make('Title', 'title')->rules('required')->alwaysShow(),
config('nova-blog.hide_pinned_post_option') === true ? null : Boolean::make('Is pinned', 'is_pinned'),
config('nova-blog.include_include_in_bloglist') === true ? Boolean::make('Include in bloglist', 'include_in_bloglist') : null,
Slug::make('Slug', 'slug')->rules('required', 'alpha_dash_or_slash')->onlyOnForms(),
Slug::make('Slug', 'slug')->rules('required', 'alpha_dash_or_slash')->hideWhenUpdating()->hideFromIndex()->hideFromDetail(),
Select::make('Slug', 'slug_generation')->options(['original' => 'Use existing', 'new_from_title' => 'Generate new from title', 'custom' => 'Create custom'])->hideWhenCreating()->hideFromDetail()->hideFromIndex()->rules('required')->resolveUsing(function () {
return $this->slug_generation ?? 'original';
}),
ConditionalContainer::make([
Slug::make('Custom slug', 'slug')->rules('required'),
])->if('slug_generation = custom'),
Text::make('Slug', function () {
$previewToken = $this->childDraft ? $this->childDraft->preview_token : $this->preview_token;
$previewPart = $previewToken ? '?preview=' . $previewToken : '';
Expand Down

0 comments on commit fe043bc

Please sign in to comment.