kaystrobach / visualsearch
处理高级分面搜索的包
2.4.0
2024-09-11 09:02 UTC
Requires
- neos/flow: ~7.0 || ^8.0
This package is auto-updated.
Last update: 2024-09-11 09:03:47 UTC
README
FLOW.VisualSearch
基本来说,它提供了一种 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
中完成的,请查看示例文件以获得一些想法。