SilverStripe默认语言环境中的可翻译保存值,并将其复制到非默认语言环境

时间:2015-10-08 13:29:29

标签: php translation silverstripe

我的项目是使用SilverStripe 3.1.13(CMS和框架)构建的,我正在使用silverstripe-translatabledataobject-translatable来组织我在网站上的翻译。

假设我有Post.phpDataObject用于处理我网站上的帖子),每个帖子都有自己的categorymany-many关系就在这里,但这并不重要))。

问题是:我在创建新的Save数据对象时点击Post按钮,我希望这些category会自动复制到另一个区域设置。

我怎样才能在我的应用中实现它?我想将这些值(它们是布尔值)保存到这些数据对象的另一个转换中。

1 个答案:

答案 0 :(得分:2)

afaik没有内置功能,但您可以在onAfterWrite()方法中编写类似的内容:

public function onAfterWrite() {
    $this->syncCategories();
}

public function syncCategories() {
    //check if you're in main language, assuminig en_US here
    if ($this->Locale !== 'en_US') return;
    foreach ($this->getTranslations() as $translatedPage) {
        //sync relations here
        $translatedPage->RelationName = $this->RelationName;
        //maybe more fine grained locic for only publishing when translated page is alredy published
        $translatedPage->doPublish(); //writes and publishes in one
    }
}