TYPO3 9.5.3 新闻存档和路由增强器
TYPO3 9.5.3 News Archiv and Route Enhancers
我为新闻插件添加了 RouteEnhancers,并按预期用于新闻列表和新闻详细信息页面。现在我尝试实现 DateMenu Archiv,但我遇到了一些问题。
我的 config.yaml 看起来像那样。
routeEnhancers:
PageTypeSuffix:
type: ForceAppendingSlash
NewsPlugin:
type: Extbase
extension: News
plugin: Pi1
routes:
- routePath: '/news/{page}'
_controller: 'News::list'
_arguments:
page: '@widget_0/currentPage'
- routePath: '/{news_title}'
_controller: 'News::detail'
_arguments:
news_title: news
- routePath: '/archiv/{year}/{month}'
_controller: 'News::archive'
defaultController: 'News::list'
defaults:
page: '0'
requirements:
page: \d+
aspects:
news_title:
type: PersistedAliasMapper
tableName: tx_news_domain_model_news
routeFieldName: path_segment
我的 DateMenu.html 看起来像这样:
<ul>
<f:for each="{data.single}" key="year" as="months">
<li>
<ul>
<f:for each="{months}" key="month" as="count">
<li>
<f:link.action pageUid="{listPid}" arguments="{overwriteDemand:{year: year, month: month}}">{year} {month}</f:link.action>
</li>
</f:for>
</ul>
</li>
</f:for>
</ul>
列表看起来不错,但我不知道是否有缓存的 Urls 或其他错误。是否会像 RealUrl 一样再次提供概述,以便您可以看到所有缓存的 Urls?
是的,URL 似乎已缓存。我需要刷新 "Maintenance" 模块中的 Typo3 和 PHP 缓存(在 "Adminn Tools" 下):
但是 我认为您的 routeEnhancers 配置有误。它们在 CoreApiReference 中没有很好的记录,但在变更日志中有一个很好的描述:
https://docs.typo3.org/typo3cms/extensions/core/latest/Changelog/9.5/Feature-86365-RoutingEnhancersAndAspects.html
查看生成的 DateMenu 网址 - 可能类似于:
http://yoursite.com
/path/to/newspage/
?tx_news_pi1[controller]=News
&tx_news_pi1[overwriteDemand][year]=2018
&tx_news_pi1[overwriteDemand][month]=10
&cHash=361b6057014505217b6186a508418f6f
所以控制器不是'archive'而是'list'。您需要在 config.yaml 中更改它。我还认为您需要为此路线配置参数:
routePath: '/archive/{year}/{month}'
_controller: 'News::list'
_arguments:
year: overwriteDemand/year
month: overwriteDemand/month
这应该 transform/get 去掉两个 &tx_news_pi1[overwriteDemand] 参数。
接下来,为了去掉cHash,看一下最后的"aspects:"部分config.yaml 文件。您已经为 "news_title" 定义了一个 - 您还必须为新的 "year" 和 [= 添加两个33=]"month" 个参数。变更日志中有一个多语言/本地化示例 https://docs.typo3.org/typo3cms/extensions/core/latest/Changelog/9.5/Feature-86365-RoutingEnhancersAndAspects.html#staticvaluemapper
下面是我的整个 config.yaml 和 DateMenu.html 文件。我的设置是:
- 两个不同页面上的列表和详细信息视图 - 14 和 39
- 我不在列表视图上使用分页
- 我不希望档案中有几个月 - 只是几年
rootPageId: 1
base: /
baseVariants: { }
languages:
-
title: Deutsch
enabled: true
languageId: '0'
base: /
typo3Language: de
locale: de_CH
iso-639-1: de
navigationTitle: De
hreflang: de
direction: ''
flag: global
-
title: English
enabled: true
languageId: '1'
base: /en/
typo3Language: default
locale: en_US
iso-639-1: en
navigationTitle: En
hreflang: en-US
direction: ''
fallbackType: strict
flag: gb
errorHandling: { }
routes: { }
routeEnhancers:
NewsPlugin:
type: Extbase
limitToPages:
- 14
- 39
extension: News
plugin: Pi1
routes:
-
routePath: '/{news_title}'
_controller: 'News::detail'
_arguments:
news_title: news
-
routePath: '/{year}'
_controller: 'News::list'
_arguments:
year: overwriteDemand/year
defaultController: 'News::list'
defaults:
page: '0'
aspects:
news_title:
type: PersistedAliasMapper
tableName: tx_news_domain_model_news
routeFieldName: path_segment
year:
type: StaticRangeMapper
start: '2000'
end: '2200'
<div class="news-menu-view">
<ul>
<f:for each="{data.single}" key="year">
<li>
<f:link.action pageUid="{listPid}" arguments="{overwriteDemand:{year: year}}">{year}</f:link.action>
</li>
</f:for>
</ul>
</div>
我为新闻插件添加了 RouteEnhancers,并按预期用于新闻列表和新闻详细信息页面。现在我尝试实现 DateMenu Archiv,但我遇到了一些问题。
我的 config.yaml 看起来像那样。
routeEnhancers:
PageTypeSuffix:
type: ForceAppendingSlash
NewsPlugin:
type: Extbase
extension: News
plugin: Pi1
routes:
- routePath: '/news/{page}'
_controller: 'News::list'
_arguments:
page: '@widget_0/currentPage'
- routePath: '/{news_title}'
_controller: 'News::detail'
_arguments:
news_title: news
- routePath: '/archiv/{year}/{month}'
_controller: 'News::archive'
defaultController: 'News::list'
defaults:
page: '0'
requirements:
page: \d+
aspects:
news_title:
type: PersistedAliasMapper
tableName: tx_news_domain_model_news
routeFieldName: path_segment
我的 DateMenu.html 看起来像这样:
<ul>
<f:for each="{data.single}" key="year" as="months">
<li>
<ul>
<f:for each="{months}" key="month" as="count">
<li>
<f:link.action pageUid="{listPid}" arguments="{overwriteDemand:{year: year, month: month}}">{year} {month}</f:link.action>
</li>
</f:for>
</ul>
</li>
</f:for>
</ul>
列表看起来不错,但我不知道是否有缓存的 Urls 或其他错误。是否会像 RealUrl 一样再次提供概述,以便您可以看到所有缓存的 Urls?
是的,URL 似乎已缓存。我需要刷新 "Maintenance" 模块中的 Typo3 和 PHP 缓存(在 "Adminn Tools" 下):
但是 我认为您的 routeEnhancers 配置有误。它们在 CoreApiReference 中没有很好的记录,但在变更日志中有一个很好的描述: https://docs.typo3.org/typo3cms/extensions/core/latest/Changelog/9.5/Feature-86365-RoutingEnhancersAndAspects.html
查看生成的 DateMenu 网址 - 可能类似于:
http://yoursite.com
/path/to/newspage/
?tx_news_pi1[controller]=News
&tx_news_pi1[overwriteDemand][year]=2018
&tx_news_pi1[overwriteDemand][month]=10
&cHash=361b6057014505217b6186a508418f6f
所以控制器不是'archive'而是'list'。您需要在 config.yaml 中更改它。我还认为您需要为此路线配置参数:
routePath: '/archive/{year}/{month}'
_controller: 'News::list'
_arguments:
year: overwriteDemand/year
month: overwriteDemand/month
这应该 transform/get 去掉两个 &tx_news_pi1[overwriteDemand] 参数。
接下来,为了去掉cHash,看一下最后的"aspects:"部分config.yaml 文件。您已经为 "news_title" 定义了一个 - 您还必须为新的 "year" 和 [= 添加两个33=]"month" 个参数。变更日志中有一个多语言/本地化示例 https://docs.typo3.org/typo3cms/extensions/core/latest/Changelog/9.5/Feature-86365-RoutingEnhancersAndAspects.html#staticvaluemapper
下面是我的整个 config.yaml 和 DateMenu.html 文件。我的设置是:
- 两个不同页面上的列表和详细信息视图 - 14 和 39
- 我不在列表视图上使用分页
- 我不希望档案中有几个月 - 只是几年
rootPageId: 1
base: /
baseVariants: { }
languages:
-
title: Deutsch
enabled: true
languageId: '0'
base: /
typo3Language: de
locale: de_CH
iso-639-1: de
navigationTitle: De
hreflang: de
direction: ''
flag: global
-
title: English
enabled: true
languageId: '1'
base: /en/
typo3Language: default
locale: en_US
iso-639-1: en
navigationTitle: En
hreflang: en-US
direction: ''
fallbackType: strict
flag: gb
errorHandling: { }
routes: { }
routeEnhancers:
NewsPlugin:
type: Extbase
limitToPages:
- 14
- 39
extension: News
plugin: Pi1
routes:
-
routePath: '/{news_title}'
_controller: 'News::detail'
_arguments:
news_title: news
-
routePath: '/{year}'
_controller: 'News::list'
_arguments:
year: overwriteDemand/year
defaultController: 'News::list'
defaults:
page: '0'
aspects:
news_title:
type: PersistedAliasMapper
tableName: tx_news_domain_model_news
routeFieldName: path_segment
year:
type: StaticRangeMapper
start: '2000'
end: '2200'
<div class="news-menu-view">
<ul>
<f:for each="{data.single}" key="year">
<li>
<f:link.action pageUid="{listPid}" arguments="{overwriteDemand:{year: year}}">{year}</f:link.action>
</li>
</f:for>
</ul>
</div>