Как мне написать картограф аспекта маршрутизации для TYPO3 9 LTS - PullRequest
0 голосов
/ 29 октября 2018

Мне нужен собственный класс сопоставления аспектов, чтобы определить значение необязательного параметра get. этот параметр содержит идентификатор cf_cache с дополнительными данными. Но этот параметр создает параметр cHash, который мне не нужен, и я не хочу видеть его в URL.

Документы (https://docs.typo3.org/typo3cms/extensions/core/Changelog/9.5/Feature-86365-RoutingEnhancersAndAspects.html) говорит:

Если требования слишком свободны, параметр подписи URL («cHash») добавляется в конец URL, который не может быть удален.

А также:

Если у вас действительно есть требование не иметь аргумента cHash, убедитесь, что у всех заполнителей есть строгие определения того, что может быть результатом сегмента страницы (например, разбиение на страницы), и не стесняйтесь создавать собственные сопоставители.

В описании функции объясняется только то, как зарегистрировать пользовательский класс энхансера в ext_tables.php, но не как использовать собственные средства отображения аспектов :-(

С удовольствием, но как?

1 Ответ

0 голосов
/ 30 октября 2018

Решение простое, но, похоже, документация неверна. Согласно документам, пользовательский усилитель должен быть зарегистрирован в ext_tables.php с помощью $ GLOBALS ['TYPO3_CONF_VARS'] ['SYS'] ['routing'] ['CustomPlugin'].

UPDATE

Если преобразователь зарегистрирован в ext_tables.php, он работает только в том случае, если вы вошли в TYPO3 BE. Картограф должен быть зарегистрирован в ext_localconf.php. Тогда он работает без входа в систему BE

Просмотр массива $ GLOBALS ['TYPO3_CONF_VARS'] ['SYS'] ['routing'] показывает, где зарегистрированы аспекты и средства улучшения:

enter image description here

Зарегистрируйте маппер в ext_tables.php:

// Custom Routing Aspects Mapper
$GLOBALS['TYPO3_CONF_VARS']['SYS']['routing']['aspects']['IdentifierValueMapper'] = \VENDOR\Extension\Routing\Aspect\IdentifierValueMapper::class;

Класс аспектов:

<?php
namespace VENDOR\Extension\Routing\Aspect;

use TYPO3\CMS\Core\Routing\Aspect\StaticMappableAspectInterface;
use TYPO3\CMS\Core\Site\SiteLanguageAwareTrait;

class IdentifierValueMapper implements StaticMappableAspectInterface
{
    use SiteLanguageAwareTrait;

    /**
     * {@inheritdoc}
     */
    public function generate(string $value): ?string
    {
        ...
        return $value !== false ? (string)$value : null;
    }

    /**
     * {@inheritdoc}
     */
    public function resolve(string $value): ?string
    {
        ...
        return isset($value) ? (string)$value : null;
    }

}

Без пользовательского сопоставления мой URL всегда имеет (в моем случае абсолютно бесполезный / только некрасивый) атрибут cHash TYPO3:

/ страница / 2 / цена / по возрастанию / 03510890954e251e285104f156298e55952e4c7d? CHash = dd66994f041278f4c6bf2f7f64fb09e4

Теперь я получил URL без кеша:

/ страница / 3 / цена / по возрастанию / ae636e66563e72d3e4f592173f328fecbee5e44f

...