Редактировать: Я сделал еще несколько копаний и узнал, как это сделать. Вам нужно вызвать «disable_locale_filter», прежде чем вы получите ваши объекты SiteTree:
Translatable::disable_locale_filter();
Затем вызовите «enable_locale_filter», как только вы их получите:
Translatable::enable_locale_filter();
Это другие подходы, которые я оставлю здесь, так как считаю, что они все еще полезны ...
Я полагаю, что вам, возможно, придется сделать это с помощью Translatable :: 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
}
}
Редактировать: см. Комментарии ниже, но другой вариант - использовать функцию Translatable :: 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.