typo3 - 缓存操作中控制器中的 PageTitleProviders 问题
问题描述
在我的扩展中,我使用自定义 PageTitleProvider 作为我的详细信息视图。它仅在页面未缓存时有效。所以我清除缓存,然后当我重新加载页面时,标题将是记录的名称,我得到页面标题。由于加载时间,我无法将操作设置为未缓存。
我的 PageTitleProvider 看起来像这样:
use TYPO3\CMS\Core\PageTitle\AbstractPageTitleProvider;
class CatalogPageTitleProvider extends AbstractPageTitleProvider
{
/**
* @param string $title
*/
public function setTitle(string $title)
{
$this->title = (string)$title.' | '.$GLOBALS['TSFE']->rootLine[0]['title'] ;
}
}
在控制器中,我将标题设置为:
$search = ['&npsp;', '­' ];
$titleProvider = GeneralUtility::makeInstance(CatalogPageTitleProvider::class);
$titleProvider->setTitle( strip_tags(str_replace( $search, '', $service->getName())));
任何人都知道是否缺少某些东西或者这是一个已知的错误?
最好的问候死诺尔
解决方案
大约一年前有一个错误修复,旨在删除元标记和页面标题的单独缓存:https://git.higidi.com/TYPO3/TYPO3.CMS/commit/44fe4992172ec0e18b28bc4a24c57a5c93b74121 来自错误修复描述:
根据前端渲染的概念,页面标题和元标记并不意味着存储在页面缓存中,以便允许不可缓存的插件修改它们。
目前页面标题和元标记都存储在单独的缓存条目中,这违反了上述概念,并且不必要地将这些代码部分与 TypoScriptFrontendController 及其内部逻辑紧密耦合。
此补丁删除了这些缓存。
此修复程序是在 v 9.5.8 中引入的。
我在我的项目中将脚本恢复到版本 9.5.7,页面标题再次正确:https ://github.com/TYPO3/TYPO3.CMS/blob/v9.5.7/typo3/sysext/core/Classes/PageTitle/ PageTitleProviderManager.php
必须有一种更清洁的方法来做到这一点,但我还没有找到。
推荐阅读
- python - 使用 requests.get() 线程安全的方法
- node.js - 创建寄存器:TypeError:'instanceof' 的右侧不可调用 Express 和 Promisify
- r - 如何将超过 250,000 个字符的 XML CLOB 字段从 Oracle 读入 R 或 SAS?
- c# - 如何在 .net 的 API 中处理多个 mongodb 集合
- pandas - 在 pandas 中仍然可以看到丢弃的数据吗?
- python - 在 python 2.7 中执行终端命令后控制不返回
- apache - 让我们在 debian 9 ISPConfig 中加密更新 Apache 没问题,但 https 失败,因为证书已过期
- php - Wordpress 自动添加“p”和“div”标签问题
- ajax - 数据表 laravel 找不到对象的数据
- file - 在内核模块中打开和读取文件