novius / laravel-nova-menu
A Nova resource tool to manage menus in your application.
Installs: 8 434
Dependents: 0
Suggesters: 0
Security: 0
Stars: 7
Watchers: 3
Forks: 8
Open Issues: 0
Requires
- php: ^8.1
- illuminate/support: ^9.0 | ^10.0
- laravel/nova: ^4.0
- novius/laravel-nova-order-nestedset-field: ^4.0
- spatie/laravel-sluggable: ^3.4.0
Requires (Dev)
- laravel/pint: ^1.7
- orchestra/testbench: ^7.4.0
- phpunit/phpunit: ^9.3.3
This package is auto-updated.
Last update: 2023-08-26 08:56:07 UTC
README
A Nova tool to manage menus.
Requirements
- PHP >= 8.1
- Laravel Nova >= 4.0
- Laravel Framework >= 9.0 | >= 10.0
NOTE: These instructions are for Laravel >= 9.0 and Laravel Nova 4.0. If you are using prior version, please see the previous version's docs.
Installation
composer require novius/laravel-nova-menu
Then, launch migrations
php artisan migrate
Configuration
Some options that you can override are available.
php artisan vendor:publish --provider="Novius\LaravelNovaMenu\LaravelNovaMenuServiceProvider" --tag="config"
Edit default templates
Run:
php artisan vendor:publish --provider="Novius\LaravelNovaMenu\LaravelNovaMenuServiceProvider" --tag="views"
Usage
Blade directive
You can display menu with :
@menu("slug-of-menu")
By default a fallback to app()->getLocale() is activated.
If you want force a specific slug with no fallback you can call :
@menu("slug-of-menu|no-locale-fallback")
Override views
You can override views with :
php artisan vendor:publish --provider="Novius\LaravelNovaMenu\LaravelNovaMenuServiceProvider" --tag="views"
Manage internal link possibilities
linkable_objects
You can add dynamic routes to linkable_objects
array (in configuration file).
Example with App\Models\Foo
Model.
In this example we have a route defined as following :
Route::get('foo/{slug}', 'FooController@show')->name('foo.show');
First, you have to add the Model to laravel-nova-menu.php
config file.
return [ 'linkable_objects'=> [ App\Models\Foo:class => 'foo.label', // foo.label is a translation key ], ... ];
Then, you have to implements Linkable
trait to the model.
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Novius\LaravelNovaMenu\Traits\Linkable; class Foo extends Model { use Linkable; public function linkableUrl(): string { return route('foo.show', ['slug' => $this->slug]); } public function linkableTitle(): string { return $this->name; } }
linkable_routes
You can also add static routes to linkable_routes
array (in configuration file).
Example with a route with name home
.
return [ 'linkable_objects'=> [ 'contact' => 'contact.page', // contact.page is a translation key ], ... ];
Lint
Run php-cs with:
composer run-script lint
Contributing
Contributions are welcome! Leave an issue on Github, or create a Pull Request.
Licence
This package is under GNU Affero General Public License v3 or (at your option) any later version.