我想通过显示相应的语言图标来显示每条记录的分配语言。
我计划使用带有现有TYPO3图标的TYPO3 8在BE模块的Fluid模板中执行此操作。
我可以从记录中读取sys_language_uid的值。
图标已经由TYPO3提供,正如我在pid = 0的“网站语言”列表中所见。
所以,我要做的是这样的:
已经有一个ViewHelper已经完成了吗?我必须从头开始写吗?什么是有效的方法?
答案 0 :(得分:2)
这里的主要问题是没有用于语言的图标。请不要将语言与通常使用标记作为图标的国家/地区混淆。
相反,您应该以其语言显示该语言,例如 Deutsch 代表德语。
如果加载记录中语言字段所引用的sys_language
记录(通常为sys_language_uid
),则可以实现此目的。有很多方法可以解决此问题,并且由于您已经使用Fluid,因此可以尝试使用 vhs TYPO3扩展名中的<v:resource.record/>
viewhelper:
<v:resource.record
table="sys_language"
field="title"
uid="{data.sys_language_uid}"
as="languageTitle">
{languageTitle}
</v:resource.record>
要将其应用于每条记录,您可以复制并customize the Default.html
layout of Fluid StyledContent并在其中输出已处理记录的语言。
答案 1 :(得分:1)
使用ICON API (无需VHS扩展名)
https://docs.typo3.org/typo3cms/CoreApiReference/8.7/ApiOverview/Icon/
您的控制器可以从以下位置获取同等代码:
$this->TCP=GeneralUtility::makeInstance(TranslationConfigurationProvider::class);
$this->languages = $this->TCP->getSystemLanguages();
$this->view->assign('languages', $this->languages);
在FLUID中,您可以这样获得图标:
{namespace core = TYPO3\CMS\Core\ViewHelpers}
<f:for each="{languages}" as="language" iteration="i">
<core:icon identifier="flags-{language.flag}" size="small" />
</f:for>
其中{language.flag}是您首选的小写字母等距代码。
在此情况下未使用的core:icon属性»overlay«可以将图标粘在一起。
在此处查找标识符名称:https://typo3.github.io/TYPO3.Icons/
对于语言标志,您必须在小写字母等距代码前加上“ flags-”
答案 2 :(得分:1)
从 TYPO3 9 开始:
如果您已经解决了代码中的图标,则可以使用核心图标 ViewHelpers,例如
numpy
您可以看到核心如何使用 DE: <core:icon identifier="flags-de"/>
EN: <core:icon identifier="flags-en-us-gb"/>
中的 renderLanguageFlag()
在 PageLayoutView.php 中创建图标。 (languageFlag 是您可以传递给 SiteLanguage
ViewHelper 的内容)。
重要:这是后端代码。
core:icon
您也可以为此创建 ViewHelpers,但我认为在控制器中执行一次会更有效(以防您在视图中多次使用标志)。