Обработка параметров, которые могут быть пустыми с помощью RealURL

#typo3 #typo3-8.x #realurl

#typo3 #typo3-8.x #realurl

Вопрос:

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

Примеры URL-адресов, которые должны работать:

 /mainCategory/
/mainCategory/secondCategory/
/mainCategory/secondCategory/product-title
/mainCategory/secondCategory/thirdCategory/
/mainCategory/secondCategory/thirdCategory/product-title
  

Проблема теперь в том, что для отображения продукта не требуется третья категория.
Моя конфигурация:

 'fixedPostVars' =>
    [
        'produkt' =>
            [
                0 =>
                     [
                          'GETvar' => 'tx_vendor_plugin[mainCategory]',
                           'lookUpTable' =>
                               [
                                   'table' => 'sys_category',
                                   'id_field' => 'uid',
                                   'alias_field' => 'title',
                                   'languageGetVar' => 'L',
                                   'languageField' => 'sys_language_uid',
                                   'transOrigPointerField' => 'l10n_parent',
                                   'useUniqueCache' => 1,
                                   'useUniqueCache_conf' =>
                                       [
                                           'strtolower' => 1,
                                           'spaceCharacter' => '-',
                                       ],
                                    ],
                            ],
                        1 =>
                            [
                                'GETvar' => 'tx_vendor_plugin[subCategory]',
                                'lookUpTable' =>
                                    [
                                        'table' => 'sys_category',
                                        'id_field' => 'uid',
                                        'alias_field' => 'title',
                                        'languageGetVar' => 'L',
                                        'languageField' => 'sys_language_uid',
                                        'transOrigPointerField' => 'l10n_parent',
                                        'useUniqueCache' => 1,
                                        'useUniqueCache_conf' =>
                                            [
                                                'strtolower' => 1,
                                                'spaceCharacter' => '-',
                                            ],
                                    ],
                            ],
                        2 =>
                            [
                                'GETvar' => 'tx_vendor_plugin[thirdCategory]',
                                'lookUpTable' =>
                                    [
                                        'table' => 'sys_category',
                                        'id_field' => 'uid',
                                        'alias_field' => 'title',
                                        'languageGetVar' => 'L',
                                        'languageField' => 'sys_language_uid',
                                        'transOrigPointerField' => 'l10n_parent',
                                        'useUniqueCache' => 1,
                                        'useUniqueCache_conf' =>
                                            [
                                                'strtolower' => 1,
                                                'spaceCharacter' => '-',
                                            ],
                                    ],
                            ],
                        3 =>
                            [
                                'GETvar' => 'tx_vndor_plugin[product]',
                                'lookUpTable' =>
                                    [
                                        'table' => 'tx_vendor_domain_model_product',
                                        'id_field' => 'uid',
                                        'alias_field' => 'title',
                                        'languageGetVar' => 'L',
                                        'languageField' => 'sys_language_uid',
                                        'transOrigPointerField' => 'l10n_parent',
                                        'useUniqueCache' => 1,
                                        'useUniqueCache_conf' =>
                                            [
                                                'strtolower' => 1,
                                                'spaceCharacter' => '-',
                                            ],
                                    ],
                            ],
                    ],
  

Когда я добавляю noMatch => bypass в thirdCategory, в нем не отображается никакая третья категория. Невозможно получить доступ к каждой третьей категории.

Когда я использую его без noMatch => bypass , в URL-адресе для продуктов без третьей категории есть пустой параметр path: /mainCategory/secondCategory//product-title

Кто может мне с этим помочь?

Ответ №1:

Этот вопрос был задан и на него ответил Дмитрий в TYPO3 Slack некоторое время назад:

Другими словами: вы не можете иметь необязательные параметры в начале или середине postVar.

Таким образом, вердикт заключается в том, что это невозможно с помощью RealURL.

Пример:

 /mainCategory/secondCategory/product-title/
/mainCategory/secondCategory/thirdCategory/
  

Как RealURL должен знать, что декодировать product-title и thirdCategory здесь? Это неоднозначно, поскольку это может быть продукт или категория. Вот почему RealURL использует пустые сегменты пути для всего, что может быть необязательным в начале / середине.

Комментарии:

1. Спасибо. Если я использую метод empty path, это дает мне File not found в FE. Что я могу сделать против этого?

2. Откуда приходит это сообщение? Apache / TYPO3 / Другое?

3. Не знаю. Это выглядит как echo и die() после него. Без исключений.

4. Затем попробуйте grep свой код для этого. Это также может быть сообщение от PHP-FPM или вашего прокси, если вы его используете.