2016-04-03 21 views
4

SilverStripe Fluent modülü, ön taraftaki basit bir dil değiştirme menüsünü görüntülemek için hazır bir şablona sahiptir.SilverStripe Fluent menü şablonu

<% loop Locales %> 
<li class="$LinkingMode"> 
    <a href="$Link.ATT" hreflang="$LocaleRFC1766"<% end_if %>> 
    $Title.XML 
    </a> 
</li> 
<% end_loop %> 

o döngüler zaman "Yerel Ayarlar" teknik olarak ne döngü nedir? "Locales" adlı bir veritabanı tablosu yok.

Amacım, sonunda dilin kısaltmasını döndüren (ülke değil!) Değişkeni bulmak (veya işlevi yazmak). Bu nedenle nl-NL yerine nl ($LocaleRFC1766 geri dönüşleri gibi) döndüren bir şeye ihtiyacım var. FluentExtension uzantısında

cevap

5

Locales is a function:

$data = array(
    'Locale' => $locale, 
    'LocaleRFC1766' => i18n::convert_rfc1766($locale), 
    'Alias' => Fluent::alias($locale), 
    'Title' => i18n::get_locale_name($locale), 
    'LanguageNative' => Fluent::locale_native_name($locale), 
    'Language' => i18n::get_lang_from_locale($locale), 
    'Link' => $link, 
    'AbsoluteLink' => $link ? Director::absoluteURL($link) : null, 
    'LinkingMode' => $linkingMode 
); 

Language

son zamanlarda sadece dil kısaltmasını almak için izin eklendi:

/** 
* Templatable list of all locales 
* 
* @return ArrayList 
*/ 
public function Locales() 
{ 
    $data = array(); 
    foreach (Fluent::locales() as $locale) { 
     $data[] = $this->owner->LocaleInformation($locale); 
    } 
    return new ArrayList($data); 
} 

Bu LocaleInformation function tarafından döndürülen verilerdir.

biz $Language değişkeni kullanan özel LocaleMenu.ss şablon oluşturabilir bu faydalanmak için:

<% if $Locales %> 
<div class="left">Locale <span class="arrow">&rarr;</span> 
    <nav class="primary"> 
     <ul> 
      <% loop $Locales %> 
       <li class="$LinkingMode"> 
        <a href="$Link.ATT" <% if $LinkingMode != 'invalid' %>rel="alternate" hreflang="$Language"<% end_if %>>$Title.XML</a> 
       </li> 
      <% end_loop %> 
     </ul> 
    </nav> 
</div> 
<% end_if %> 
+1

Fantastik, çalıştı. Çekme talebinizin de Üstat için yapıldığını görüyorum. – Faloude