編輯:我做了一些更多的挖掘,發現瞭如何做到這一點。你需要調用 「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.
嗨,thx首先適用於成員語言,但我希望人們能夠鏈接到CMS中可用的任何語言。因此,下拉菜單中將包含兩種語言的SiteTree。或者至少讓用戶在編輯英文頁面時鏈接到英文頁面。 – spankmaster79 2011-02-15 09:57:19