aplia/filter

适用于eZ publish旧版本的灵活且可扩展的属性过滤器

安装: 83

依赖项: 0

建议者: 0

安全: 0

星级: 0

关注者: 5

分支: 0

开放问题: 0

类型:ezpublish-legacy-extension

v2.4.1 2020-01-06 09:34 UTC

This package is auto-updated.

Last update: 2024-09-06 21:51:16 UTC


README

为eZ publish旧版本内容对象提供高级过滤器支持。该过滤器支持嵌套结构,具有ANDOR操作等。它有效地替换了其他特定过滤器扩展,如OWOrFilter,以及常规属性过滤器。

该扩展以apliafilter名称安装,并提供名为NestedFilterSet的属性过滤器。

Latest Stable Version Minimum PHP Version

安装

使用composer安装此扩展

composer require aplia/filter

用法

在列出内容对象时,可以通过将其作为扩展属性过滤器安装,然后使用params定义嵌套结构来启用此过滤器。然后,该结构将被转换为SQL查询并添加到正常内容对象查询中。

例如,在模板中可以这样做

{fetch('content', 'list',
      hash(
        'parent_node_id', 2,
        'depth', 20,
        'limit', 10,
        'sort_by', array('published', false()),
        'class_filter_type', 'include',
        'class_filter_array', array('article'),
        'extended_attribute_filter', hash(
                'id', 'NestedFilterSet',
                'params', array(
                    array(array('article/type'), $type),
                )
            )
        )
    )}

PHP中的类似示例

\eZContentObjectTreeNode::subTreeByNodeId(
    array(
        'Depth' => 20,
        'Limit' => 10,
        'SortBy' => ['published', false],
        'ClassFilterType' => 'include',
        'ClassFilterArray' => ['article'],
        'ExtendedAttributeFilter' => [
            'id' => 'NestedFilterSet',
            'params' => array(
                'cond' => 'OR',
                'attrs' => array(
                )
            ),
        ],
    ),
    2
);

NestedFilterSet

一种扩展属性过滤器,允许使用嵌套结构,并统一属性过滤器和扩展属性过滤器。该过滤器可以通过自定义类进行扩展,从而绕过只能使用一个扩展属性过滤器的问题。该过滤器还支持同时对多个内容类进行过滤,在这种情况下,它将与属性表进行外连接。

以下元素可以被扩展

  1. 数据类型
  2. 修改器
  3. 属性

请参阅filter.ini.append进行配置。

语法

每个属性过滤器的语法是一个包含属性名和值的数组,例如。

['name', 'foo']

属性名也可以包含修改器和运算符(默认为=)。例如。

['my_class/size:>', 5]

支持的运算符与eZ publish中属性过滤器相同。

  • =
  • !=
  • >
  • >=
  • <
  • <=
  • in
  • not_in
  • like
  • not_like
  • between
  • not_between

过滤器的参数可以是

['cond' => 'and'/'or', 'attrs' => [...]

这定义了一个具有每个过滤器之间andor条件的属性过滤器列表。可以通过仅提供属性过滤器列表来提供简写,它将默认为and作为条件。

attrs列表中的条目定义为具有keyvalue的数组,如下所示

[
    'name' => 'foo',
    'folder/title' => 'bar',
]

或者定义为每个条目都是一个包含属性名和值的数组的数组,如下所示

[
    ['name', 'foo'],
    ['folder/title' => 'bar'],
]

后一种形式允许将属性名作为名称的数组,在这种情况下,它将使用or条件对所有具有属性名进行过滤。

[
    [['folder/title', 'article/title'] => 'bar'],
]

长形式如下

[
    [
        'cond' => 'or',
        'attrs' => [
            'folder/title' => 'bar',
            'article/'title' => 'bar',
        ],
    ]
]

属性条目还可以包含数组键call,这意味着使用回调来获取过滤器结构。回调可以返回正常结构,就像扩展属性过滤器一样,或者返回新的属性过滤器结构。如果没有使用cond键,它将假定and条件并将其包装在长形式结构中。call的值是PHP支持的任何回调结构。

一个完整的示例

[
    ['folder/is_public', true],
    [
        'cond' => 'or',
        'attrs' => [
            'folder/title' => 'bar',
            'article/'title' => 'bar',
        ],
    ],
    [
        'call' => ['MyClass', 'makeFilter'],
    ]
]

数据类型

这些是内容类数据类型的手柄,允许使用动态属性名称。查找内容类属性,并使用第一个支持数据类型的手柄来创建连接和过滤器。

支持以下专用数据类型

  • ezobjectrelation
  • ezobjectrelationlist
  • ezselection

此外,它支持以下扩展的数据类型

  • eztags - 对eztags关键字id进行过滤

其他的数据类型将回退到默认处理器,该处理器使用sort_key_stringsort_key_int

使用带命名空间前缀的类名指定数据类型处理器。

修改器

修饰符是简单的回调,可以围绕字段或值包装SQL函数。

修饰符在属性字符串中指定,位于运算符之前或之后。created:datecreated字段包装在DATE() SQL调用中,而created:=:date将包装匹配的值。

修饰符还可以以过滤器array()的形式指定,作为第四个参数。例如。

['folder/name', '=', 'A', ['pre' => 'first_letter']]

修饰符必须在filter.ini中定义,并指向类中的一个静态方法,然后该方法将接收一个参数,即字段名称,并且方法必须返回一个字符串,其中包含修改字段的SQL代码。

例如,要获取第一个字母,可以这样做

首先定义过滤器名称,并将类的完整命名空间+::和方法名称放置在其中。

#filter.ini
[Handlers]
Modifiers[first_letter]=MyClass::firstLetter

然后定义代码

<?php
class MyClass
{
    public static firstLetter($field)
    {
        return "SUBSTRING($field, 1, 1)";
    }
}

属性

可以通过定义属性名称和使用作为处理器的类来添加自定义属性。在调用属性处理器之前,将解析修饰符和运算符。

许可证

此库是开源软件,根据MIT许可证授权。