cakedc / search-filter
CakePHP的SearchFilter插件
2.0.3
2024-09-17 10:15 UTC
Requires
- php: >=8.1
- cakephp/cakephp: ^5.0
- skie/cakephp-search: ^5.0
Requires (Dev)
- cakephp/cakephp-codesniffer: ^5.0
- phpunit/phpunit: ^10.0
README
版本和分支
概述
SearchFilter插件是CakePHP应用程序中实现高级搜索功能的一个强大而灵活的解决方案。它提供了一套强大的工具,可以轻松创建动态、用户友好的搜索界面。
特性
- 基于数据库模式的动态过滤器生成
- 支持各种过滤器类型:字符串、数字、日期、日期时间、布尔值和查找(自动完成)
- 可定制的过滤器条件(等于、不等于、大于、小于、介于等)
- 基于Vue.js的前端,提供交互式用户体验
- 为查找过滤器提供AJAX驱动的自动完成功能
- 轻松集成到CakePHP的ORM中,以高效构建查询
- 可扩展的架构,允许自定义过滤器类型和条件
安装
您可以使用 composer 将此插件安装到您的CakePHP应用程序中
composer require cakedc/search-filter
然后,将以下行添加到您的应用程序的 src/Application.php
文件中
$this->addPlugin('CakeDC.SearchFilter');
配置
基本用法
控制器
在您的控制器中,您可以设置搜索功能,如下所示
use CakeDC\SearchFilter\Manager; class PostsController extends AppController { public function index() { $query = $this->Posts->find(); $manager = new Manager($this->request); $collection = $manager->newCollection(); // Add a general search filter $collection->add('search', $manager->filters() ->new('string') ->setConditions(new \stdClass()) ->setLabel('Search...') ); // Add a complex name filter that searches across multiple fields $collection->add('name', $manager->filters() ->new('string') ->setLabel('Name') ->setCriterion( $manager->criterion()->or([ $manager->buildCriterion('title', 'string', $this->Posts), $manager->buildCriterion('body', 'string', $this->Posts), $manager->buildCriterion('author', 'string', $this->Posts), ]) ) ); // Add a datetime filter for the 'created' field $collection->add('created', $manager->filters() ->new('datetime') ->setLabel('Created') ->setCriterion($manager->buildCriterion('created', 'datetime', $this->Posts)) ); // Automatically add filters based on the table schema $manager->appendFromSchema($collection, $this->Posts); // Get the view configuration for the filters $viewFields = $collection->getViewConfig(); $this->set('viewFields', $viewFields); // Apply filters if search parameters are present in the request if (!empty($this->getRequest()->getQuery()) && !empty($this->getRequest()->getQuery('f'))) { $search = $manager->formatSearchData(); $this->set('values', $search); // Add a custom 'multiple' filter using the CriteriaFilter $this->Posts->addFilter('multiple', [ 'className' => 'CakeDC/SearchFilter.Criteria', 'criteria' => $collection->getCriteria(), ]); $filters = $manager->formatFinders($search); $query = $query->find('filters', params: $filters); } // Paginate the results $posts = $this->paginate($this->Filter->prg($query)); $this->set(compact('posts')); } }
此示例演示了SearchFilter插件的几个关键功能
- 创建一个新的
Manager
实例和过滤器集合。 - 添加一个通用搜索过滤器,可用于快速搜索。
- 创建一个复杂的过滤器,使用
OrCriterion
跨多个字段进行搜索。 - 为特定字段添加日期时间过滤器。
- 根据表模式自动生成过滤器。
- 当请求中存在搜索参数时应用过滤器。
- 使用
CriteriaFilter
处理多个过滤标准。
视图
在您的视图中,您可以在搜索表单内渲染搜索组件,如下所示
<?= $this->element('CakeDC/SearchFilter.Search/v_search'); ?>
<script> window._search.createMyApp(window._search.rootElemId) </script>
高级用法
自定义过滤器类型
前端自定义
插件使用Vue.js进行前端。您可以通过覆盖应用程序中的模板来自定义外观和感觉。
- 将插件的
templates/element/Search/v_templates.php
文件复制到您的应用程序的templates/element/Search/
目录中。 - 根据需要修改模板。
贡献
欢迎贡献!请随时提交拉取请求。
许可证
此插件根据MIT许可证授权。