sunshineup / silverstripe-ajax-select-field
使用 vue.js 的 Silverstripe Ajax 选择字段
Requires
- php: >=7.1
- ext-json: *
- silverstripe/framework: ^4
This package is auto-updated.
Last update: 2024-09-07 04:23:26 UTC
README
此模块向 Silverstripe 添加了 AjaxSelectField
和 AjaxMultiSelectField
,以便从 Ajax 端点返回的结果中选择。
结果获取
结果可以通过自定义端点(使用 setEndpoint(ENDPOINT_URL)
方法)或通过传递给字段的回调函数 setSearchCallback
获取(见以下示例)来检索。
响应必须是包含每个结果一个对象的 JSON 数组,其中每个结果都必须至少有一个 id
和 title
字段,例如
[ { "id": 1, "title": "Home" }, { "id": 2, "title": "Contact Us" } ]
存储
单选(AjaxSelectField)
默认情况下,整个结果(及其所有属性)将作为 JSON 字符串存储在数据库中,尽管也存在“仅 ID”模式。
因此,数据库值将类似于 { "id": "1", "title": "Home" }
,其中 idOnlyMode = false
。启用此模式后,仅存储 ID(类似于默认的 DropdownField)。
多选(AjaxMultiSelectField)
结果将存储为包含所选项目 ID 的 JSON 数组,例如 ["1", "2"]
。
方法/选项
setEndpoint(string)
通过传递整个 URL 设置自定义搜索端点。
setSearchCallback(callable)
传递一个在每次搜索请求时执行的回调函数。使用字段类中定义的 search
方法。
setMinSearchChars(int)
更改执行搜索所需字符数(默认为 3)。
setPlaceholder(string)
更改输入字段的默认占位符文本。
setGetVars(array)
设置要添加到每个请求中的自定义 GET 变量列表。必须是格式 ["key" => "value"]。
setSearchHeaders(array)
设置与每个搜索请求一起发送的自定义请求头列表。必须是格式 ["key" => "value"]。
setIdOnlyMode(bool) [仅单选]
启用/禁用 idOnlyMode。如果启用,则字段仅存储所选结果“id”。否则,将存储完整的结果有效负载。
请注意,搜索端点或回调必须支持带有 ?id 参数的请求,如果此模式处于活动状态,则仅返回该单个结果。
setDisplayFields(array) [仅多选]
定义要显示为选定项的字段列表,基本上是表列。默认为 id
和 title
。
安装
composer require sunnysideup/silverstripe-ajax-select-field
使用示例
单选
AjaxSelectField::create('MyField', 'My Field Label') ->setSearchCallback( function ($query, $request) { // This part is only required if the idOnlyMode is active if ($id = $request->getVar('id')) { $page = SiteTree::get()->byID($id); return [ 'id' => $page->ID, 'title' => $page->Title ]; } $results = []; foreach (SiteTree::get()->filter('Title:PartialMatch', $query) as $page) { $results[] = [ 'id' => $page->ID, 'title' => $page->Title ]; } return $results; })
多选
AjaxMultiSelectField::create('MyField', 'My Field Label') ->setSearchCallback( function ($query, $request) { // Return detail info for the selected ids on load if ($ids = $request->getVar('ids')) { foreach (SiteTree::get()->filter('ID', $ids) as $page) { return [ 'id' => $page->ID, 'title' => $page->Title, 'urlSegment' => $page->URLSegment // example of a custom field, see also below ]; } } $results = []; foreach (SiteTree::get()->filter('Title:PartialMatch', $query) as $page) { $results[] = [ 'id' => $page->ID, 'title' => $page->Title, 'urlSegment' => $page->URLSegment ]; } return $results; })->setDisplayFields([ 'title' => 'Custom Label', 'urlSegment' => 'URL' ])
要求
- SilverStripe ^4
- PHP >=7.1
- ext-json
维护者
- Level51 hallo@lvl51.de