Скрыть опечатку в языковом меню

Я создал языковое меню с множеством HMENU, обернутых на COA. Он работает так, как должен, но я хочу скрыть все языковое меню, если на текущей странице нет перевода. Я не знаю, как это решить. Использование USERDEF1 и USERDEF2 определяет только свойства несуществующего языкового элемента.

Вот моя ТС:

# Sprachmenü
lib.languagemenu = COA
lib.languagemenu {

wrap = <div class="langmenu-box">|</div>

# 1. Menü für die Textausgabe zur Auswahl
10 = HMENU
10 {
   special = language
   special.value = {$lang.keys}
   special.normalWhenNoLanguage = 0

   1 = TMENU
   1  {

      // Normal-Zustand nicht anzeigen
      NO = 1
      NO.doNotShowLink = 1


      // Aktiven Zustand zusammenstellen
      ACT = 1
      ACT {
       allWrap = <span class="hideMobile">|</span>
       stdWrap.override.cObject = TEXT
       stdWrap.override.cObject.value = Wählen Sie Ihre Sprache || Choose your language
       stdWrap.noTrimWrap = | | |
       doNotLinkIt = 1
      }



  }
}

// 2. Menü zur Ausgabe des aktuell gewählten Sprache
20 = HMENU
20 {
  special = language
  special.value = {$lang.keys}
  special.normalWhenNoLanguage = 0

  1 = TMENU
  1 {

    stdWrap.outerWrap = <div class="langmenu">|

      // Normal-Zustand nicht anzeigen
      NO = 1
      NO.doNotShowLink = 1

      // Aktiven Zustand zusammenstellen
      ACT = 1
      ACT {
           allWrap = <button style="background:url(|) transparent no-repeat"><span class="caret-right"></span></button>
           stdWrap.override.cObject = TEXT
           stdWrap.override.cObject {
             value= fileadmin/images/DE_Flag_30x30.png || fileadmin/images/GB_Flag_30x30.png
           }
           doNotLinkIt = 1
      }
  }
}

// 3. Menü zur Erstellung des Dropup-Feldes
30 = HMENU
30 {

    special = language
    special.value = {$lang.keys}
    special.normalWhenNoLanguage = 0

    wrap = <ul class="dropup-menu">|</ul></div>

    1 = TMENU
    1 {
        // Normal Zustände zur Anzeige aller verfügbaren Sprachen
        NO = 1
        NO {
           allWrap = <li>|</li>
           stdWrap.override.cObject = IMAGE
           stdWrap.override.cObject {
            file = fileadmin/images/DE_Flag_30x30.png || fileadmin/images/GB_Flag_30x30.png
           }
           stdWrap.typolink.parameter.data = page:uid
           stdWrap.typolink.additionalParams = &L=0 || &L=1
           stdWrap.typolink.addQueryString = 1
        }

        // Aktiven Zustand ausblenden, da im Dropup-Feld nicht gewünscht
        ACT = 1
        ACT.doNotShowLink = 1
   }
}
}

С Уважением


person MichaelL    schedule 10.05.2015    source источник


Ответы (1)


Я делаю еще одну попытку и нашел решение с другим HMENU и использованием USERDEF1. Если для текущей страницы нет перевода, я получаю конкретную строку. Если задана эта строка, я могу использовать условие текучести для управления выводом всего языкового меню.

Мое решение выглядит так:

Настройка TS

lib.alternateLanguage = HMENU
lib.alternateLanguage {
 special = language
 special.value = {$lang.keys}
 special.normalWhenNoLanguage = 0

 wrap = |

 1 = TMENU
 1 {

      NO = 1
      NO.allWrap = |
      NO.doNotShowLink = 1

      USERDEF1 = 1
      USERDEF1.allWrap = |
      USERDEF1.stdWrap.override.cObject = TEXT
      USERDEF1.stdWrap.override.cObject.value = no
      USERDEF1.doNotLinkIt = 1
 }
}

Жидкость

<f:if condition="{f:cObject(typoscriptObjectPath: 'lib.alternateLanguage')} == \"no\"">
    <f:then></f:then>
    <f:else><f:cObject typoscriptObjectPath="lib.languagemenu" /></f:else>
</f:if>

У меня это отлично работает.

person MichaelL    schedule 11.05.2015