Переключатель языка TYPO3 с FLUID

Я сделал языковое меню (переключатель) для TYPO3 7.6 с Fluid только нет TypoScript, Просто выпадающий список, см. Скриншот ниже. Я также использовал Ext:vhsВот мой пример кода:

{namespace v=FluidTYPO3\Vhs\ViewHelpers}
<ul id="languageMenu" class="dropdown menu" data-dropdown-menu>  
    <!-- german L:0 -->
    <f:if condition="{v:page.language()}==0">
        <li class="de">
            <f:link.page pageUid="{page.uid}" additionalParams="{L:0}">
                <f:image src="EXT:myext/Resources/Public/Icons/Flags/de.svg" width="18" height="14" alt="" />
                <f:translate key="LLL:EXT:myext/Resources/Private/Language/locallang.xlf:language.de" />
            </f:link.page>
            <ul class="menu languageSubMenu">
                <li class="en">
                    <f:link.page pageUid="{page.uid}" additionalParams="{L:1}">
                        <f:image src="EXT:myext/Resources/Public/Icons/Flags/gb.svg" width="18" height="14" alt="" />
                        <f:translate key="LLL:EXT:myext/Resources/Private/Language/locallang.xlf:language.en" />
                    </f:link.page>
                </li>
            </ul>
        </li>
    </f:if>


    <!-- english L:1 -->
    <f:if condition="{v:page.language()}==1">
        <li class="en">
            <f:link.page pageUid="{page.uid}" additionalParams="{L:1}">
                <f:image src="EXT:hellocode/Resources/Public/Icons/Flags/gb.svg" width="18" height="14"
                         alt="{f:translate(key: 'LLL:EXT:hellocode/Resources/Private/Language/locallang.xlf:language.en')}" />
                <f:translate key="LLL:EXT:myext/Resources/Private/Language/locallang.xlf:language.en" />
            </f:link.page>
            <ul class="menu languageSubMenu">
                <li class="de">
                    <f:link.page pageUid="{page.uid}" additionalParams="{L:0}">
                        <f:image src="EXT:myext/Resources/Public/Icons/Flags/de.svg" width="18" height="14" alt="" />
                        <f:translate key="LLL:EXT:myext/Resources/Private/Language/locallang.xlf:language.de" />
                    </f:link.page>
                </li>
            </ul>
        </li>
    </f:if>
</ul>

На данный момент переключатель языка всегда отображается. Если нет перевода страницы, я получу ошибку 404. Конечно, отсутствующей страницы не существует. Как я могу скрыть переключение языка, если нет перевода?

В прошлом я использовал USERDEF1 с TypoScript, но мне нужно решение с Fluid, Я также вижу, что есть viewhelper v: condition.page.isLanguage, но это не работает для меня, или я не знаю как?! Можно ли сделать это с помощью жидкости или vhs?

Буду благодарен за любые советы. В противном случае мне придется снова написать опечатку...

переключатель языка интерфейса

2 ответа

LanguageMenuViewHelper является помощь. Для этого требуется расширение Static Info Tables:

Вот код, который я использую, подходит для доступности, работает с Bootstrap 4:

<div class="navbar-nav mr-auto dropdown show">
        <v:page.languageMenu
              hideNotTranslated="1" 
              order="0,1,2,3" 
              layout="name" 
              defaultLanguageLabel="Français"
              defaultIsoFlag="fr"
              labelOverwrite="FR,EN,NL,ES"
              as="menu">

              <ul class="navbar-nav mr-auto">
                <f:for each="{menu}" as="langMenu">
                  <li class="nav-item>

                    <f:if condition="{langMenu.current}=1">
                        <f:link.page pageUid="{page.uid}"
                            id="dropdownMenuLink" 
                            class="dropdown-toggle nav-link lang px-3 flag-nav--{langMenu.flag}"
                            additionalAttributes="{data-toggle:'dropdown', aria-haspopup:'true', aria-expanded:'false'}"
                            lang="{f:if(condition: '{langMenu.current}=1', then: '{langMenu.flag}')}"
                            title="<f:switch expression='{langMenu.flag}'>
                                        <f:case value='fr'>français actif, changer de langue</f:case>
                                        <f:case value='gb'>english activate, modify language</f:case>
                                        <f:case value='nl'>Engels activeren, taal wijzigen</f:case>
                                        <f:case value='es'>Español activo, cambio de idioma</f:case>
                                   </f:switch>"
                        >
                            {langMenu.label}
                        </f:link.page>
                    </f:if>

                    <ul class="dropdown-menu" aria-labelledby="dropdownMenuLink" aria-expended="false">
                        <f:for each="{menu}" as="langMenu">

                            <f:switch expression='{langMenu.flag}'>
                                <f:case value='fr'>{v:variable.set(value: '0', name: 'langparam')}</f:case>
                                <f:case value='gb'>{v:variable.set(value: '1', name: 'langparam')}</f:case>
                                <f:case value='nl'>{v:variable.set(value: '2', name: 'langparam')}</f:case>
                                <f:case value='nl'>{v:variable.set(value: '3', name: 'langparam')}</f:case>
                            </f:switch>

                            <li>
                                <f:link.page pageUid="{page.uid}"
                                    class="dropdown-item"
                                    lang="{langMenu.flag}"
                                    title="<f:switch expression='{langMenu.flag}'>
                                                <f:case value='fr'>Passer le site en français</f:case>
                                                <f:case value='gb'>Go to english version</f:case>
                                                <f:case value='nl'>Ga naar de nederlandse versie</f:case>
                                                <f:case value='es'>Salta el sitio en español</f:case>
                                           </f:switch>"
                                    additionalParams="{L:'{langparam}'}"
                                >
                                    {langMenu.label}
                                </f:link.page>
                            </li>

                        </f:for>
                    </ul>

                  </li>
                </f:for>
              </ul>
        </v:page.languageMenu>
</div>

Вы можете использовать VHS и ViewHelpers LanguageMenu

[https://fluidtypo3.org/viewhelpers/vhs/master/Page/LanguageMenuViewHelper.html][1]

Я могу только предложить использовать https://typo3.org/extensions/repository/view/sr_language_menu

Вы можете просто использовать его следующим образом: https://bitbucket.org/reelworx/rx-typo3-sitesetup/src/e34b675a223f02580838fe7d5d118d7f07fd8a68/Resources/Private/Layouts/Default.html?at=master&fileviewer=file-view-default

Конечно, он полностью основан на Fluid, поэтому вы можете переопределить все шаблоны в соответствии со своими потребностями.

Другие вопросы по тегам