TYPO3.CMS 9 LTS - кэшируемое действие extbase, но без cHa sh с новой маршрутизацией - PullRequest
1 голос
/ 08 января 2020

Есть идеи, как это решить? У меня есть плагин extbase, у которого есть список и действие show. И то, и другое должно быть кешируемым, а ссылка на детали не должна содержать кеш. sh

Я не могу этого достичь. Как только я включаю кеши, я всегда получаю один и тот же результат для детального действия.

Я настроил плагин для кэширования:

// add detail plugin
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    'Vendor.Extension',
    'SomePiName',
    [
        'ControllerName' => 'show',
    ],
    [],
    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT
);

Конфигурация маршрутизации:

routeEnhancers:
  MyEnhanceName:
    type: Extbase
    extension: Extension
    plugin: SomePiName
    routes:
      - { routePath: '/{localized_entry}/{slug}', _controller: 'ControllerName::show', _arguments: {'slug': 'uuid'} }
    defaultController: 'ControllerName::show'
    aspects:
      localized_entry:
        type: LocaleModifier
        default: 'show'
        localeMap:
          - locale: 'de_DE.*|de_AT.*|de_CH.*'
            value: 'detail'
          - locale: 'it_IT.*'
            value: 'dettaglio'
      slug:
        type: customType

Мой пользовательский аспект работает путем отображения внешнего uuid в сгенерированном слаге, который хранится в mysql -таблице, которую я поддерживаю.

Мне нужна глубокая ссылка типа:

/path/to/page/show/here-comes-the-slug

Но я получаю

/path/to/page/show/here-comes-the-slug?cHash=...

Итак, я добавил:

$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = "tx_extension_somepiname[uuid]";
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = "tx_extension_somepiname[controller]";
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = "tx_extension_somepiname[action]";

Теперь ссылка выглядит так:

/path/to/page/show/here-comes-the-slug

Но как только я активирую кеши, я всегда получаю один и тот же результат.

Так что мне нужен расчет кеша sh, но я не хочу, чтобы fu ** er быть в ссылке ...

Ссылки создаются с помощью ContentObjectRenderer-> typolink_URL с конфигурацией:

[
    "parameter" => "t3://myhandler?uuid=someuuid"
]

, что обработчик преобразуется в последующий вызов ContentObjectRenderer-> typolink_URL с конфигурацией :

[
    "parameter" => "t3://page?uid=someconfiguredpageuid",
    "useCacheHash" => 0,
    "additionalParams" => "&tx_extension_somepiname[uuid]=uuid&tx_extension_somepiname[controller]=Controller&tx_extension_somepiname[action]=show"
]

Итак, моя ситуация такова, что я могу ЛИБО иметь cacheHa sh и правильный результат ИЛИ ни cacheHa * 10 48 * с недействительными результатами.

Как это должно быть сделано?

Ответы [ 2 ]

2 голосов
/ 10 января 2020

Не следует исключать параметры, которые фактически отличают guish содержимое страницы от генерации cHa sh. Они действительно разумны только для использования с внешними параметрами отслеживания, такими как fbclid et c.

Также не используйте useCacheHash = 0, если вы полагаетесь на кэширование.

Скорее настройте маршрут усилитель для удаления ?cHash.

1 голос
/ 13 января 2020

Ладно, я решил это, вот необходимые шаги:

1) Как Джонас Эберле предложил удалить аргументы extbase из exclusiveParameters.

2) Сконфигурировать действие детали как кешируемое (удалить контроллер-> комбинация действий из 2-го массива возможных действий в регистрации плагина extbase / ext_localconf. php)

3) При использовании пользовательского аспекта реализуйте «StaticMappableAspectInterface». Я не нашел соответствующей части в ядре, но, кажется, этот интерфейс требуется! Просто взгляните на PersistedAliasMapper.

Теперь это работает ...

...