Typo3-过滤器搜索前端



我创建了一个带有List和Detail View的TYPO3扩展,现在我想在列表视图上方添加一个搜索栏来过滤List。

我希望用户有一个字段,他可以键入一些关键字,我想在我的";名字";以及";姓氏";我的扩展名的数据库列。如果找到关键字,则只显示用户。

我试着写一些代码,但当我点击";"搜索";,什么也没发生。

目前,我的控制器和回购看起来是这样的:

控制器:


public function listAction()
{
$users = $this->frontendUser->findAll();
$this->view->assign('users', $users);
if ($this->request->hasArgument('name')) {
$name = $this->request->getArgument('name');
$users = $this->frontendUser->findName($name);
$this->view->assign('users', $users);
}

}

存储库:

class FrontendUserRepository extends Repository
{
public function findName($querystring = '') {
$query = $this->createQuery();
if ($querystring) {
$constraints = [
$query->like('firstname', '%'.$querystring.'%'),
$query->like('lastname', '%'.$querystring.'%')
];
$query->matching(
$query->logicalOr($constraints)
);
}
return $query->execute();
}
}

List.html:

<form action="#">
<label for="name">By name</label>
<input type="text" name="name" id="name">
<input type="submit" value="search">
</form>
<f:for each="{users}" as="user">
<p>{user.firstname} {user.lastname}</p>
<ul>
<li class="tel">{user.telephone}</li>
<li class="service">{user.name}</li>
<li class="loc">{user.address}</li>
</ul>
</f:for>

有人能告诉我哪里错了吗?提前感谢

发现问题:

  1. 控制器

删除分配变量中的$

更改

$this->view->assign('$results', $results);

$this->view->assign('results', $results);
  1. 存储库

添加缺少的logicalOr((方法。

更改

$query->matching(
$query->like('firstname', '%'.$querystring.'%'),
$query->like('lastname', '%'.$querystring.'%')
);

$constraints = [
$query->like('firstname', '%'.$querystring.'%'),
$query->like('lastname', '%'.$querystring.'%')
];
$query->matching(
$query->logicalOr($constraints)
);
  1. 查看

这不起作用,它不是官方的Fluid语法:

<f:else if="{results}">

使用

<f:if condition="{results}">
<f:then>
Output results code
</f:then>
<f:else>
<f:if condition="{users}">
Output users code
</f:if>
</f:else>
</f:if>

建议:

仅使用一个变量users作为结果。如果HTML中的输出是相同的,那么为什么不使用相同的变量呢。那么没有必要进行复杂的if->其他->if结构

最新更新