TYPO3:本地化条件,流体模板中的sys_language_uid

时间:2018-06-27 11:12:30

标签: content-management-system typo3 fluid typo3-7.6.x

我想实现的是,图像会根据当时选择的语言而变化。

这是我的HTML

<f:if condition="{TSFE:sys_language_uid} == 1">
   <f:then>
     <f:link.page pageUid="{settings.rootpid}" class="navbar-brand">
       <img src="fileadmin/branding/brand/images/png/image1.png" alt="Logo {settings.brandname}" />
     </f:link.page>
    </f:then>
    <f:else>
      <f:link.page pageUid="{settings.rootpid}" class="navbar-brand">
        <img src="fileadmin/branding/brand/images/png/image2.png" alt="Logo {settings.brandname}" />
      </f:link.page>
    </f:else>
</f:if>

这是我的TS

[globalVar = GP:L = 1]
   config {
      sys_language_uid = 1
      language = nl
      locale_all = nl_NL.UTF-8
      htmlTag_setParams = lang="nl" dir="ltr" class="no-js"
   }
[global]

[globalVar = GP:L = 2]
   config {
      sys_language_uid = 2
      language = fr
      locale_all = fr_FR.UTF-8
      htmlTag_setParams = lang="fr" dir="ltr" class="no-js"
     }  

[global]

我尝试了很多不同的编写方式,但似乎无法使其发挥作用,希望有人能提供帮助。

3 个答案:

答案 0 :(得分:0)

将预先评估的布尔值传递给模板。从您的控制器(您可以访问TSFE)或通过TS到FLUIDTEMPLATE对象。从这个问题还不清楚你来自哪里。您应该将条件内联移动到src中,这样就不会重复整个标记,而只需要切换值即可。

或者,您可以在控制器或TS中预先计算src值,然后将其传递给视图。

答案 1 :(得分:0)

我认为您正在使用自己的发行版,或扩展了某些软件包的功能...

在您的constants.ts中尝试此操作(这样它们就可以在BE常量编辑器中使用)DejaVu Sans

myext/Configuration/TypoScript/constants.ts

然后在您的setup.ts myext.configuration { logo { src { # cat=myext/general/05; type=string; label=English Logo default = fileadmin/branding/brand/images/png/image0.png # cat=myext/general/06; type=string; label=Dutch Logo nl = fileadmin/branding/brand/images/png/image1.png # cat=myext/general/07; type=string; label=French Logo fr = fileadmin/branding/brand/images/png/image2.png } } } 中进行此操作:

myext/Configuration/TypoScript/setup.ts

现在您可以在流体模板中简单地使用page = PAGE page { # Page Main template 10 = FLUIDTEMPLATE 10 { variables { # Logo logoSrc = TEXT logoSrc.value = {$myext.configuration.logo.src.default} } } } [globalVar = GP:L=1] page.10.variables.logoSrc.value = {$myext.configuration.logo.src.nl} [end] [globalVar = GP:L=2] page.10.variables.logoSrc.value = {$myext.configuration.logo.src.fr} [end]

{logoSrc}

答案 2 :(得分:0)

您可以使用类似下面的viewHelper来获取当前languageUid。

ViewHelper 文件。

<?php
namespace MyVendor\ExtensionKey\ViewHelpers;

class GetLangUidViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {

    /**
    * GetLangUid
    *
    **/
    public function render() {
        return $GLOBALS['TSFE']->sys_language_uid;
    }
}

在您的流体模板中,获取如下所示的当前laguageUid。

{namespace L=MyVendor\ExtensionKey\ViewHelpers}

<f:if condition="{L:getLangUid()} == 1">
   <f:then>
     <f:link.page pageUid="{settings.rootpid}" class="navbar-brand">
       <img src="fileadmin/branding/brand/images/png/image1.png" alt="Logo {settings.brandname}" />
     </f:link.page>
    </f:then>
    <f:else>
      <f:link.page pageUid="{settings.rootpid}" class="navbar-brand">
        <img src="fileadmin/branding/brand/images/png/image2.png" alt="Logo {settings.brandname}" />
      </f:link.page>
    </f:else>
</f:if>