Php Silverstripe动态页面类型

Php Silverstripe动态页面类型,php,silverstripe,Php,Silverstripe,我对新项目感到困惑。我在一所课程学校工作 课程页面: 课程页面通过administrationadmin/pages/添加,并具有自己的页面类型和数据对象课程,课程页,课程分类CoursePage有页面模型和控制器,我几乎没有列出课程和类别的方法。我还有模板CoursePage.ss和CoursePage\u details.ss。 所有课程都有一个课程类别 在CoursePage\u控制器内部我有两种主要方法: public function details(SS_HTTPRequest $

我对新项目感到困惑。我在一所课程学校工作

课程页面:

课程页面通过administration
admin/pages/
添加,并具有自己的页面类型和数据对象<代码>课程,
课程页
课程分类
CoursePage
有页面模型和控制器,我几乎没有列出课程和类别的方法。我还有模板
CoursePage.ss
CoursePage\u details.ss
。 所有课程
都有一个
课程类别

CoursePage\u控制器内部
我有两种主要方法:

 public function details(SS_HTTPRequest $request)

 public function ListAllCourses() {
    return Course::get();
 }
添加新课程:

通过
管理模型
添加新课程。我有
CourseAdmin
,它扩展了
ModelAdmin
,而且一切都很好

显示课程:

这是通过
Course\u Controller
Course\u Page.ss
Course\u Page\u details.ss

一切都很好,但现在问题来了:

问题:

我的客户希望在
课程
页面中创建子页面,并在特定页面上分配所选课程

因此,他想创建新的child
Web开发课程
page,并且只想在该页面上循环Web开发课程

这里我有问题,因为我通过管理模式添加课程。接下来,所有的子页面都必须有自己的页面类型,比如
WebDevelopmentPage
,在这里我将按类别查询和过滤这些课程

所以,如果客户想要添加新的子页面,并且想要为该子页面分配课程,他必须给我打电话,因为我必须为所有该页面创建新的页面类型和新的页面模板,为该新的子页面!那真的很糟糕

是否有一种方法可以通过子页面过滤信息?或者有什么技巧可以让系统自动创建新的页面类型

更新:

解决方案1:

我试过了,效果还不错,但我认为这是一个糟糕的做法。 在
课程
数据对象中,我添加了一个新的
db
字段
urlsecgment
,用户必须在其中映射一些url段,如页面url上的url。我将在一页上过滤所有内容

 public function Courses()
    {
        if($this->URLSegment == "all-courses") {  
            return Courses::get();
        }else {
            $c = Courses::get()->filter(array(
                'UrlSegment' => $this->URLSegment
            ))->sort('Featured', 'DESC');

            return $c;
        }
    }

为什么不让客户将课程链接到他想要的页面(例如使用
hay\u many
many\u many
关系)?这可以通过courses-subpage上的GridField完成。您可以添加courses 1:n CourseCategory关系并按其过滤?无需制作单独的子页面,您可以使用课程控制器中的操作进行过滤。例如,请参阅此处列出的其他课程。我的客户希望有单独的子页面。我已经有了
1:n
关系为什么不让客户将课程链接到他想要的页面(例如使用
hay\u many
many\u many
关系)?这可以通过courses-subpage上的GridField完成。您可以添加courses 1:n CourseCategory关系并按其过滤?无需制作单独的子页面,您可以使用课程控制器中的操作进行过滤。例如,请参阅此处列出的其他课程。我的客户希望有单独的子页面。我已经有了
1:n
关系