yaroslawww / nova-page-settings
4.4.0
2023-08-28 12:22 UTC
Requires
- php: ^8.1
- laravel/nova: ^4.13
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.15
- guzzlehttp/guzzle: ^7.7
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.0
- psalm/plugin-laravel: ^2.8
- vimeo/psalm: ^5.8
README
为laravel nova添加设置配置的临时解决方案。
| Nova | 软件包 |
|---|---|
| V1 | V1, V2 |
| V4 | V3, V4 |
安装
您可以通过composer安装此软件包
composer require think.studio/nova-page-settings
可选发布配置
php artisan vendor:publish --provider="ThinkOne\NovaPageSettings\ServiceProvider" --tag="config"
使用
管理部分
- 创建设置表(迁移)
public function up() { Schema::create( config('nova-page-settings.default.settings_table'), function ( Blueprint $table ) { \Thinkone\NovaPageSettings\MigrationHelper::defaultColumns($table); } ); }
- 创建资源
namespace App\Nova\Resources; class PageSettingResource extends Resource { use \Thinkone\NovaPageSettings\Nova\Resources\Traits\AsPageSetting; public static $model = \Thinkone\NovaPageSettings\Adapters\CMSPageSettingModel::class; public static $searchable = false; public static $globallySearchable = false; public static $title = \Thinkone\NovaPageSettings\QueryAdapter\InternalSettingsModel::ATTR_NAME; public static $perPageOptions = [ 1000 ]; public static function label() { return 'Custom settings'; } public static function uriKey() { return 'custom-page-settings'; } }
- 在您在步骤3中指定的文件夹中创建模板。系统将自动查找文件夹中的所有模板。
namespace App\Nova\PageSettings\Templates; use Laravel\Nova\Fields\Image; use Laravel\Nova\Fields\Text; use Laravel\Nova\Fields\Textarea; use Laravel\Nova\Http\Requests\NovaRequest; use Thinkone\NovaPageSettings\Templates\BaseTemplate; use NovaFlexibleContent\Flexible; class MarketingPageSettings extends BaseTemplate { public function fields(NovaRequest $request) { return [ // NOTICE: do not forget use "templateKey" method Email::make('Notification email', $this->templateKey('notification_email')); Flexible::make('Slider', $this->templateKey('slider')) ->addLayout('Custom Slide', 'custom_slide', [ Text::make('Title', 'title'), Textarea::make('Text', 'text'), Text::make('Button Text', 'btn_text'), Text::make('Button Link', 'btn_link'), ]) ->limit(4) ->button('Add Slide'), // ... other fields ]; } }
- 结果,您应该看到类似以下内容
前端部分
/** @var \Illuminate\Support\PageSettingsCollection $pageSettings */ $pageSettings = MarketingPageSettings::retrieve(); // get array of slides using helper $slides = $pageSettings->getSettingValue( 'slider', 'array', []); // get typed value $slides = $pageSettings->arraySettingValue( 'slider', []); $slides = $pageSettings->stringSettingValue( 'notification_email'); // or /** @var array $viewData */ $viewData = MarketingPageSettings::viewData(); echo $viewData['slider'];
使用灵活
如果您需要使用灵活内容软件包,您将需要覆盖默认模型
namespace App\Models; class PageSetting extends \Thinkone\NovaPageSettings\Model\PageSetting { use \NovaFlexibleContent\Concerns\HasFlexible; public function valueFlexible(array $layoutMapping = []): \NovaFlexibleContent\Layouts\LayoutsCollection { return $this->flexible('value', $layoutMapping); } }
