在Fluid模板中显示语言图标

时间:2018-07-10 09:30:57

标签: typo3 fluid

我想通过显示相应的语言图标来显示每条记录的分配语言。

我计划使用带有现有TYPO3图标的TYPO3 8在BE模块的Fluid模板中执行此操作。

我可以从记录中读取sys_language_uid的值。

图标已经由TYPO3提供,正如我在pid = 0的“网站语言”列表中所见。

我还找到了一个的ViewHelper。

所以,我要做的是这样的:

  • 从sys_language_uid的值中,从sys_language.language_isocode中读取正确的代码(例如'en','es')
  • 从isocode中获取图标的正确名称
  • 使用`ViewHelper
  • 显示图标

已经有一个ViewHelper已经完成了吗?我必须从头开始写吗?什么是有效的方法?

3 个答案:

答案 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,但我认为在控制器中执行一次会更有效(以防您在视图中多次使用标志)。