Silverstripe动态页面类型

时间:2016-07-08 13:44:33

标签: php silverstripe

与新项目相混淆。是一所课程学校的工作地点。

课程页面:

课程页面通过管理admin/pages/添加,并具有自己的页面类型和数据对象。 CourseCoursePageCourseCategoryCoursePage有页面模型和控制器,我几乎没有列出课程和类别的方法。我还有模板CoursePage.ssCoursePage_details.ss。 所有课程has one课程类别。

CoursePage_Controller内我有两个主要方法:

 public function details(SS_HTTPRequest $request)

 public function ListAllCourses() {
    return Course::get();
 }

添加新课程

通过admin model添加新课程。我CourseAdmin扩展了ModelAdmin,所有工作都很顺利。

显示课程:

这是通过Course_ControllerCourse_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;
        }
    }

0 个答案:

没有答案