在SilverStripe

时间:2015-12-09 03:56:37

标签: silverstripe

我想知道是否有办法通过代码在SilverStripe中的Page对象上创建新版本。

我使用staticpublisher模块静态缓存页面。我面临的问题是,当保存DataObject时,它不会在父页面上触发发布,因此缓存版本已过期。我通过在父doPublish()对象上运行Page来克服这个问题。但即使发布商尚未准备好让新的更改上线,这显然会发布该页面。

以下是我目前在DataObject上的内容:

function onAfterWrite() {
    parent::onAfterWrite();

    // Get the current page
    $page = Controller::curr()->currentPage();
    if($page) {
        // Publish the page
        $page->doPublish();
    }
}

在保存DataObject并将Page设置为草稿后,有没有办法创建新版本的网页?

我已经审问了这个Versioned class但是从那里得不到任何工作。

任何想法都会有所帮助。

1 个答案:

答案 0 :(得分:1)

我假设您已经在SiteTree对象和DataObject之间创建了一个关系(即hasOne,hasMany或ManyMany)。如果是这种情况,你应该有一个从DO回到SiteTree的反向关系(我们称之为ParentPage)。

您可以使用DataObject的onAfterWrite()调用在页面上触发草稿保存。

class MyDataObject {
 //define a relationship back to the parent
 private static $belongs_to = array('ParentPage' => 'Page');

 //define this function on your DataObject
 public function onAfterWrite() {
  parent::onAfterWrite();

  //trigger a write (but not a publish) on your parent page
  $this->ParentPage()->write();
 }
}