2016-07-02 4 views
2

Am Looping Lehrer Beziehung auf Vorlage CoursePage.ss aber wenn ich versuche, diese Beziehung teachers innerhalb CouresePage_details.ss funktioniert nicht. Mache etwas falsch.Silverstripe Beziehung ist nicht auf Details Seite

Ich habe zwei Modelle Courses und Teachers

  1. Course können viele teachhers haben
  2. Teacher kann man natürlich

Courses.php

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

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

In dieser Datei ich nur Kurse Schleife, nichts Wichtiges. Hier loopiere ich die Liste der Kurse und Lehrer. Hier arbeiten die Lehrer, die perfekt arbeiten, arbeiten nicht an der Detailvorlage.

CoursesPage_details.ss

ist hier Problem. Wenn ich Details über spezifisches course zeige, möchte ich Schleife teachers, die mit diesem Kurs verbunden ist, aber ich bekomme alle Zeit NULL Rückkehr Teachers does not exist. Sieht so aus, als ob es nicht im Umfang ist.

<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> 

Antwort

4

Sie müssen $Courses.Teachers stattdessen verwenden ... oder Sie könnten nur den Anwendungsbereich auf Kurse ändern, indem <% with $Courses %> verwenden. So Ihre Vorlage würde wie folgt aussehen:

<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> 

Der Grund dafür ist: Sie Ihr Course Datenobjekt an die Vorlage als Parameter namens Courses vorbei. Da dieses DataObject eine Beziehung zu Teachers hat, müssen Sie $Courses.Teachers verwenden oder den Bereich wie oben beschrieben ändern. Standardmäßig befinden Sie sich immer noch im Bereich CoursesPage.

+0

Dank seiner Arbeit. – Ivan

Verwandte Themen