codicastudio / multi-select
Requires
- php: ^7.4 || ^8.0
- laravel/nova: ^3.0
This package is auto-updated.
Last update: 2024-09-27 13:34:55 UTC
README
此 Laravel Nova 扩展包向 Nova 字段库中添加了多选功能。
要求
- Laravel Nova ^2.0.11
对于小于 2.0.11 版本的 Nova,请使用 nova-multiselect-field
版本 1.1.6
或更早版本。
此限制是由于在 2.0.11 版本中添加了 Nova::translatable()
方法,这使得本包可以进行本地化。
功能
- 具有搜索功能的下拉多选
- 具有搜索功能的单选
- 拖放重新排序功能
- 依赖其他多选实例
截图
安装
通过 Composer 在 Laravel Nova 项目中安装此包
composer require optimistdigital/nova-multiselect-field
使用方法
该字段的使用方式类似于 Nova 的原生选择字段。数据库中的字段类型应为基于文本的(例如 string
、text
或 varchar
),选择值以字符串化的 JSON 数组的形式存储。
use OptimistDigital\MultiselectField\Multiselect; public function fields(Request $request) { return [ Multiselect ::make('Favourite football teams', 'football_teams') ->options([ 'liverpool' => 'Liverpool FC', 'tottenham' => 'Tottenham Hotspur', 'bvb' => 'Borussia Dortmund', 'bayern' => 'FC Bayern Munich', 'barcelona' => 'FC Barcelona', 'juventus' => 'Juventus FC', 'psg' => 'Paris Saint-Germain FC', ]) // Optional: ->placeholder('Choose football teams') // Placeholder text ->max(4) // Maximum number of items the user can choose ->saveAsJSON() // Saves value as JSON if the database column is of JSON type ->optionsLimit(5) // How many items to display at once ->reorderable() // Allows reordering functionality ->singleSelect() // If you want a searchable single select field ]; }
选项组
支持选项组。它们的语法与 Laravel 的选项组语法 相同。
在此示例中(来自 Nova 文档),所有值都按 group
键分组
->options([ 'MS' => ['label' => 'Small', 'group' => 'Men Sizes'], 'MM' => ['label' => 'Medium', 'group' => 'Men Sizes'], 'WS' => ['label' => 'Small', 'group' => 'Women Sizes'], 'WM' => ['label' => 'Medium', 'group' => 'Women Sizes'], ])
依赖
您可以使用 dependsOn
使多选依赖另一个多选。这也需要指定 ->dependsOnOptions()
。来自 dependsOn
多选的值必须是选项的键,而值必须是一个选项的键值字典,如通常那样。
使用方法
Multiselect::make('Country', 'country')
->options([
'IT' => 'Italy',
'SG' => 'Singapore',
]),
Multiselect::make('Language', 'language')
->dependsOn('country')
->dependsOnOptions([
'IT' => [
'it' => 'Italian',
],
'SG' => [
'en' => 'English',
'ms' => 'Malay',
'zh' => 'Chinese',
]
]),
// Optionally define max number of values
->dependsOnMax([
'IT' => 1,
'SG' => 3,
])
选项
您可以传递给字段的可能选项,使用选项名称作为函数,例如 ->placeholder('选择花生')
。
本地化
可以使用以下发布命令发布翻译文件
php artisan vendor:publish --provider="OptimistDigital\MultiselectField\FieldServiceProvider" --tag="translations"
然后您可以根据自己的喜好编辑字符串。
覆盖详细信息字段
您可以通过覆盖详细信息视图值组件来自定义它。
为 NovaMultiselectDetailFieldValue
创建一个新的组件,并在您的 app.js
中注册它。该组件接收两个属性:field
和 values
。values
属性是一个选中的标签数组。
// in NovaMultiselectDetailFieldValue.vue <template> <div class="relative rounded-lg bg-white shadow border border-60" v-if="values"> <div class="overflow-hidden rounded-b-lg rounded-t-lg"> <div class="border-b border-50 cursor-text font-mono text-sm py-2 px-4" v-for="(value, i) of values" :key="i"> {{ value }} </div> </div> </div> <div v-else>—</div> </template> <script> export default { props: ['field', 'values'], }; </script>
// in app.js import NovaMultiselectDetailFieldValue from './NovaMultiselectDetailFieldValue'; Nova.booting((Vue, router, store) => { Vue.component('nova-multiselect-detail-field-value', NovaMultiselectDetailFieldValue); });
鸣谢
许可协议
本项目是开源软件,根据 MIT 许可协议 授权。