optimistdigital / nova-page-manager
Laravel Nova的页面和区域管理器。
Requires
- php: >=8.0
- laravel/nova: ^4.13
- outl1ne/nova-multiselect-filter: ^4.0.2
- outl1ne/nova-translatable: ^2.0.4
- outl1ne/nova-translations-loader: ^5.0
- dev-main
- 5.9.2
- 5.9.1
- 5.9.0
- 5.8.6
- 5.8.5
- 5.8.4
- 5.8.3
- 5.8.2
- 5.8.1
- 5.8.0
- 5.8.0-RC3
- 5.8.0-RC2
- 5.8.0-RC1
- 5.7.x-dev
- 5.7.3
- 5.7.2
- 5.7.1
- 5.7.0
- 5.6.2
- 5.6.1
- 5.6.0
- 5.5.4
- 5.5.3
- 5.5.2
- 5.5.1
- 5.5.0
- 5.4.3
- 5.4.2
- 5.4.1
- 5.4.0
- 5.3.4
- 5.3.3
- 5.3.2
- 5.3.1
- 5.3.0
- 5.2.0
- 5.1.2
- 5.1.1
- 5.1.0
- 5.0.8
- 5.0.7
- 5.0.6
- 5.0.5
- 5.0.4
- 5.0.3
- 5.0.2
- 5.0.1
- 5.0.0
- v4.x-dev
- 4.0.10
- 4.0.9
- 4.0.8
- 4.0.7
- 4.0.6
- 4.0.5
- 4.0.4
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 3.5.3
- 3.5.2
- 3.5.1
- 3.5.0
- 3.4.0
- 3.3.0
- 3.2.5
- 3.2.4
- 3.2.3
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.9
- 3.1.8
- 3.1.7
- 3.1.6
- 3.1.5
- 3.1.4
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.9.9
- 1.9.8
- 1.9.7
- 1.9.6
- 1.9.5
- 1.9.4
- 1.9.3
- 1.9.2
- 1.9.1
- 1.9.0
- 1.8.2
- 1.8.1
- 1.8.0
- 1.7.4
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- 1.6.1
- 1.6.0
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- dev-dependabot/npm_and_yarn/npm_and_yarn-d66d039ac5
- dev-bugfix/handle-nested-fields
- dev-feature/validation-support
This package is auto-updated.
Last update: 2024-09-17 03:41:13 UTC
README
此Laravel Nova包允许您为您的前端应用程序创建和管理页面和区域。
要求
- PHP >=8.0
- laravel/nova ^4.13
特性
- 页面和区域管理,带有自定义字段
- 多语言支持
屏幕截图
安装
使用Composer在Laravel Nova项目中安装此包并运行迁移
# Install package composer require outl1ne/nova-page-manager # Run automatically loaded migrations php artisan migrate
发布nova-page-manager
配置文件并根据您的喜好编辑它
php artisan vendor:publish --provider="Outl1ne\PageManager\NPMServiceProvider" --tag="config"
在NovaServiceProvider
的tools()
方法中注册工具
// in app/Providers/NovaServiceProvider.php public function tools() { return [ // ... new \Outl1ne\PageManager\PageManager() ->withSeoFields(fn () => []), // Optional ]; }
使用方法
创建模板
可以使用以下Artisan命令创建模板
php artisan npm:template {className}
这将询问您一些额外的详细信息,并在App\Nova\Templates
中创建一个基本模板。
基本模板公开了一些可覆盖的函数
// Name displayed in CMS public function name(Request $request) { return parent::name($request); } // Fields displayed in CMS public function fields(Request $request): array { return []; } // Resolve data for serialization public function resolve($page): array { // Modify data as you please (ie turn ID-s into models) return $page->data; } // Page only // Optional suffix to the route (ie {blogPostName}) public function pathSuffix() { return null; }
注册模板
所有模板都必须在config/nova-page-manager.php
文件中注册。
// in /config/nova-page-manager.php // ... 'templates' => [ 'pages' => [ 'home-page' => [ 'class' => '\App\Nova\Templates\HomePageTemplate', 'unique' => true, // Whether more than one page can be created with this template ], ], 'regions' => [ 'header' => [ 'class' => '\App\Nova\Templates\HeaderRegionTemplate', 'unique' => true, ], ], ], // ...
定义区域
区域在配置文件中定义。
// in /config/nova-page-manager.php // ... 'locales' => [ 'en' => 'English', 'et' => 'Estonian', ], // OR 'locales' => function () { return Locale::all()->pluck('name', 'key'); }, // or if you wish to cache the configuration, pass a function name instead: 'locales' => NPMConfiguration::class . '::locales', // ...
添加前端页面链接
要在slug旁边显示实际页面的链接,请向config/nova-page-manager.php
中的base_url
键添加或覆盖闭包。
// in /config/nova-page-manager.php 'base_url' => 'https://webshop.com', // Will add slugs to the end to make the URLs // OR 'base_url' => function ($page) { return env('FRONTEND_URL') . '/' . $page->path; },
覆盖模型和资源
您可以覆盖页面/区域模型或资源,只需在配置文件中设置新类。
高级使用
不可翻译的面板
在某些情况下,翻译面板的子字段而不是整个面板可能更合理。这是可能的,但由于该功能非常新且实验性,因此被认为是“高级用例”,此外,其开发者体验也值得怀疑。
您可以通过以下方式创建一个不可翻译的面板
// In your PageTemplate class public function fields() { return [ Panel::make('Some panel', [ Text::make('Somethingsomething'), Text::make('Sub-translatable', 'subtranslatable') ->translatable(), ]) ->translatable(false), ]; }
这将创建一个具有__
键的键。这意味着页面数据最终将看起来像这样
[ '__' => [ 'somethingsomething' => 'your value', 'subtranslatable' => [ 'en' => 'eng value', 'et' => 'et value' ] ], 'en' => [], 'et' => [], ]
辅助函数
辅助函数可以在Outl1ne\PageManager\Helpers\NPMHelpers
类中找到。
NPMHelpers::getPagesStructure()
对其模板类调用resolve()
并返回所有页面,子页面递归地嵌套在children
数组键中。
NPMHelpers::getPages()
对其模板类调用resolve()
并返回所有页面。返回一个数组数组。
NPMHelpers::getRegions()
对其模板类调用resolve()
并返回所有区域。返回一个数组数组。
NPMHelpers::getPageByTemplate($templateSlug)
通过其模板slug(来自配置文件)查找单个页面,对其模板类调用resolve()
并返回它。
NPMHelpers::getPagesByTemplate($templateSlug)
与getPageByTemplate
相同,但返回页面数组。
NPMHelpers::formatPage($page)
对其页面模板类调用resolve()
并返回页面作为数组。
NPMHelpers::formatRegion($region)
对其区域模板类调用resolve()
并返回区域作为数组。
本地化
可以使用以下命令发布翻译文件
php artisan vendor:publish --provider="Outl1ne\PageManager\ToolServiceProvider" --tag="translations"
您可以将翻译添加到resources/lang/vendor/nova-page-manager/
中,通过创建一个具有区域名称的新翻译文件(例如et.json
),并从现有的en.json
复制JSON。
致谢
许可
诺瓦页面管理器是一款开源软件,遵循MIT许可证。