Silverstripe - 使模块从自定义页面类型扩展的最佳方式
Silverstripe - Best way to make a module extend from custom page type
我的站点结构是所有自定义页面类型,具有从 Page.php 扩展的单个父页面。
class CustomPage extends Page {}
class Custom_Controller extends Page_Controller {
//load all javascript/css for entire site here etc
}
class SomeClass extends CustomPage {}
class SomeClass_Controller extends Custom_Controller
{
// etc etc you get the point.
}
站点中的每个其他页面现在分别从 CustomPage 和 Custom_Controller 扩展而来。 Page.php 几乎是空的。
现在使用非内部编写的模块时就会出现问题。例如,Blog* 模块将不会继承新基础 class Custom_Controller 中定义的 javascripts/css/functions,因为它被设置为扩展 Page_Controller.
基本 Blog_Controller 扩展 Custom_Controller 而无需修改博客模块的理想方法是什么?
*博客模块只是一个例子。这适用于所有模块。
直接问题的简短回答
What is the ideal method here for basically making Blog_Controller extend Custom_Controller without modifying the Blog module?
是技术上做不到。实际上你有两个选择;
- 直接对 Page/Page_Controller class 进行更改
- 在您的自定义页面类型中继承 Page/Page_Controller,但不是直接修改页面,而是使用绑定到页面的扩展来为所有子页面类型提供自定义行为。对于提供自定义
init()
行为的特定情况,您需要一个扩展 Extension
class 并绑定到 Page_Controller 的自定义扩展
查看 the extension documentation 了解更多信息
我的站点结构是所有自定义页面类型,具有从 Page.php 扩展的单个父页面。
class CustomPage extends Page {}
class Custom_Controller extends Page_Controller {
//load all javascript/css for entire site here etc
}
class SomeClass extends CustomPage {}
class SomeClass_Controller extends Custom_Controller
{
// etc etc you get the point.
}
站点中的每个其他页面现在分别从 CustomPage 和 Custom_Controller 扩展而来。 Page.php 几乎是空的。
现在使用非内部编写的模块时就会出现问题。例如,Blog* 模块将不会继承新基础 class Custom_Controller 中定义的 javascripts/css/functions,因为它被设置为扩展 Page_Controller.
基本 Blog_Controller 扩展 Custom_Controller 而无需修改博客模块的理想方法是什么?
*博客模块只是一个例子。这适用于所有模块。
直接问题的简短回答
What is the ideal method here for basically making Blog_Controller extend Custom_Controller without modifying the Blog module?
是技术上做不到。实际上你有两个选择;
- 直接对 Page/Page_Controller class 进行更改
- 在您的自定义页面类型中继承 Page/Page_Controller,但不是直接修改页面,而是使用绑定到页面的扩展来为所有子页面类型提供自定义行为。对于提供自定义
init()
行为的特定情况,您需要一个扩展Extension
class 并绑定到 Page_Controller 的自定义扩展
查看 the extension documentation 了解更多信息