【问题标题】:Problems with PageTitleProviders within in controller in cached action缓存操作中控制器中的 PageTitleProviders 问题
【发布时间】:2020-04-03 11:07:25
【问题描述】:

在我的扩展中,我将自定义 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())));

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

最好的问候 死诺勒

【问题讨论】:

    标签: typo3 typo3-9.x typo3-extensions


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多