kaystrobach/visualsearch

处理高级分面搜索的包

安装量: 10,307

依赖关系: 1

建议者: 0

安全性: 0

星级: 5

关注者: 4

分支: 2

开放问题: 3

语言:JavaScript

类型:neos-package

2.4.0 2024-09-11 09:02 UTC

README

StyleCI Codacy Badge

FLOW.VisualSearch

Filter

基本来说,它提供了一种 FLUID ViewHelper 以及可以对其进行重配置的能力,这样我们就可以进行高级搜索

您可以定义

  • 并配置多个搜索
  • 搜索模型的多属性
  • 存储库必须实现一个接口才能进行搜索
  • 如果用户更改搜索,则搜索将立即存储在用户会话中

安装

此包可以通过 composer 安装。

请执行

composer require kaystrobach/visualsearch @dev

或者您可以在 composer.json 中添加以下行并执行 composer update

	"kaystrobach/visualsearch": "@dev"

基本用法

在 FLUID 模板中包含

要包含视图助手,您可以包含一行,如

<search:widget.search search="KayStrobach_Contact_Institution"/>

这样,您定义 students 是存储过滤查询以便以后使用的会话中的键,并且它是配置 VisualSearch.yaml 中搜索的键。

为了使其更加简单,您可以使用包提供的部分

<f:render partial="Visualsearch/Search" arguments="{searchName:'KayStrobach_Contact_Institution', institutions:institutions}" contentAs="value">
	...
</f:render>

使您的存储库可查询

<?php
namespace Acme\Project\Domain\Repository;

use KayStrobach\VisualSearch\Domain\Repository\SearchableRepository;
use TYPO3\Flow\Annotations as Flow;

/**
 * @Flow\Scope("singleton")
 */
class StudentRepository extends SearchableRepository {

    /**
     * @var string
     */
    protected $defaultSearchName = 'KayStrobach_Contact_Institution';

在控制器中查询存储库

    public function indexAction() {
        $this->view->assign(
            'institutions',
            $this->institutionRepository->findByDefaultQuery()
        );
    }

VisualSearch.yaml

要定义搜索,请查看 visualSearch.yaml 文件,请使用包 kaystrobach/contact 作为参考。

高级用法

通过查询在存储库中进行搜索

在 studentsRepository 中,您可以使用以下函数获取过滤后的学生

<?php
namespace Acme\Project\Domain\Repository;

/*                                                                        *
 * This script belongs to the TYPO3 Flow package "SBS.LaPo".              *
 *                                                                        *
 *                                                                        */

use KayStrobach\VisualSearch\Domain\Repository\SearchableRepository;
use TYPO3\Flow\Annotations as Flow;
use TYPO3\Flow\Reflection\ObjectAccess;

/**
 * @Flow\Scope("singleton")
 */
class StudentRepository extends SearchableRepository {
	/**
	 * @param array $query
	 * @return \TYPO3\Flow\Persistence\QueryResultInterface
	 */
	public function findByQuery($query) {
		$queryObject = $this->createQuery();

		$demands = $this->mapperUtility->buildQuery('lapoStudents', $query, $queryObject);

		// move easy filter to the beginning
		array_unshift($demands, $queryObject->lessThan('deleted', 1));

		$queryObject->matching(
			$queryObject->logicalAnd(
				$demands
			)
		);
		return $queryObject->execute();
	}

buildQuery 函数目前处于可能稍后移动到 SearchableRepository 的状态。

控制器中的使用

然后您可以在控制器中使用以下行来过滤结果集

	/**
	 * @var \KayStrobach\VisualSearch\Domain\Session\QueryStorage
	 * @Flow\Inject
	 */
	protected $queryStorage;

	public function indexAction() {
		$this->view->assign('students', $this->studentRepository->findByQuery($this->queryStorage->getQuery('students')));
	}

此外,您还需要定义搜索应该如何进行自动完成,这是在 Configuration/VisualSearch.yaml 中完成的,请查看示例文件以获得一些想法。