cakedc/search-filter

CakePHP 的搜索过滤器插件

安装: 46

依赖项: 0

建议者: 0

安全: 0

星星: 0

关注者: 11

分支: 0

开放问题: 0

类型:cakephp-plugin

2.0.3 2024-09-17 10:15 UTC

This package is auto-updated.

Last update: 2024-09-17 10:16:16 UTC


README

Build Status Coverage Status Downloads License

版本和分支

概述

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 插件的几个关键特性

  1. 创建一个新的 Manager 实例和过滤器集合。
  2. 添加一个通用的搜索过滤器,可用于快速搜索。
  3. 创建一个复杂的过滤器,使用 OrCriterion 在多个字段中进行搜索。
  4. 添加一个特定字段的日期时间过滤器。
  5. 自动根据表模式生成过滤器。
  6. 当请求中存在搜索参数时应用过滤器。
  7. 使用 CriteriaFilter 处理多个过滤器条件。

视图

在您的视图中,您可以在搜索表单中渲染搜索组件,如下所示

<?= $this->element('CakeDC/SearchFilter.Search/v_search'); ?>
<script>
    window._search.createMyApp(window._search.rootElemId)
</script>

高级用法

自定义过滤器类型

自定义范围过滤器实现和集成

前端定制

该插件使用 Vue.js 作为前端。您可以通过覆盖应用程序中的模板来自定义外观和感觉

  1. 将插件中的 templates/element/Search/v_templates.php 文件复制到您的应用程序的 templates/element/Search/ 目录。
  2. 根据需要修改模板。

贡献

欢迎贡献!请随时提交 Pull Request。

许可

此插件受 MIT 许可证 保护。