dewsign / nova-spaces
Laravel Nova 的空间
v1.2.1
2020-02-07 10:35 UTC
Requires
- php: >=7.0.0
- benjaminhirsch/nova-slug-field: ^1.0
- dewsign/nova-repeater-blocks: ^1.0.4
- epartment/nova-dependency-container: ^1.1
- laravel/framework: >=5.0.0
- maxfactor/support: ^2.0.0
- silvanite/brandenburg: ^1.0
- silvanite/nova-field-cloudinary: ^1.0
- silvanite/nova-field-hidden: ^1.0
Requires (Dev)
- squizlabs/php_codesniffer: >=3.1
This package is auto-updated.
Last update: 2024-09-07 21:00:57 UTC
README
创建 "空间" 来在您的网站各处显示,这些空间可以填充自定义块。
安装
composer require dewsign/nova-spaces
php artisan migrate
使用方法
要开始使用,您需要创建您的第一个空间区域。例如,侧边栏或促销。您可以自由地组织文件,或者如果您愿意,可以使用示例中的约定。
我们简单地将默认 Nova 文件夹用于注册我们的新空间,因为它会自动加载。
// app/Nova/SidebarSpace.php namespace App\Nova; use Dewsign\NovaSpaces\Nova\Space; class SidebarSpace extends Space { public static $zone = 'sidebar'; public static function label() { return __('Sidebar Items'); } }
使用 $zone
可以在数据库和代码中区分不同的空间区域,避免了为每个新的空间区域需要新表。
您的新空间区域现在应该在 Nova 中可用,默认的自定义链接项是唯一选项。
输出空间(Blade)
我们目前不假设您希望如何呈现空间。虽然计划在将来提供一些围绕常见用法的辅助函数。现在,请像访问任何其他 Eloquent 模型一样访问 Dewsign\NovaSpaces\Models\Space
模型,以检索您所需的空间项。
以下是一个基本的内联 blade 示例。
@foreach(Space::active()->whereZone('sidebar')->get() as $spaceItem) {!! $spaceItem->view !!} {!! or !!} <a href="{{ $spaceItem->action }}">{{ $spaceItem->label }}</a> @endforeach
您可以通过 spaces
关系访问任何子项。
@foreach($spaceItem->spaces as $item) {!! $item->view !!} @endforeach
扩展
您可以通过创建一些新文件并加载它们来创建自己的空间项类型。简而言之,您需要
- 一个完整的 Eloquent 模型,包括迁移/数据库
- 一个 Nova 资源来管理内容
- 一个 blade 视图来呈现项
// app/Space/Models/Section.php use Dewsign\NovaSpaces\Models\SpaceItem; class Section extends SpaceItem { public static $repeaterBlockViewTemplate = 'space.section'; public function resolveAction() { return $this->link_url; } public function resolveLabel($model = null) { return $model->title ?? $this->heading; } }
// database/migrations/your_migration.php Schema::create('space_sections', function (Blueprint $table) { $table->increments('id'); $table->string('heading')->nullable(); $table->text('content')->nullable(); $table->string('link_url')->nullable(); $table->string('link_title')->nullable(); $table->timestamps(); });
// app/Space/Nova/Section.php ... use Dewsign\NovaSpaces\Nova\Items\SpaceItem; class Section extends SpaceItem { public static $model = App\Space\Models\Section::class; public static $title = 'heading'; public static $search = [ 'heading', 'content', 'link_url', ]; public static function label() { return __('Section'); } public function fields(Request $request) { return [ Text::make('Heading'), Markdown::make('Content'), Text::make('Link Url'), Text::make('Link Title'), ]; } }
最后,通过 novaspaces
配置加载新的空间项
return [ "repeaters" => [ ... \App\Space\Nova\Section::class, ], ];