I need to beautify the urls of a framework for the presentation of historical documents (Kitodo.Presentation)
Simple replacements work, but in some cases multiple namespaces are needed, for example:
tx_dlf[id]=3506&tx_dlf[page]=2&tx_dlf[double]=0&tx_dlf_navigation[controller]=Navigation
Besides, there are places where the parameter is multipart, for example
tx_dlf_listview[searchParameter][collection]=16
or even
tx_dlf_search[searchParameter][fq][0]
At the moment I have to work with Typo3 v10, due to limitations of Kito.Presentation
Only examples with one namespace are listed in the Typo3 documentation. However, no statement is made about the number of possible namespaces.
Extract from my config.yaml
routeEnhancers:
KitodoWorkview:
type: Plugin
namespace: tx_dlf
limitToPages:
- 21
routePath: '/{id}/page-{page}'
requirements:
id: \d+
page: \d+
KitodoWorkviewDoublePagegrid:
type: Plugin
namespace: tx_dlf
limitToPages:
- 21
routePath: '/{id}/page-{page}/g-{pagegrid}-d-{double}'
default:
double: 0
pagegrid: 0
requirements:
id: \d+
page: \d+
double: 0|1
pagegrid: 0|1
KitodoHistCollectionView:
type: Plugin
namespace: tx_dlf_collection
limitToPages:
- 1
- 2
- 5
routePath: '/{action}/{controller}/{collection}'
requirements:
action: (show|main)
collection: (\d+)
controller: (Collection|ListView)
KitodoWorkviewDoublePagegridNextBack:
type: Plugin
namespace:
- tx_dlf
- tx_dlf_navigation
limitToPages:
- 212
routePath: '/{id}/page-{page}/{pagegrid}-{double}|{controller}'
default:
double: 0
pagegrid: 0
requirements:
id: '(\d+)|(https.*.xml)|(http.*xml)'
page: \d+
double: 0|1
pagegrid: 0|1
controller: (Navigation)
KitodoHistCollectionListView:
type: Plugin
namespace: tx_dlf_listview
limitToPages:
- 5
- 22
- 23
- 24
- 25
- 32
routePath: '/{action}/{controller}'
requirements:
action: (show|main)
controller: (Collection|ListView)
KitodoNavigation:
type: Plugin
namespace: tx_dlf_navigation
limitToPages:
- 21
routePath: '/controller-{controller}'
requirements:
controller: '^[a-zA-Z]{5,20}$'
Adjustments:
Here are two working examples, derived from the very helpful answer by @Bernd Wilke, without the use of "namespaces"
Example with two 'namespaces' (functional)
...tx_dlf[id]=2&tx_dlf_navigation[controller]=Navigation ...
KitodoWorkviewDoublePagegridNextBack:
type: Simple
limitToPages:
- 21
routePath: '/{id}/page-{page}/g-{pagegrid}-d-{double}/nc-{navcontroller}'
default:
double: 0
pagegrid: 0
_arguments:
id: 'tx_dlf/id'
page: 'tx_dlf/pagegrid'
pagegrid: 'tx_dlf/pagegrid'
double: 'tx_dlf/double'
navcontroller: 'tx_dlf_navigation/controller'
requirements:
id: \d+
page: \d+
pagegrid: 0|1
double: 0|1
controller: (Navigation)
Example where parameter is multipart (functional)
...tx_dlf_listview[searchParameter][collection]=2&tx_dlf_listview[widgetPage][currentPage]=1 ...
KitodoHistCollectionListView:
type: Simple
limitToPages:
- 5
routePath: '/list-action-{action}/list-controller-{controller}/list-collection-{searchParameter}/list-cp-{widgetPage}'
_arguments:
action: 'tx_dlf_listview/action'
controller: 'tx_dlf_listview/controller'
searchParameter: 'tx_dlf_listview/searchParameter/collection'
widgetPage: 'tx_dlf_listview/widgetPage/currentPage'
requirements:
action: (show|main)
controller: (Collection|ListView)
searchParameter: \d+
widgetPage: \d+
Multipart parameter can be handled with
_argumentswhich also are in the examples.See the example for the paginator (
@widget_0[currentPage]):or the overwriting parameter:
With arguments you also can combine multiple parameters to one path segment, independent of parameter names and dimensions similar to your example:
EDIT:
regarding the multiple namespaces: I would drop namespaces and specify all parameters as multidimensional arguments.
If the
namespaceoption is required fortype: Extbase(I find no full documentation for it) trytype: Simple:example:
if you want to join:
&tx_dlf[double]=0&tx_dlf_navigation[controller]=Navigation(you can add and maybe should add further configuration like
defaultsandrequirements)