Проблемы с PageTitleProviders внутри контроллера в кэшированном действии - PullRequest
1 голос
/ 03 апреля 2020

в моем расширении я использую пользовательский 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())));

Кто-нибудь знает, если чего-то не хватает или это известная ошибка?

С наилучшими пожеланиями d ie Knolle

1 Ответ

1 голос
/ 30 апреля 2020

Было исправлено около года go с целью удаления отдельных кэшей для метатегов и заголовков страниц: https://git.higidi.com/TYPO3/TYPO3.CMS/commit/44fe4992172ec0e18b28bc4a24c57a5c93b74121 Из описания исправления:

В соответствии с концепцией рендеринга внешнего интерфейса заголовок страницы и метатеги не предназначены для хранения в кэше страницы, чтобы позволить не кэшируемым плагинам изменять их.

В настоящее время заголовок страницы и метатеги хранятся в отдельных Записи кэша, которые нарушают приведенную выше концепцию и излишне тесно связывают эти части кода с TypoScriptFrontendController и внутренними логами c.

Этот патч удаляет эти кэши.

Это исправление был представлен в версии 9.5.8.

Я вернул скрипт в версию 9.5.7 в своем проекте, и заголовки страниц снова верны: https://github.com/TYPO3/TYPO3.CMS/blob/v9.5.7/typo3/sysext/core/Classes/PageTitle/PageTitleProviderManager.php

Там Должен быть более чистый способ сделать это, но я еще не нашел.

...