TYPO3 9.5 Маршрутизация для пользовательского расширения (Product Navigator) - замена Realurl - PullRequest
0 голосов
/ 10 февраля 2020

До TYPO3 9.5 Realurl мог обрабатывать URL, и у меня была следующая конфигурация realurl:

'productConfiguration' => array(
        array(
                'GETvar' => 'tx_bitproducts_productview[product]',
                'lookUpTable' => array(
                        'table' => 'tx_bitproducts_domain_model_product',
                        'id_field' => 'uid',
                        'alias_field' => 'productname',
                        'addWhereClause' => '  AND (sys_language_uid=0) AND deleted=0  AND hidden=0 AND pid=185 ', 
                        'useUniqueCache' => 1,
                        'useUniqueCache_conf' => array(
                                'strtolower' => 1,
                                'spaceCharacter' => '-'
                        ),
                'enable404forInvalidAlias' => true
                )

        ),
        array(
                'GETvar' => 'tx_bitproducts_productview[action]',
                'noMatch' => 'bypass', 
                ),

        array(
                'GETvar' => 'tx_bitproducts_productview[controller]',
                'noMatch' => 'bypass'
        ),
    ),
'195' => 'productConfiguration', 

В TYPO3 9.5 мне нужно заменить эту обработку. Мои вопросы:

  • Нужно ли мне дополнительное поле, например, например "path_segment" в моей таблице EXTs, как в tx_news, или URL может быть сгенерирован на лету, как в старом добром realurl? Это реализовало бы, что пробелы в названиях продуктов заменены на f.eg. минус и весь сегмент помещается в нижний регистр
  • Я бы хотел, чтобы в URL были только engli sh product-names (пожалуйста, смотрите выше configur realurl). Возможно ли это?
  • Могу ли я сделать все это с помощью RouteEnhancer типа "Extbase"?

Я был бы рад любым советам, как правильно начать это

1 Ответ

1 голос
/ 10 февраля 2020

Краткий ответ: Нет, вам нужно либо добавить поле слагов, либо добавить собственный класс аспектов

Длинный ответ:

  • Нет автоматического преобразования c в нижний регистр и пробелы для тире для параметров. Поэтому либо добавьте в свою таблицу поле слагов и заполните его при изменении заголовка страницы, либо напишите собственный класс аспектов.
  • PersistedAliasMapper не может добавлять пользовательские предложения where.
  • Enhancer только сопоставляет аргументы extbase с речевыми URL, например, "/ some / page? plugin [controller] = MyController & plugin [action] = myAction & plugin [foo] = Some Value" => "/ some / page / Some Value" с установленными MyController и myAction по умолчанию в конфигурации сайта.

Таким образом, у вас есть две возможности: а) Добавить поле слагов в таблицу и заполнить его «оптимизированным» значением engli sh при изменении заголовка и используйте аспект PersistedAliasMapper b) Добавьте пользовательский класс аспектов, который отображает сегмент "/ Some Value" в ваш оптимизированный вариант в engli sh "/ some-value" AND BACK !. (В 9.5 вы не знаете целевой язык ссылки [например, для переключателя языка], поэтому значения всегда должны быть engli sh, что соответствует вашему требованию: -))

Добавление класса аспекта это так же просто, как добавить одну строку в ваш ext_localconf. php:

$GLOBALS['TYPO3_CONF_VARS']['SYS']['routing']['aspects']['ASPECTNAME'] = MyAspect::class;

и написать небольшой класс, реализующий StaticMappableAspectInterface с помощью метода generate и execute.

Так что, если вы знаете, Как преобразовать «оптимизированную» версию обратно в оригинал, используя аспект, может быть проще. Если вы не можете отменить оптимизацию, слаг-поле в БД может быть проще. Но здесь нет автомата «оптимизировать и сохранить исходное значение», как в realurl

...