SilverStripe控制ChildrenOf具有多语言

时间:2016-07-22 07:38:50

标签: internationalization silverstripe

我遇到了ChildrenOf(页面名称)和多语言的问题。

当我使用

<% control ChildrenOf(aktuelles/messen).Limit(2) %>

它适用于德语,但不适用于英语。

所以我添加了

public function PageByLang($url, $lang) {
    $SQL_url = Convert::raw2sql($url);
    $SQL_lang = Convert::raw2sql($lang);

    $page = Translatable::get_one_by_lang('SiteTree', $SQL_lang, "URLSegment = '$SQL_url'");
if ($page->Locale != Translatable::get_current_locale()) {
    $page = $page->getTranslation(Translatable::get_current_locale());
}
return $page;
}

到我的页面控制器和模板:

<% control ChildrenOf(PageByLang(aktuelles/messen, de_DE)).Limit(2) %>

但它仍无效。

1 个答案:

答案 0 :(得分:1)

我不知道它是否是一个很好的方法,但我在页面控制器中覆盖了ChildrenOf,解决了我的问题:

public function ChildrenOf($parentRef) {
    $parent = SiteTree::get_by_link($parentRef);

    if(!$parent && is_numeric($parentRef)) {
        $parent = DataObject::get_by_id('SiteTree', $parentRef);
    }

    $locale = Translatable::get_current_locale();

    if($parent && $parent->getTranslation($locale))
        return $parent->getTranslation($locale)->Children();
}