pozitronik / yii2-searchwidget
快速搜索小部件
0.8.1
2022-11-16 16:01 UTC
Requires
- php: >=8.0
- kartik-v/yii2-widget-typeahead: *
Requires (Dev)
- codeception/codeception: ^4.0
- codeception/module-asserts: *
- codeception/module-filesystem: *
- codeception/module-phpbrowser: *
- codeception/module-rest: ^1.3.1
- codeception/module-yii2: *
- fakerphp/faker: ^1.20
- vlucas/phpdotenv: ^5.5
- yiisoft/yii2: dev-master
- yiisoft/yii2-bootstrap4: ^2.0
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。