我想知道是否有办法通过代码在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但是从那里得不到任何工作。
任何想法都会有所帮助。
答案 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();
}
}