Предварительное условие
Плагин просмотра списка ext: news находится на странице www.domain.com/news [ID 9], а подробный просмотр - на сайте www.domain.com/article [ID 39].
По официальному примеру (docs.typo3.org)
Я попробовал пример "Extbase Plugin Enhancer" описания функции, но это вызвало некоторые проблемы:
- Ссылка PageBrowser на страницу 2 имеет cHash: news / list / 2? CHash = 123456789
- Ссылка PageBrowser со страницы 2 на страницу 1 имеет множество get-параметров: news? Tx_news_pi1% 5Baction% 5D = list & tx_news_pi1% 5Bcontroller% 5D = News & cHash = 123456789.Без routeEnhancer это были бы просто «новости» без каких-либо параметров get.
- Ссылка на подробный вид имеет cHash: article / blog / 9? CHash = 52e8a4b7c6318cfe0273e7eab374e9ae
- URL-адреса имеютнежелательные сегменты («список» + «блог»)
- URL-адрес acticle не содержит заголовка новости
Одной из причин некоторых из этих проблем может быть то, что paginator не указываетконтроллер в его ссылках: news? tx_news_pi1 [@ widget_0] [currentPage] = 2 & cHash = 123456789
Мой подход, который уже исправляет упомянутые проблемы
Я разделил это на два отдельных routeEnhancers (Extbase+ Плагин), удалены сегменты, «defaultController», «значения по умолчанию», «требования» и добавлены «аспекты»:
routeEnhancers:
NewsDetail:
type: Extbase
limitToPages: [39]
extension: News
plugin: Pi1
routes:
- { routePath: '/{news_title}', _controller: 'News::detail', _arguments: {'news_title': 'news'} }
aspects:
news_title:
type: PersistedAliasMapper
tableName: 'tx_news_domain_model_news'
routeFieldName: 'path_segment'
NewsList:
type: Plugin
limitToPages: [9]
routePath: '/{@widget_0/currentPage}'
namespace: 'tx_news_pi1'
aspects:
'@widget_0/currentPage':
type: StaticRangeMapper
start: '1'
end: '1000'
Мои опасения по поводу этого подхода:
- Я не уверен, будет ли иметь преимущество (производительность или безопасность), чтобы добавить некоторые "значения по умолчанию" и "требования", и если это действительно хорошая практика, разделить это на два отдельных routeEnhancers.
- Ограничивает количество страниц представления списка максимум 1000 (я признаю, что это много).Более высокое значение приведет к ошибке: Диапазон больше 1000 элементов.
- Если в заголовке новости есть косая черта (например, «Ежемесячный отчет 2018/07»), автоматически сгенерированныйpath_segment также будет содержать косую черту («month-report-2018/07»), и это приведет к следующей ошибке в представлении списка: Параметр «tx_news_pi1__news» для маршрута «tx_news_pi1_0« должен совпадать »[^ /] ++"(указывается" month-report-2018/07 ") для создания соответствующего URL.