首页 > 解决方案 > 缓存操作中控制器中的 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())));

任何人都知道是否缺少某些东西或者这是一个已知的错误?

最好的问候死诺尔

标签: typo3typo3-9.xtypo3-extensions

解决方案


大约一年前有一个错误修复,旨在删除元标记和页面标题的单独缓存: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

必须有一种更清洁的方法来做到这一点,但我还没有找到。


推荐阅读