dakujem/selectoo

SelectBox & MultiSelectBox 混合输入,具有懒加载和异步加载选项的能力,可用于与 Select2、Selectize、Chosen 和类似 UI 库配合使用。

2.1 2023-10-27 11:33 UTC

This package is auto-updated.

Last update: 2024-09-18 20:33:41 UTC


README

PHP from Packagist

SelectBox & MultiSelectBox 混合输入,具有懒加载和异步加载选项的能力,可用于与 Select2、Selectize、Chosen 和类似 UI 库配合使用。

Selectoo 的目标是提供一个灵活的工具,用于创建可重用的选择输入。

特性

  • 支持单选或多选模式
    • 单选模式大致等同于 SelectBox
    • 多选模式大致等同于 MultiSelectBox
  • 使用回调函数按需(懒加载)加载选项
    • 选项可以异步加载,使用 AJAX
    • 只有当真正需要时才加载选项
  • 可以使用 UI 库或自定义脚本进行皮肤化(见下文)
  • 依赖/级联输入

用法/用例

可重用 的输入,具有特定配置

  • 带有特殊配置选项和其他应用程序逻辑的 select2 皮肤(或其他库)输入
  • 带有 AJAX 的自动完成
  • 标签
  • 在选中时修改 DOM 的自定义 UI 脚本
  • 级联/依赖输入

请参阅包含的示例以获取更多信息。

配置 Selectoo 输入

创建一个具有固定选项的(多)选择框

$items = ['a', 'b', 'c', 'd',];
$input = new Selectoo($label, $items, $multiselect);

或一个按需(懒加载)加载选项的(多)选择框。

$input = new Selectoo($label, [$repository, 'fetchAll'], $multiselect);

可选地附加并配置一个引擎

$input->setEngine(new Select2Engine);

$input->getEngine()

	->placeholder('Select a user', true)
	->width('width: 100%', true)
	->closeOnSelect(false, true)

;

Select2Engine 使用魔法选项(或 setOption 方法)进行配置。魔法方法(或选项名称)的名称表示 Select2 配置选项

懒加载选项 & AJAX

当 Selectoo 实例给出 "item callback" 可调用对象而不是项目数组时,使用懒加载。可调用对象应返回一个项目列表。

项目回调还作为值的验证器。它接收原始值作为第一个参数(以及输入实例作为第二个参数)。回调应返回一个可能的值数组(这些是项目),其形式与设置到 SelectBoxMultiSelectBox 输入中的项目完全相同。然后,将原始值与返回的项目进行比较和筛选。这种方法确保了数据的有效性。

如果您使用远程项目加载(ajax/api 加载选项),则非常重要设置此回调。

请参阅 示例 AJAX 演示者,包括输入工厂和用户存储库示例。

AJAX 配置可以非常简单

(new Select2Engine())
	->ajax('{url: "' . $link . '", dataType: "json" }')
;

支持的 UI 库

Selectoo 使用 "脚本引擎" 生成 JavaScript UI 脚本以及 HTML 输入元素。可以通过调用 $selectoo->setEngine($engine) 将任何脚本引擎附加到 Selectoo 实例。

  • select2/select2
    • 使用 Select2Engine 实例
  • selectize/selectize.js
    • 待实施
  • harvesthq/chosen
    • 待实施

可以轻松创建实现 ScriptEngineInterface 接口的自定义引擎。

工厂

为了实现最佳的可重用性,我强烈建议使用工厂来处理具有更多逻辑的输入,通常这些涉及从存储或外部资源获取数据以及 JS/UI 配置、处理事件和值验证。

请参阅简单示例

脚本管理

由引擎生成的脚本可以通过管理例程进行后处理和/或收集。这种方法可以用来收集和将脚本放置在页面末尾,以及解决在页面内编写脚本并在HTML文件末尾加载jQuery时出现的问题。

有关更多信息,请参阅脚本管理示例

依赖选择/级联输入

示例正在准备中。

通常需要什么

  • 管理更改事件的UI脚本
  • Select2配置,将主输入的值发送到AJAX请求的URL中
  • 基于值的仓库过滤
  • 接收主值并使用URL中的值发起仓库请求的API端点
  • “项目回调”也使用来自表单的值发起仓库请求

请注意,当调用项目回调时,可以使用表单对象中的值来检查主值

上面所说的“主值”是指Selectoo实例所依赖的输入的值

按照这些步骤,可以创建依赖的Selectoo输入并验证值。

示例

请参阅仓库中包含的示例,以更好地了解Selectoo何时有用。

与Nette SelectBox & MultiSelectBox相比的显著差异

  • 禁用Selectoo输入不会修改/重置其值,因此可以在不丢失信息的情况下重新启用
  • 禁用输入的处理方式不同 - 即使输入(或项目)被禁用,也会始终加载原始值。在调用getValue方法时将过滤禁用值

要求

您还应该安装Select2版本4以使用Select2Engine,请参阅Select2文档

您可以在几分钟内安装任何其他选择输入“皮肤”并为其实现自己的引擎。

Selectoo也可以不使用此类“皮肤”。