Typo3 在流体模板中显示语言图标
我想通过显示相应的语言图标来显示每个记录的指定语言 我计划在BE模块中的流体模板中使用TYPO3 8和现有的TYPO3图标来实现这一点 我可以从记录中读取sys\u language\u uid的值 这些图标已经由TYPO3提供,正如我在pid=0的“网站语言”列表中看到的那样 我还找到了一个ViewHelper来执行此操作 所以,我要做的是:Typo3 在流体模板中显示语言图标,typo3,fluid,Typo3,Fluid,我想通过显示相应的语言图标来显示每个记录的指定语言 我计划在BE模块中的流体模板中使用TYPO3 8和现有的TYPO3图标来实现这一点 我可以从记录中读取sys\u language\u uid的值 这些图标已经由TYPO3提供,正如我在pid=0的“网站语言”列表中看到的那样 我还找到了一个ViewHelper来执行此操作 所以,我要做的是: 从sys_language_uid的值中,从sys_language.language_等位代码中读取正确的代码(例如“en”、“es”) 从等码中获
- 从sys_language_uid的值中,从sys_language.language_等位代码中读取正确的代码(例如“en”、“es”)
- 从等码中获取图标的正确名称
- 显示带有“ViewHelper”的图标
是否有已执行此操作的ViewHelper?我必须从头开始写吗?什么是有效的方法?这里的主要问题是没有语言图标。请不要将语言与通常使用旗帜作为图标的国家混淆 相反,您应该以其语言显示语言,例如德语为Deutsch 如果加载记录中语言字段引用的
sys\u language
记录(通常是sys\u language\u uid
),则可以实现这一点。有很多方法可以解决这个问题,因为您已经使用了Fluid,您可以尝试从vhs TYPO3扩展开始:
<v:resource.record
table="sys_language"
field="title"
uid="{data.sys_language_uid}"
as="languageTitle">
{languageTitle}
</v:resource.record>
{languageTitle}
要将此应用于每个记录,您可以复制并输出处理记录的语言。使用图标API(无需VHS扩展) 控制器可以从以下位置获取等时码:
$this->TCP=GeneralUtility::makeInstance(TranslationConfigurationProvider::class);
$this->languages = $this->TCP->getSystemLanguages();
$this->view->assign('languages', $this->languages);
在流体中,可以获得如下图标:
{namespace core = TYPO3\CMS\Core\ViewHelpers}
<f:for each="{languages}" as="language" iteration="i">
<core:icon identifier="flags-{language.flag}" size="small" />
</f:for>
{namespace core=TYPO3\CMS\core\ViewHelpers}
其中{language.flag}是首选的小写等位码
core:icon attribue»overlay«–本例中未使用–可以将图标粘在一起
在此处查找标识符名称:
对于语言标志,您必须在小写等位码前面加上:“标志-”,因为键入3 9:
如果已解析代码中的图标,则可以使用核心图标查看帮助程序,例如
DE: <core:icon identifier="flags-de"/>
EN: <core:icon identifier="flags-en-us-gb"/>
您也可以为此创建ViewHelper,但我认为在控制器中创建一次会更有效(如果您在视图中多次使用标志)。要使用resource.record ViewHelper,您需要额外的扩展名“vhs”。
$icon = $this->renderLanguageFlag($this->siteLanguages[(int)$row['sys_language_uid']]);
protected function renderLanguageFlag(SiteLanguage $language)
{
$title = htmlspecialchars($language->getTitle());
if ($language->getFlagIdentifier()) {
// instead of this, you can getFlagIdentifier() and pass to Fluid
$icon = $this->iconFactory->getIcon(
$language->getFlagIdentifier(),
Icon::SIZE_SMALL
)->render();
return '<span title="' . $title . '">' . $icon . '</span> ' . $title;
}
return $title;
}
protected function resolveSiteLanguages(int $pageId)
{
$site = GeneralUtility::makeInstance(SiteMatcher::class)->matchByPageId($pageId);
$this->siteLanguages = $site->getAvailableLanguages($this->getBackendUser(), true, $pageId);
}