【问题标题】:TYPO3: localization condition, sys_language_uid in fluid-templateTYPO3:本地化条件,流体模板中的 sys_language_uid
【发布时间】:2018-06-27 11:12:29
【问题描述】:

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

这是我的 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]

我尝试了很多不同的方式来写这篇文章,但似乎无法让它发挥作用,希望有人能提供帮助。

【问题讨论】:

  • 你是荷兰人?作为 jij meer hulp nodig hebt ...让我知道

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


【解决方案1】:

我假设您正在使用自己的发行版,或者扩展某些包的功能...

在你的 constants.ts 中试试这个(以便它们在 BE 常量编辑器中可用)myext/Configuration/TypoScript/constants.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
        }
    }
}

然后在你的 setup.ts 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}

 ...
<f:link.page pageUid="{settings.rootpid}" class="navbar-brand">
    <img src="{logoSrc}" alt="Logo {settings.brandname}" />
</f:link.page>
...

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您可以使用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>
      

      【讨论】:

        猜你喜欢
        • 2016-01-03
        • 2021-09-01
        • 2017-11-05
        • 2017-04-10
        • 2013-03-16
        • 2013-07-26
        • 1970-01-01
        • 2013-08-31
        • 1970-01-01
        相关资源
        最近更新 更多