详细信息页面上不显示Silverstripe关系

时间:2016-07-02 13:08:54

标签: php silverstripe

在模板CoursePage.ss上循环教师关系但是当我尝试在teachers内循环该关系CouresePage_details.ss时不起作用。我做错了什么。

我有两个模型CoursesTeachers

  1. Course可以有很多教练
  2. Teacher可以有一门课程
  3. Courses.php

    class Courses extends DataObject 
    {
         private static $many_many = array(
            'Teachers' => 'Teachers',
        );
    }
    

    Teachers.php

    class Courses extends DataObject 
    {
         private static $belongs_many_many = array(
            'Courses ' => 'Courses ',
        );
    }
    

    CoursesPage.php

    class CoursesPage extends Page
    {
    
    }
    
    class CoursesPage_Controller extends Page_Controller
    {
        public static $allowed_actions = array(
            'details'
        );
    
        // Show specific course
    
        public function details(SS_HTTPRequest $request)
        {
            $c= Courses::get()->byID($request->param('ID'));
    
            if(!$c) {
                return $this->httpError(404, "Courses not found");
            }
    
            return array(
                'Courses' => $c,
            );
        }
    
        // Courses list
    
        public function CoursesList ()
        {
           $c = Courses::get()->sort('Featured', 'DESC');
    
            return $c;
         }
    }
    

    CoursesPage.ss

    在这个文件中我只是循环课程,没什么重要的。在这里,我循环列出了课程和教师。在这里,教师循环工作完美无法在细节模板上工作。

    CoursesPage_details.ss

    这是问题所在。当我显示有关特定course的详细信息时,我想循环teachers与此课程相关,但我始终获得NULL返回Teachers does not exist。看起来它不在范围内。

    <section class="course-details">
        <h2>$Courses.Name</h2> <!-- Work -->
        <p>$Courses.Descr</p>
    
        <ul class="teachers-list">
            <% if $Teachers %> <!-- Not work here, but on CoursePage.ss work -->
                <% loop $Teachers %>
                     $FirstName
                <% end_loop %>
            <% else >
               Teachers does not exist
            <% end_if %>
        </ul>
    </section>
    

1 个答案:

答案 0 :(得分:4)

您需要使用$Courses.Teachers代替......或者您可以使用<% with $Courses %>将范围更改为课程。所以你的模板看起来像这样:

<section class="course-details">
<% with $Courses %>
    <h2>$Name</h2>
    <p>$Descr</p>

    <ul class="teachers-list">
        <% if $Teachers %> 
            <% loop $Teachers %>
                 $FirstName
            <% end_loop %>
        <% else >
           Teachers does not exist
        <% end_if %>
    </ul>
<% end_with %>
</section>

原因是:您将Course DataObject作为名为Courses的参数传递给模板。这个DataObject与教师有关系,因此您需要使用$Courses.Teachers或更改上述范围。 默认情况下,您仍在CoursesPage范围内。