pozitronik/yii2-searchwidget

快速搜索小部件

0.8.1 2022-11-16 16:01 UTC

This package is auto-updated.

Last update: 2024-09-16 20:10:28 UTC


README

快速搜索小部件实现

安装

安装此扩展的首选方法是通过 composer

运行

php composer.phar require pozitronik/yii2-searchwidget "dev-master"

或添加

"pozitronik/yii2-searchwidget": "dev-master"

到您的 composer.json 文件的 require 部分。

要求

Yii2, PHP >= 8.0

配置

小部件配置有两种方式。首选方式是将它配置为组件,例如

...
'components' => [
    'searchWidget' => [
        'class' => SearchWidget::class,
        'models' => [
            'Users' => [
                'class' => Users::class
            ],
            ...
        ],
        ...
    ],
    ...

或者,您可以直接传递配置给小部件本身

    SearchWidget::widget([
        'models' => [
            'Users' => [
                'class' => Users::class
            ],
            ...
        ]
]);

配置参数

  • class: 组件类,它始终必须是 SearchWidget::class
  • ajaxEndpoint: 所有搜索请求的端点 URL。它必须由 SearchAction::class 处理。默认值为 '/site/search'
  • models: 要搜索的 ActiveRecord 模型列表。每个项的键必须包含任意但唯一的模型别名,例如
'components' => [
    'searchWidget' => [
        'class' => SearchWidget::class,
        'models' => [
            'Model1Alias' => [
                'class' => Model1::class
            ],
            'Model2Alias' => [
                'class' => Model2::class
            ],
            ...
        ]
    ]
    ...
]

可以在其中配置每个模型的搜索

  • class: (字符串) 模型类名称。
  • ajaxEndpoint: 当前模型搜索请求的端点 URL。它覆盖了类似的全局选项,但默认情况下未设置。
  • method: (字符串) 如果模型实现了它自己的搜索方法,其名称可以在这里指定。有关详细信息,请参阅[搜索方法](#Search method)部分。默认情况下,模型将被视为 ActiveRecord 并使用标准 SQL 搜索。
  • template: (字符串) 搜索结果原始模板代码。默认情况下被忽略。如果设置,则比 templateView 参数具有更高的优先级。有关更多信息,请参阅[搜索结果模板](#Search result templates)部分。
  • templateView (字符串) 搜索结果模板视图的路径。如果未设置,则使用默认模板视图。
  • header: (字符串) 模型搜索结果列表的标题。
  • limit (null|int) 搜索结果限制,设置为 null 以禁用限制。默认值为 5。
  • attributes: (字符串[]) 要在其中搜索的模型属性名称列表。每个属性可以通过两种方法指定:仅属性字符串名称,或作为数组,其中第一个项目是属性名称,第二个项目是属性搜索类型。支持以下搜索类型
  • SearchWidget::SEARCH_TYPE_EQUAL: 属性值必须等于搜索词。
  • SearchWidget::SEARCH_TYPE_LIKE: 属性值必须包含搜索词。
  • SearchWidget::SEARCH_TYPE_LIKE_BEGINNING: 属性值必须以搜索词开头。
  • SearchWidget::SEARCH_TYPE_LIKE_ENDING: 属性值必须以搜索词结尾。

所有搜索类型均不区分大小写。

下面给出了一个配置示例

...
'components' => [
    'searchWidget' => [
        'class' => SearchWidget::class,
        'ajaxEndpoint' => '/site/search',
        'models' => [
            'Users' => [
                'class' => Users::class,
                'template' => '<div class="suggestion-item"><div class="suggestion-name">{{name}}</div><div class="clearfix"></div><div class="suggestion-secondary">{{controller}}</div><div class="suggestion-links"><a href="'.Url::to('users/edit').'?id={{id}}" class="dashboard-button btn btn-xs btn-info pull-left">Edit<a/></div><div class="clearfix"></div></div>',
                'header' => 'Users',
                'limit' => 3,
                'attributes' => [
                    'username',
                    ['email', SearchWidget::SEARCH_TYPE_LIKE_BEGINNING]
                ]
            ],
            'Products' => [
                'class' => Products::class,
                'ajaxEndpoint' => '/products/search',
                'templateView' => '@app/views/products/search-template'
                'header' => 'Products',
                'limit' => null,
                'attributes' => [
                    'name',
                     ['code', SearchWidget::SEARCH_TYPE_EQUAL]
                ]
            ]
        ],
        ...
    ],
    ...

添加替代配置

如果您想创建实现不同搜索的组件,可以将其配置为单独的组件

...
'components' => [
    'usersSearchWidget' => [
        'class' => SearchWidget::class,
        'models' => [
            'Users' => [
                'class' => Users::class,
            ]
        ],
    ],
    'productsSearchWidget' => [
        'class' => SearchWidget::class,
        'models' => [
            'Products' => [
                'class' => Products::class,
            ]
        ],
    ],

然后,您需要将组件名称传递给每个小部件

    SearchWidget::widget(['componentName' => 'usersSearchWidget']);//search only in users
    SearchWidget::widget(['componentName' => 'productsSearchWidget']);//search only in products

或者,您可以像[配置](#Configuration)部分中描述的那样,直接将配置传递给小部件本身。

搜索方法

待办事项

搜索结果模板

待办事项

许可证

GNU GPL v3。