与新项目相混淆。是一所课程学校的工作地点。
课程页面:
课程页面通过管理admin/pages/
添加,并具有自己的页面类型和数据对象。 Course
,CoursePage
,CourseCategory
。 CoursePage
有页面模型和控制器,我几乎没有列出课程和类别的方法。我还有模板CoursePage.ss
和CoursePage_details.ss
。
所有课程has one
课程类别。
在CoursePage_Controller
内我有两个主要方法:
public function details(SS_HTTPRequest $request)
public function ListAllCourses() {
return Course::get();
}
添加新课程
通过admin model
添加新课程。我CourseAdmin
扩展了ModelAdmin
,所有工作都很顺利。
显示课程:
这是通过Course_Controller
和Course_Page.ss
以及Course_Page_details.ss
一切都很棒但现在问题来了:
问题:
我的客户希望在Courses
页面内创建子页面,并在特定页面上分配选定的课程。
因此,他想创建新的子Web development courses
页面,并希望仅在该页面上循环用于Web开发的课程。
这里我有问题,因为我正在通过管理模型添加课程。接下来,所有子页面必须具有自己的页面类型,如WebDevelopmentPage
,我将按类别查询和过滤这些课程。
因此,如果客户想要添加新的子页面并希望将课程分配给该子页面,他必须打电话给我,因为我必须为该新页面为所有页面创建新的页面类型和新的页面模板!这真是太糟糕了......
如果有办法可以通过子页面过滤信息?或者系统自动创建新页面类型的任何技巧?
更新:
解决方案1:
我试试这个并且工作正常,但我认为这是一个不好的做法。
在Course
数据对象中,我添加了新的db
字段UrlSegment
,其中用户必须在页面网址上映射一些网址段。我将在一页上过滤所有内容
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;
}
}