2011-02-03 98 views
2

我創建了一個鏈接數據對象自動讓用戶創建的前端到不同的頁面的引用。我在前端使用兩種語言,德語和英語。在彈出我創建了一個下拉菜單選擇Silverstripe頁面關係

public function getCMSFields_forPopup() 
{ 
    return new FieldSet(
     new TextField('Titel'), 
     new TextField('URL', 'Externer Link'), 
     new SimpleTreeDropdownField('PageLinkID', 'Interner Link', 'SiteTree') 
    ); 
} 

的網頁,但我只得到下拉德國的網頁。試圖改變管理語言爲英文,但沒有改變。該數據庫似乎只返回德國網頁...

任何線索?

回答

4

編輯:我做了一些更多的挖掘,發現瞭如何做到這一點。你需要調用 「disable_locale_filter」 你得到你的SiteTree對象之前:

Translatable::disable_locale_filter(); 

然後調用 「enable_locale_filter」 一旦檢索他們:

Translatable::enable_locale_filter(); 

這是其他方法,其因爲我認爲他們仍然是有用的,我會離開這裏...

我相信你可能要做到這一點使用Translatab le :: get_by_locale() - 我假設你只希望人們能夠選擇一個頁面鏈接到他們的語言?

也許這樣的事情?

public function getCMSFields_forPopup() 
{ 
    $member = Member::currentUser(); 
    if($member && $member->Locale) { 

     $pagesByLocale = Translatable::get_by_locale('SiteTree', $member->Locale); 
     $pagesByLocale = $pagesByLocale->map('ID', 'Title', '(Select one)', true); 

     return new FieldSet(
      new TextField('Title'), 
      new TextField('URL', 'Externer Link'), 
      new DropdownField('PageLinkID', 'Interner Link', $pagesByLocale); 
     ); 

    } else { 

     // Handle non-member 

    } 

} 

編輯:請參閱下面的評論,但另一種選擇是使用可翻譯:: get_current_locale()函數來找到該區域設置在網站樹中的所有網頁...如果用戶正在瀏覽的英文網頁,則區域應設置爲英語等...

public function getCMSFields_forPopup() 
{ 
    $pagesByLocale = Translatable::get_by_locale('SiteTree', Translatable::get_current_locale()); 
    $pagesByLocale = $pagesByLocale->map('ID', 'Title', '(Select one)', true); 

    return new FieldSet(
     new TextField('Title'), 
     new TextField('URL', 'Externer Link'), 
     new DropdownField('PageLinkID', 'Interner Link', $pagesByLocale); 
    ); 

} 

您也可以從當前頁面如獲得區域

$this->Locale; // From within the model 
$this->dataRecord->Locale; // from within the controller 
Director::get_current_page()->Locale; // If you're outside the context of the page altogether i.e. code inside your DataObject. 
+0

嗨,thx首先適用於成員語言,但我希望人們能夠鏈接到CMS中可用的任何語言。因此,下拉菜單中將包含兩種語言的SiteTree。或者至少讓用戶在編輯英文頁面時鏈接到英文頁面。 – spankmaster79 2011-02-15 09:57:19