2016-07-06 81 views
2

我想了解隱藏的最佳實踐方法SilverStripe的默認pagetypes例如虛擬頁SilverStripe隱藏默認pagetypes

我假定這些pagetypes的代碼都埋在覈心,這是我寧可保持不動。所以我發現這個方法的工作:

class HidePageType_VirtualPage extends Page implements HiddenClass { static $hide_ancestor = 'VirtualPage'; }

儘管這似乎是最乾淨和最哈克解決方案,我仍然不知道如果任何人有一個更好的辦法。此外,此方法正在根據類名創建新的數據庫列,考慮到隱藏頁類型的目標沒有意義。

回答

2

有可能是一個更好的解決方案,但我只是創建一個擴展,在canCreate方法返回false。例如:

class CantCreateExtension extends DataExtension 
{ 
    public function canCreate($member) 
    { 
     return false; 
    } 
} 

然後把它應用到你不想要的頁面被創建,通過添加以下到您的_config.yml

VirtualPage: 
    extensions: 
    - CantCreateExtension 
+0

乾杯,這樣做同樣的工作(隱藏網頁類型的創建沒有數據庫添加,很好的解決方案。我嘗試了同樣的方法,而不是'DataExtension',我編寫了'VirtualPageExtension'並且得到了500錯誤。 – Faloude

+0

作爲一個後續問題:我希望管理員能夠查看,創建和編輯錯誤頁面,但是將其從CMS SiteTree for'content_authors'完全隱藏,也就是普通用戶。我嘗試了相同的方法,但使用'canView',但頁面仍然可以在SiteTree中看到。我相信'canView'只會禁用實際打開的頁面(奇怪的是,現在有500個錯誤,canView設置爲false)。 – Faloude

+0

@Faloude你需要重寫「canView」和「canEdit」...應該工作。 – bummzack