Precondition
The ext:news list view plugin is on page www.domain.com/news [ID 9] and the detail view on www.domain.com/article [ID 39].
Following the official example (docs.typo3.org)
I tried the "Extbase Plugin Enhancer" example of the feature description, but that caused some problems:
- The pagebrowser link to page 2 has a cHash: news/list/2?cHash=123456789
- The pagebrowser link from page 2 to page 1 has lots of get-parameters: news?tx_news_pi1%5Baction%5D=list&tx_news_pi1%5Bcontroller%5D=News&cHash=123456789 . Without the routeEnhancer it would just be "news" without any get-parameters.
- The link to the detail view has a cHash: article/blog/9?cHash=52e8a4b7c6318cfe0273e7eab374e9ae
- The urls have unwanted segments ("list" + "blog")
- The acticle url does not contain the news title
One cause for some of this issues might be that the paginator does not specify the controller in its links: news?tx_news_pi1[@widget_0][currentPage]=2&cHash=123456789
My approach, which already fixes the mentioned problems
I splitted this to two separate routeEnhancers (Extbase + Plugin), removed the segments, "defaultController", "defaults", "requirements" and added "aspects":
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'
My concerns regarding this approach:
- I'm unsure if it would have an advantage (performance or security) to add some "defaults" and "requirements" and if it really is good practice to split this into two separate routeEnhancers.
- It limits the amount of list view pages to a maximum of 1000 (I admit that this is a lot). A higher value will result in an error: Range is larger than 1000 items.
- If there's a slash / in the news title (f.e. "Monthly Report 2018/07") the automatically generated path_segment will also contain a slash ("monthly-report-2018/07") and this leads to the following error in the list view: Parameter "tx_news_pi1__news" for route "tx_news_pi1_0" must match "[^/]++" ("monthly-report-2018/07" given) to generate a corresponding URL.