sunshineup/silverstripe-ajax-select-field

使用 vue.js 的 Silverstripe Ajax 选择字段

安装: 45

依赖项: 1

建议者: 1

安全: 0

星标: 1

关注者: 2

分支: 4

类型:silverstripe-vendormodule

0.2.1 2021-06-11 00:00 UTC

This package is auto-updated.

Last update: 2024-09-07 04:23:26 UTC


README

此模块向 Silverstripe 添加了 AjaxSelectFieldAjaxMultiSelectField,以便从 Ajax 端点返回的结果中选择。

结果获取

结果可以通过自定义端点(使用 setEndpoint(ENDPOINT_URL) 方法)或通过传递给字段的回调函数 setSearchCallback 获取(见以下示例)来检索。

响应必须是包含每个结果一个对象的 JSON 数组,其中每个结果都必须至少有一个 idtitle 字段,例如

[
  {
    "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) [仅多选]

定义要显示为选定项的字段列表,基本上是表列。默认为 idtitle

安装

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

维护者