kazda01 / yii2-search
一个简单的搜索引擎,允许用户通过定义的属性和规则搜索模型。
Requires
- php: >=7.4.0
- yiisoft/yii2: ^2.0
- yiisoft/yii2-bootstrap5: 2.0.3
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.6
- squizlabs/php_codesniffer: *
This package is auto-updated.
Last update: 2024-09-16 18:14:56 UTC
README
一个简单的搜索引擎,允许用户通过定义的属性和规则搜索模型。
指定规则后,用户可以一次性通过多个属性搜索多个模型。搜索结果将在输入下动态列出。对于每个搜索结果,都会显示其识别字符串和找到匹配的属性名称。精确匹配也会以粗体显示。
安装
安装此扩展的首选方法是通过 composer。
composer require kazda01/yii2-search "@dev"
用法
1. 添加模块并配置搜索参数
通过composer添加项目后,您需要在web.php
模块中添加SearchModule并配置搜索参数。如果您想拥有多个不同的搜索引擎(例如,发票和用户搜索引擎),则需要多次添加模块,模块ID将用于区分。
模块ID还将用于创建搜索路由。最终请求将转到website.com/ModuleID/search?search=query
。将ModuleID添加到引导程序中很重要,以便将路由添加到UrlManager,并优先于您站点的路由(如果您的路由与搜索路由不冲突,则不需要此操作)。
return [ ... 'bootstrap' => ['<ModuleID>'], 'modules' => [ '<ModuleID>' => [ 'class' => '\kazda01\search\SearchModule', 'searchConfig' => [ '<ModelSearch>' => [ 'columns' => ['<ModelAttribute>', '<ModelAttribute>'], 'matchTitle' => '<matchTitle>', 'matchText' => function($model){ return 'Model: ' . $model->id; } ], ] ], ], ... ];
所有可用设置在此处描述。
2. 添加搜索模型类
必须生成搜索模型类。可以通过Gii CRUD生成器简单地生成。您可以限制某些用户可以搜索/显示的结果。
3. 生成搜索输入
在视图中添加此行。
<?= SearchInput::widget(['search_id' => 'main-search']); ?>
所有可用设置在此处描述。
选项
模块配置
搜索配置
输入小部件配置
示例
示例 web.php
搜索 invoice-search
允许所有用户搜索
Invoice
模型通过其invoice_number
属性
搜索 main-search
允许登录用户搜索
Invoice
模型通过其invoice_number
属性InvoiceItem
模型通过其description
属性Company
模型通过其name
、vat_id
和state
属性
单击发票结果,用户将被重定向到发票详情页面。
单击发票项结果,用户将被重定向到包含该项目的发票详情页面。
单击公司结果,用户将被重定向到带有设置参数的发票列表页面,以按公司客户过滤发票。
公司结果也按 name
、vat_id
和 state
属性分组。它们还根据记录为任何发票上的客户(而不是供应商)的公司进行筛选。
return [ ... 'bootstrap' => ['main-search', 'invoice-search'], 'modules' => [ 'main-search' => [ 'class' => '\kazda01\search\SearchModule', 'allowGet' => true, 'rules' => [ [ 'allow' => true, 'roles' => ['@'], 'actions' => ['index'], // allows only logged in users ], ], 'searchConfig' => [ 'CompanySearch' => [ 'columns' => ['name', 'vat_id', 'state'], 'matchTitle' => function(){ return Yii::t('app', 'Company') }, 'matchText' => function($model){ return $model->name . ', ' . $model->vat_id; } 'route' => 'invoice/index', 'route_params' => function ($model) { return ['InvoiceSearch[fk_company_customer]' => $model->name]; }, 'only_if' => function ($model) { return \app\models\Invoice::find()->where(['fk_company_customer' => $model->id])->count() > 0; }, 'group_by' => true, ], 'InvoiceSearch' => [ 'columns' => ['invoice_number'], 'matchTitle' => 'Invoice', 'matchText' => function($model){ return 'Invoice number ' . $model->invoice_number; } ], 'InvoiceItemSearch' => [ 'columns' => ['description'], 'matchTitle' => 'Invoice item', 'matchText' => function($model){ return 'Invoice number: ' . $model->invoice->invoice_number; } 'route' => 'invoice/view', 'route_params' => function ($model) { return ['id' => $model->invoice->id]; } ], ] ], 'invoice-search' => [ 'class' => '\kazda01\search\SearchModule', 'searchConfig' => [ 'InvoiceSearch' => [ 'columns' => ['invoice_number'], 'matchTitle' => 'Invoice', 'matchText' => function($model){ return 'Invoice number: ' . $model->invoice_number; } ], ] ] ], ... ];
示例 view.php
<div class="row g-0 justify-content-center"> <?= SearchInput::widget([ 'search_id' => 'main-search', 'placeholder' => Yii::t('app', 'Invoice number, customer name, job description..'), 'wrapperClass' => 'col-11 col-lg-8 col-xl-7 mx-auto', 'inputClass' => 'form-control p-2 no-outline', ]); ?> </div>
许可证
作者
测试
每次向存储库推送都会触发CI测试管道。您可以在项目根目录中运行以下命令在本地运行它们。
vendor/bin/phpstan analyse ./src vendor/bin/phpcs ./src --extensions=php --colors --standard=PSR12 -n vendor/bin/phpunit tests