页面缓存后 TYPO3 搜索框不起作用
TYPO3 search box does not work after page is cached
TYPO3 中的缓存存在问题。
我有一个简单的搜索框,它调用 itemRepository 以根据搜索词获取一些项目。如果没有给出术语,则列出所有项目。
这只适用于第一次。
在我点击搜索按钮后,搜索词被缓存起来,即使我输入一个新的搜索词也会一直被使用。
第一个术语始终显示在搜索框中并用于搜索。我必须清除缓存才能使其再次工作。
即使我将 var_dump($terms);
放在某处,它也会生成一次输出。
我知道我可以禁用 listAction 的缓存,但这会使页面非常慢,因为默认列出了很多项目。
有解决办法吗?使用 TYPO3 8.7.8.
<!-- Searchbox -->
<f:form name="list" action="list" enctype="multipart/form-data">
<f:form.textfield name="terms" value="{terms}" placeholder="{f:translate(key:'enter_searchterm')}"/>
<button><f:translate key="search"/></button>
</f:form>
<!-- list with found items -->
<f:for each="{items}" as="item">
...
...
<li>{item.title}</li>
...
...
</f:for>
/**
* @param string $terms
*/
public function listAction($terms = "") {
$items = $this->itemRepository->findBySearch($terms);
$this->view->assign('items', $items);
$this->view->assign('terms', $terms);
}
您需要在 ext_localconf.php
文件的 non-cacheable
列表中添加 list
操作。
// non-cacheable actions
[
'Controller' => 'list',
]
您确实应该将带有搜索词参数的 list()-action 设置为不可缓存。
要保持未过滤列表的性能,您可以添加另一个非缓存操作(不带任何参数)。
这样您就可以将性能保留在未过滤列表中。
TYPO3 中的缓存存在问题。 我有一个简单的搜索框,它调用 itemRepository 以根据搜索词获取一些项目。如果没有给出术语,则列出所有项目。
这只适用于第一次。 在我点击搜索按钮后,搜索词被缓存起来,即使我输入一个新的搜索词也会一直被使用。 第一个术语始终显示在搜索框中并用于搜索。我必须清除缓存才能使其再次工作。
即使我将 var_dump($terms);
放在某处,它也会生成一次输出。
我知道我可以禁用 listAction 的缓存,但这会使页面非常慢,因为默认列出了很多项目。 有解决办法吗?使用 TYPO3 8.7.8.
<!-- Searchbox -->
<f:form name="list" action="list" enctype="multipart/form-data">
<f:form.textfield name="terms" value="{terms}" placeholder="{f:translate(key:'enter_searchterm')}"/>
<button><f:translate key="search"/></button>
</f:form>
<!-- list with found items -->
<f:for each="{items}" as="item">
...
...
<li>{item.title}</li>
...
...
</f:for>
/**
* @param string $terms
*/
public function listAction($terms = "") {
$items = $this->itemRepository->findBySearch($terms);
$this->view->assign('items', $items);
$this->view->assign('terms', $terms);
}
您需要在 ext_localconf.php
文件的 non-cacheable
列表中添加 list
操作。
// non-cacheable actions
[
'Controller' => 'list',
]
您确实应该将带有搜索词参数的 list()-action 设置为不可缓存。
要保持未过滤列表的性能,您可以添加另一个非缓存操作(不带任何参数)。
这样您就可以将性能保留在未过滤列表中。