我有一个站点地图,由 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'
该配置当前仅配置单个路由,该路由需要三个参数:
站点地图生成一个仅包含 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
}
}
}
}
}
}
}
}