2
對於必須始終在網站上的頁面(只有1個,而不是像主頁),我想進行擴展。當我運行開發/構建時,應該創建頁面,並且不能在CMS中創建,刪除,取消發佈或存檔。但可以編輯它。SilverStripe可以在分機上創建
寄託都似乎工作得很好,除了canCreate
功能。看起來,這個功能對於CMS在(n)(數據)擴展中時並沒有太多的幫助。當我在.../admin/pages/add時,我仍然可以根據需要多次創建頁面。
如果我移動canCreate
HomePage類,它的工作。但我想它在我的分機:-)
class OnePage extends DataExtension
{
public function requireDefaultRecords()
{
if($this->canCreate()) {
$page = $this->owner;
$page->Title = $this->owner->className;
$page->write();
$page->publish('Stage', 'Live');
$page->flushCache();
}
}
public function canCreate($member = null)
{
return $this->owner->get()->count() == 0;
}
public function canDeleteFromLive($member = null)
{
return false;
}
public function canArchive($member = null)
{
return false;
}
}
class HomePage extends Page
{
private static $extensions = [
'OnePage'
];
}
我是不是該做的正確的方式還是我失去了一些東西?
編輯
的canCreate
方法工作得很好,這樣我就可以解決這個問題這樣;
class HomePage extends Page
{
public function canCreate($member = null)
{
return $this->get()->count() == 0;
}
}
這具有理想的效果,像魅力一樣工作。但是,問題是將canCreate
方法放入擴展中。這也應該工作,對嗎?
感謝公佈https://github.com/wernerkrauss/silverstripe-onepage/,然而'get'函數確實有效。它是'DataObject'上的[method](http://api.silverstripe.org/3.1/class-DataObject.html#_get)。它返回一個DataList,所以你可以在你的答案中改變它?除此之外,我不打算髮布它,只是將它用於我自己的。這個答案並沒有真正回答我的問題,因爲我聲明canCreate函數可以工作,如果你將它移動到實際的HomePage類 –
'get'是一個靜態方法,我懷疑你可以直接從擴展中調用它。 – wmk
作爲非靜態方法調用靜態方法[is possible](http://stackoverflow.com/a/10907777/6251886)試試看。 –