企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 列表过滤器 ### [](https://octobercms.com/docs/backend/lists#list-filters)使用列表过滤器 可以通过在列表配置中[添加过滤器定义](https://octobercms.com/docs/backend/lists#adding-filters)来[过滤](https://octobercms.com/docs/backend/lists#adding-filters)列表。同样,筛选器由它们自己的包含筛选器作用域的配置文件驱动,每个作用域都是一个可以过滤列表的方面。下一个示例显示了过滤器定义文件的典型内容。 ~~~ # =================================== # Filter Scope Definitions # =================================== scopes: category: label: Category modelClass: Acme\Blog\Models\Category conditions: category_id in (:filtered) nameFrom: name status: label: Status type: group conditions: status in (:filtered) options: pending: Pending active: Active closed: Closed published: label: Hide published type: checkbox default: 1 conditions: is_published <> true approved: label: Approved type: switch default: 2 conditions: - is_approved <> true - is_approved = true created_at: label: Date type: date conditions: created_at >= ':filtered' published_at: label: Date type: daterange conditions: created_at >= ':after' AND created_at <= ':before' ~~~ ### [](https://octobercms.com/docs/backend/lists#filter-scope-options)范围选项 您可以为每个范围指定以下选项(如果适用): | 选项 | 描述 | | --- | --- | | **label** | 向用户显示过滤器范围时的名称。 | | **type** | 定义应如何呈现此范围(请参见下面的[范围类型](https://octobercms.com/docs/backend/lists#scope-types))。默认值:组。 | | **conditions** | 指定要应用于列表模型查询的原始where语句,该`:filtered`参数表示过滤后的值。 | | **scope** | 指定在**列表模型中**定义的[查询范围方法](https://octobercms.com/docs/database/model#query-scopes),以应用于列表查询。第一个参数将包含查询对象(按照常规范围方法),第二个参数将包含过滤后的值 | | **options** | 如果按多个项目过滤时使用的选项,则此选项可以在`modelClass`模型中指定数组或方法名称。 | | **nameFrom** | 如果按多个项目过滤,则显示名称的属性,该属性取自`modelClass`模型的所有记录。 | | **default** | 可以是整数(开关,复选框,数字)或数组(组,日期范围,数字范围)或字符串(日期)。 | | **permissions** | 当前后端用户必须具有的权限才能使用过滤器作用域。支持单个权限的字符串或仅需要一个权限即可授予访问权限的一组权限。 | | **dependsOn** | 此作用域[依赖](https://octobercms.com/docs/backend/lists#filter-scope-dependencies)的字符串或其他作用域名称的数组。修改其他范围后,此范围将更新。 | ### 筛选器依存关系 筛选器作用域可以通过定义`dependsOn`[scope选项](https://octobercms.com/docs/backend/lists#filter-scope-options)来声明对其他作用域的依赖关系,该[选项](https://octobercms.com/docs/backend/lists#filter-scope-options)提供了一种服务器端解决方案,用于在修改其依赖关系时更新作用域。当声明为依赖项的范围发生更改时,定义范围将动态更新。这为更改提供给示波器的可用选项提供了机会。 ~~~ country: label: Country type: group conditions: country_id in (:filtered) modelClass: October\Test\Models\Location options: getCountryOptions city: label: City type: group conditions: city_id in (:filtered) modelClass: October\Test\Models\Location options: getCityOptions dependsOn: country ~~~ 在上面的示例中,范围更改后,`city`范围将刷新`country`。定义`dependsOn`属性的任何作用域都将作为“作用域名称”键控的数组传递给“过滤器”小部件的所有当前作用域对象,包括它们的当前值。 ~~~ public function getCountryOptions() { return Country::lists('name', 'id'); } public function getCityOptions($scopes = null) { if (!empty($scopes['country']->value)) { return City::whereIn('country_id', array_keys($scopes['country']->value))->lists('name', 'id'); } else { return City::lists('name', 'id'); } } ~~~ > **注意:**`type: group`仅在此阶段支持范围依赖项。 ### [](https://octobercms.com/docs/backend/lists#scope-types)可用范围类型 这些类型可用于确定应如何显示过滤器范围。 * [组](https://octobercms.com/docs/backend/lists#filter-group) * [复选框](https://octobercms.com/docs/backend/lists#filter-checkbox) * [开关](https://octobercms.com/docs/backend/lists#filter-switch) * [日期](https://octobercms.com/docs/backend/lists#filter-date) * [日期范围](https://octobercms.com/docs/backend/lists#filter-daterange) * [数](https://octobercms.com/docs/backend/lists#filter-number) * [号码范围](https://octobercms.com/docs/backend/lists#filter-numberrange) * [文本](https://octobercms.com/docs/backend/lists#filter-text) ### [](https://octobercms.com/docs/backend/lists#filter-group)组 `group`\-按一组项目过滤列表,通常按相关模型进行过滤,并且需要`nameFrom`或`options`定义。例如:状态名称为打开,关闭等。 ~~~ status: label: Status type: group conditions: status in (:filtered) default: pending: Pending active: Active options: pending: Pending active: Active closed: Closed ~~~ ### [](https://octobercms.com/docs/backend/lists#filter-checkbox)复选框 `checkbox`\-用作二进制复选框以将预定义条件或查询应用于列表(打开或关闭)。使用0代表关闭,使用1代表开启 ~~~ published: label: Hide published type: checkbox default: 1 conditions: is_published <> true ~~~ ### [](https://octobercms.com/docs/backend/lists#filter-switch)开关 `switch`\-用作在两个预定义条件或对列表的查询(不确定,打开或关闭)之间切换的开关。使用0表示关闭,使用1表示不确定,使用2表示打开作为默认值 ~~~ approved: label: Approved type: switch default: 1 conditions: - is_approved <> true - is_approved = true ~~~ ### [](https://octobercms.com/docs/backend/lists#filter-date)日期 `date`\-显示要选择的单个日期的日期选择器。条件属性中可用的值是: * `:filtered`:所选日期的格式为`Y-m-d` * `:before`:选定的日期格式为`Y-m-d 00:00:00`,从后端时区转换为应用程序时区 * `:after`:选定的日期格式为`Y-m-d 23:59:59`,从后端时区转换为应用程序时区 created\_at:标签:日期类型:date最小日期:'2001-01-23'maxDate:'2030-10-13'yearRange:10条件:created\_at> =':filtered' ### [](https://octobercms.com/docs/backend/lists#filter-daterange)日期范围 `daterange`\-显示将两个日期选择为日期范围的日期选择器。条件属性中可用的值是: * `:before`:所选的“之前”日期格式为`Y-m-d H:i:s` * `:beforeDate`:所选的“之前”日期格式为`Y-m-d` * `:after`:所选的“之后”日期格式为`Y-m-d H:i:s` * `:afterDate`:所选的“之后”日期格式为`Y-m-d` Published\_at:标签:日期类型:daterange最小日期:'2001-01-23'maxDate:'2030-10-13'yearRange:10条件:created\_at> =':after'AND created\_at <=':before' 为日期和日期范围使用默认值 ~~~php myController::extendListFilterScopes(function($filter) { 'Date Test' => [ 'label' => 'Date Test', 'type' => 'daterange', 'default' => $this->myDefaultTime(), 'conditions' => "created_at >= ':after' AND created_at <= ':before'" ], ]); }); // return value must be instance of carbon public function myDefaultTime() { return [ 0 => Carbon::parse('2012-02-02'), 1 => Carbon::parse('2012-04-02'), ]; } ~~~ 您可能还希望进行设置,`ignoreTimezone: true`以防止在显示的日期和数据库中存储的日期之间进行时区转换,因为默认情况下,后端时区首选项应用于显示值。 ~~~ published_at: label: Date type: daterange minDate: '2001-01-23' maxDate: '2030-10-13' yearRange: 10 conditions: created_at >= ':after' AND created_at <= ':before' ignoreTimezone: true ~~~ > **注意:**该`ignoreTimezone`选项也适用于`date`过滤器类型。 ### [](https://octobercms.com/docs/backend/lists#filter-number)数 `number`\-显示输入的单个号码。该值可在条件属性中用作`:filtered`。 ~~~ age: label: Age type: number default: 14 conditions: age >= ':filtered' ~~~ ### [](https://octobercms.com/docs/backend/lists#filter-numberrange)编号范围 `numberrange`\-显示两个要输入为数字范围的数字的输入。条件属性中可用的值是: * `:min`:最小值,默认为-2147483647 * `:max`:最大值,默认为2147483647 您可以将最小值留为空白以搜索所有最大值为止的内容,反之亦然,可以将最大值留为空白以搜索至少最小值的所有内容。 ~~~ visitors: label: Visitor Count type: numberrange default: 0: 10 1: 20 conditions: visitors >= ':min' and visitors <= ':max' ~~~ ### [](https://octobercms.com/docs/backend/lists#filter-text)文本 `text`\-显示要输入的字符串的文本输入。您可以指定`size`将在输入大小属性中注入的属性(默认值:10)。 ~~~ username: label: Username type: text conditions: username = :value size: 2 ~~~