我有一个问题,找不到任何文档或解决方案。
我已经使用列表和详细信息视图创建了TYPO3扩展,一切正常。现在,我想在“列表”视图上方添加一些输入字段,以使站点访问者可以过滤“列表”视图。
这是怎么做的?我确定我必须在列表视图上方添加一个Fluid Form并在Controller中处理它吗?
目前,我的Controller和Repo看起来像这样:
控制器:
/**
* EventController
*/
class EventController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
{
/**
* eventRepository
*
* @var \Alroma\DsEventcalendar\Domain\Repository\EventRepository
* @inject
*/
protected $eventRepository = null;
/**
* action list
*
* @return void
*/
public function listAction()
{
$events = $this->eventRepository->findAll();
$this->view->assign('events', $events);
}
/**
* action show
*
* @param \Alroma\DsEventcalendar\Domain\Model\Event $event
* @return void
*/
public function showAction(\Alroma\DsEventcalendar\Domain\Model\Event $event)
{
$this->view->assign('event', $event);
}
/**
* action frontpage
*
* @return void
*/
public function frontpageAction()
{
$events = $this->eventRepository->findAll();
$this->view->assign('events', $events);
}
}
回购:
class EventRepository extends \TYPO3\CMS\Extbase\Persistence\Repository
{
// Order by BE sorting
protected $defaultOrderings = [
'highlight' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING,
'start' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING
];
}
更具体地说: 我希望用户拥有一个字段,他可以输入一些关键字,而我想在我的扩展程序的“文本”数据库列中进行搜索。如果在任何文本上都找到了关键字,则仅显示合适的文章。日期参数相同。
答案 0 :(得分:3)
最基本的方法是服务器端过滤:
带有输入参数“ querystring”的表单
<f:form action="list">
<f:form.textfield name="querystring" value="" />
</f:form>
在您的操作中获取论据:
if ($this->request->hasArgument('querystring')) {
$querystring = $this->request->getArgument('querystring');
$events = $this->repository->findAll($querystring);
}
在存储库中过滤数据库查询(扩展findAll方法或编写新方法):
public function findAll($querystring = '') {
$query = $this->createQuery();
if ($querystring) {
$query->matching(
$query->like('property_to_search_in', '%'.$querystring.'%')
);
}
return $query->execute();
}
答案 1 :(得分:0)
如果内容不是太多,我宁愿为所有内容输出搜索标签(data-
属性),并使用javascript进行过滤。否则,您只需要重新加载页面即可显示已为客户端加载的内容的子集。而且感觉也不会很平滑。