TYPO3 Route Enhancers:列表(带有可选的分页和过滤器)+同一页面上的详细信息

TYPO3 Route Enhancers: List (with optional pagination and filter) + Detail on same page

目前,我在同一页面上使用两个不同的路由定义获得了列表视图和详细视图(均具有可选的类别参数),如下所示:

routeEnhancers:
  RecipeListDetail:
    type: Extbase
    limitToPages: [2]
    extension: Myext
    plugin: Pi1
    routes:
      - { routePath: '/{category_title}', _controller: 'Recipe::list', _arguments: {'category_title': 'category'} }
      - { routePath: '/{category_title}/{recipe_title}', _controller: 'Recipe::show', _arguments: {'category_title': 'category', 'recipe_title': 'recipe'} }
    defaultController: 'Recipe::show'
    aspects:
      category_title:
        type: PersistedAliasMapper
        tableName: sys_category
        routeFieldName: tx_myext_slug
      recipe_title:
        type: PersistedAliasMapper
        tableName: tx_myext_domain_model_recipe
        routeFieldName: slug         

现在我想用(可选的)分页来扩展这个配置。因此配置必须能够处理以下 url 格式:

  # List-View (optional category, optional pagination):
  /
  /category 
  /category/page-1 
  /page-1

  # Detail-View (with category):
  /category/recipe

此外,还有另一个专用页面用于在未提供类别参数时处理记录的详细视图。但这不是问题的一部分,因为配置仅限于另一个页面。

更新 2019-09-10:尝试添加 3 条路线(如 chris.berlin 所建议),每个 url 变体一条。已删除详细视图配置以进行调试:

  - { routePath: '/category-{category_title}/page-{page}', _controller: 'Recipe::list', _arguments: {'category_title': 'category', 'page': '@widget_0/currentPage'} }
  - { routePath: '/category-{category_title}', _controller: 'Recipe::list', _arguments: {'category_title': 'category'} }
  - { routePath: '/page-{page}', _controller: 'Recipe::list', _arguments: {'page': '@widget_0/currentPage'} }

一旦涉及到分页,任何事情似乎都会出错。例如。单击第一个分页 link 后,分页会丢失类别参数。此外,有时错误的路线似乎匹配。使用 "route enhancers + pagination + additional parameters" 会不会有什么错误?

您是否尝试添加这样的另一条路线?

- { routePath: '/{category_title}/page/{number}'

也许这样可以区分list、list+paginated和detailview这三种路由

原始示例工作正常,但问题是必须将“addQueryString”添加到分页视图帮助程序。

您需要在 f:widget.link 中添加 addQueryStringMethod="GET",如下所示

<f:widget.link addQueryStringMethod="GET">{page.number}</f:widget.link>