TYPO3: условие локализации, sys_language_uid в шаблоне жидкости - PullRequest
0 голосов
/ 27 июня 2018

Я бы хотел добиться того, чтобы изображение менялось в зависимости от того, какой язык выбран в данный момент.

Это мой 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 голосов
/ 28 июня 2018

Я предполагаю, что вы используете свой собственный дистрибутив или расширяете функциональность какого-либо пакета ...

Попробуйте это в ваших 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>
...
0 голосов
/ 28 июня 2018

Вы можете получить текущий languageUid, используя viewHelper что-то вроде ниже.

Вы 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>
0 голосов
/ 27 июня 2018

Передайте предварительно оцененное логическое значение в шаблон. Либо от вашего контроллера (там у вас есть доступ к TSFE), либо через TS к объекту FLUIDTEMPLATE. Это не ясно из вопроса, откуда вы пришли. Вы должны переместить условие, встроенное в src, чтобы вы не дублировали всю разметку, а только переключали значение.

Кроме того, вы можете предварительно рассчитать значение src в контроллере или TS и просто передать его в представление.

...