在 tx_seo 生成的站点地图中说出网址

问题描述 投票:0回答:1

我有一个站点地图,由 tx_seo 为扩展名“myext”生成。

站点地图有效,但生成的链接如下所示:

http://domain.local/detail?tx_myext_pi1[action]=list&tx_myext_pi1[controller]=Read&tx_myext_pi1[uid]=333&cHash=4d4...  

虽然它们应该看起来像:

http://domain.local/detail/title-of-record-333

我已经在sites/mysite/config.yaml中定义了适当的路由。

有没有办法使用config.yaml的routeEnhancers来获取站点地图中的可读url?

当然,我可以构建一个新的 SitemapDataProvider 类并在其中创建链接。但这是重复的代码,并且可能与 config.yaml 中的解决方案有细微的差别。所以我的首选方法是使用 config.yaml 中定义的机制 - 但我找不到任何提示它如何工作。

这是我在 config.yaml 中使用的配置:

routeEnhancers:
  PageTypeSuffix:
    type: PageType
    map:
      sitemap.xml: 1533906435
  MyPlugin:
    type: Extbase
    extension: MyExt
    plugin: Pi1
    defaultController: 'Mycontroller::list'
    limitToPages: [12345]
    routes:
      - routePath: '/mypath/{question}/{tab}/{theme}'
        _controller: 'Mycontroller::show'
    aspects:
      question:
        type: PersistedAliasMapper
        tableName: tx_myext_domain_model_question
        routeFieldName: path_segment
      theme:
        type: PersistedAliasMapper
        tableName: tx_myext_domain_model_theme
        routeFieldName: name
      tab:
        type: StaticRangeMapper
        start: '1'
        end: '3'
typo3 typo3-extensions
1个回答
0
投票

该配置当前仅配置单个路由,该路由需要三个参数:

  1. 问题
  2. 标签
  3. 主题

站点地图生成一个仅包含 uid 参数的链接。 因此没有配置可以使用的路由。 您可能需要仅为 uid 参数配置路由。 或者您需要调整站点地图 URL 的正确构建,以包含参数问题、选项卡和主题,而不是 uid。

所以我想您需要正确配置站点地图,如下:https://docs.typo3.org/m/typo3/reference-coreapi/12.4/en-us/ApiOverview/Seo/XmlSitemap.html#for-records 在那里,您可以配置要为每条记录构建的 url,无需构建自定义 PHP 类。

这是从文档中获取的示例,以确保完整性,以防链接可能不再包含该示例:

plugin.tx_seo {
    config {
        <sitemapType> {
            sitemaps {
                <unique key> {
                    provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
                    config {
                        table = news_table
                        sortField = sorting
                        lastModifiedField = tstamp
                        changeFreqField = news_changefreq
                        priorityField = news_priority
                        additionalWhere = AND (no_index = 0 OR no_follow = 0)
                        pid = <page id('s) containing news records>
                        recursive = <number of subpage levels taken into account beyond the pid page. (default: 0)>
                        url {
                            pageId = <your detail page id>
                            fieldToParameterMap {
                                uid = tx_extension_pi1[news]
                            }
                            additionalGetParameters {
                                tx_extension_pi1.controller = News
                                tx_extension_pi1.action = detail
                            }
                        }
                    }
                }
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.