TYPO3 9.5 languageNavigation 在使用 route-enhancer 切换语言(例如 News Detail)时不接受查询参数
TYPO3 9.5 languageNavigation doesn't take query parameters when switching language (e.g. News Detail) using route-enhancer
我有一个流畅的模板语言导航,我在其中使用 bootstrap,如下所示:
<f:for each="{config.lang.uid}" as="lang" iteration="iterator">
<f:if condition="{languageNavigation.{iterator.index}.available}">
<f:then>
<a
href="{languageNavigation.{iterator.index}.link}"
class="dropdown-item{f:if(condition: '{languageNavigation.{iterator.index}.active}', then: ' active')}"
hreflang="{config.lang.hreflang.{lang}}"
title="{config.lang.title.{lang}}"
>
<span>
<f:if condition="{settings.navbar.langFlags}">
<core:icon identifier="{config.lang.flag.{lang}}" size="small" />
</f:if>
{config.lang.title.{lang}}
</span>
</a>
</f:then>
<f:else>
<span class="dropdown-item text-muted">
<f:if condition="{settings.navbar.langFlags}">
<core:icon identifier="{config.lang.flag.{lang}}" size="small" />
</f:if>
{config.lang.title.{lang}}
</span>
</f:else>
</f:if>
</f:for>
当我在新闻文章的详细视图中切换语言时,查询的参数没有翻译,所以它基本上将我发送到一个空的详细信息页面
我已经尝试了几个小时来解决这个问题,但我似乎没有找到解决办法……
我使用路由增强器将详细视图 URLs 查询转换为新闻标题
我找到的最接近的是将以下内容添加到 link:
addQueryString="TRUE" addQueryStringMethod="GET"
但这似乎只在 < f:link.page > 中有效,我不能使用
href="{languageNavigation.{iterator.index}.link}"
in <f:link.page>
我也尝试过 < link.typolink > 但是在这两种方法中我都失去了 language-switching-goal,即使我使用
lang={config.lang.hreflang.{lang}} 将在站点配置中转换为 en-US 或 de-DE…………它只是将 link 呈现到详细信息页面中菜单
中所有link的当前语言
有什么帮助吗?我想我已经达到了解决这个问题的能力
我将不胜感激任何解决方案
----------------例子-----------------
假设我有以下 URL 这是一个包含文章的新闻插件详细视图的页面:
https://my.domain/news/detail/news-title
当我转到此页面的语言导航时,呈现的域是:
EN: https://my.domain/news/detail/
DE: https://my.domain/de/news/detailansicht/
所以,最后的/news-title基本就没了
如果我只在德语站点导航并且我站在新闻列表页面中:
https://my.domain/de/news/
从那里开始,所有 link 都正确呈现,所以如果我转到有问题的文章的列表项,它会将我发送到:
DE: https://my.domain/de/news/detailansicht/news-title
所以,这就是我提出问题的意思,只有当我已经在详细视图页面中,并且我想用导航栏菜单切换语言时,问题才会出现。
而不是渲染
您尝试过 LanguageMenuDataProcessor 吗?有了它,链接就全对了。参见:https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/ContentObjects/Fluidtemplate/Index.html?highlight=languagemenuprocessor#dataprocessing
Did you tried the LanguageMenuDataProcessor? With it, the links are
all correct. See:
https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/ContentObjects/Fluidtemplate/Index.html?highlight=languagemenuprocessor#dataprocessing
在旧的 TYPO3 版本中,菜单的数据处理是
10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
10 {
special = languages
as = languageNavigation
}
现在使用
10 = TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor
10 {
languages = auto
as = languageNavigation
}
这解决了我的问题,感谢@Thomas Löffler 的提示
我还更新了我的模板,通过删除迭代器及其索引使代码更简单:
<f:section name="Language">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="language" href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
<f:for each="{languageNavigation}" as="item">
<f:if condition="{item.active}">
<f:if condition="{settings.navbar.langFlags}">
<core:icon identifier="{config.lang.flag.{item.languageId}}" size="small" />
</f:if>
<span class="nav-label">{item.title}</span>
</f:if>
</f:for>
</a>
<div class="dropdown-menu dropdown-menu-right mt-0 language-menu">
<f:for each="{languageNavigation}" as="item">
<f:if condition="{item.available}">
<f:then>
<a
href="{item.link}" hreflang="{item.hreflang}" title="{item.title}"
class="dropdown-item{f:if(condition: '{item.active}', then: ' active')}"
>
<f:if condition="{settings.navbar.langFlags}">
<core:icon identifier="{config.lang.flag.{item.languageId}}" size="small" />
</f:if>
{item.title}
</a>
</f:then>
<f:else>
<span class="dropdown-item text-muted">
<f:if condition="{settings.navbar.langFlags}">
<core:icon identifier="{config.lang.flag.{item.languageId}}" size="small" />
</f:if>
{item.title}
</span>
</f:else>
</f:if>
</f:for>
</div>
</li>
</f:section>
我有一个流畅的模板语言导航,我在其中使用 bootstrap,如下所示:
<f:for each="{config.lang.uid}" as="lang" iteration="iterator">
<f:if condition="{languageNavigation.{iterator.index}.available}">
<f:then>
<a
href="{languageNavigation.{iterator.index}.link}"
class="dropdown-item{f:if(condition: '{languageNavigation.{iterator.index}.active}', then: ' active')}"
hreflang="{config.lang.hreflang.{lang}}"
title="{config.lang.title.{lang}}"
>
<span>
<f:if condition="{settings.navbar.langFlags}">
<core:icon identifier="{config.lang.flag.{lang}}" size="small" />
</f:if>
{config.lang.title.{lang}}
</span>
</a>
</f:then>
<f:else>
<span class="dropdown-item text-muted">
<f:if condition="{settings.navbar.langFlags}">
<core:icon identifier="{config.lang.flag.{lang}}" size="small" />
</f:if>
{config.lang.title.{lang}}
</span>
</f:else>
</f:if>
</f:for>
当我在新闻文章的详细视图中切换语言时,查询的参数没有翻译,所以它基本上将我发送到一个空的详细信息页面
我已经尝试了几个小时来解决这个问题,但我似乎没有找到解决办法…… 我使用路由增强器将详细视图 URLs 查询转换为新闻标题
我找到的最接近的是将以下内容添加到 link:
addQueryString="TRUE" addQueryStringMethod="GET"
但这似乎只在 < f:link.page > 中有效,我不能使用
href="{languageNavigation.{iterator.index}.link}"
in <f:link.page>
我也尝试过 < link.typolink > 但是在这两种方法中我都失去了 language-switching-goal,即使我使用 lang={config.lang.hreflang.{lang}} 将在站点配置中转换为 en-US 或 de-DE…………它只是将 link 呈现到详细信息页面中菜单
中所有link的当前语言有什么帮助吗?我想我已经达到了解决这个问题的能力 我将不胜感激任何解决方案
----------------例子-----------------
假设我有以下 URL 这是一个包含文章的新闻插件详细视图的页面:
https://my.domain/news/detail/news-title
当我转到此页面的语言导航时,呈现的域是:
EN: https://my.domain/news/detail/
DE: https://my.domain/de/news/detailansicht/
所以,最后的/news-title基本就没了
如果我只在德语站点导航并且我站在新闻列表页面中:
https://my.domain/de/news/
从那里开始,所有 link 都正确呈现,所以如果我转到有问题的文章的列表项,它会将我发送到:
DE: https://my.domain/de/news/detailansicht/news-title
所以,这就是我提出问题的意思,只有当我已经在详细视图页面中,并且我想用导航栏菜单切换语言时,问题才会出现。
而不是渲染
您尝试过 LanguageMenuDataProcessor 吗?有了它,链接就全对了。参见:https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/ContentObjects/Fluidtemplate/Index.html?highlight=languagemenuprocessor#dataprocessing
Did you tried the LanguageMenuDataProcessor? With it, the links are all correct. See: https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/ContentObjects/Fluidtemplate/Index.html?highlight=languagemenuprocessor#dataprocessing
在旧的 TYPO3 版本中,菜单的数据处理是
10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
10 {
special = languages
as = languageNavigation
}
现在使用
10 = TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor
10 {
languages = auto
as = languageNavigation
}
这解决了我的问题,感谢@Thomas Löffler 的提示
我还更新了我的模板,通过删除迭代器及其索引使代码更简单:
<f:section name="Language">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="language" href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
<f:for each="{languageNavigation}" as="item">
<f:if condition="{item.active}">
<f:if condition="{settings.navbar.langFlags}">
<core:icon identifier="{config.lang.flag.{item.languageId}}" size="small" />
</f:if>
<span class="nav-label">{item.title}</span>
</f:if>
</f:for>
</a>
<div class="dropdown-menu dropdown-menu-right mt-0 language-menu">
<f:for each="{languageNavigation}" as="item">
<f:if condition="{item.available}">
<f:then>
<a
href="{item.link}" hreflang="{item.hreflang}" title="{item.title}"
class="dropdown-item{f:if(condition: '{item.active}', then: ' active')}"
>
<f:if condition="{settings.navbar.langFlags}">
<core:icon identifier="{config.lang.flag.{item.languageId}}" size="small" />
</f:if>
{item.title}
</a>
</f:then>
<f:else>
<span class="dropdown-item text-muted">
<f:if condition="{settings.navbar.langFlags}">
<core:icon identifier="{config.lang.flag.{item.languageId}}" size="small" />
</f:if>
{item.title}
</span>
</f:else>
</f:if>
</f:for>
</div>
</li>
</f:section>