正在模板 CoursePage.ss
上循环教师关系,但是当我尝试在 CoursePage_details.ss
内循环该关系 teachers
时不起作用。我做错了什么。
我有两个模型类(class)
和教师
类(class)
可以有很多老师老师
可以上一门类(class)
类(class).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
在这个文件中我只是循环类(class),没什么重要的。这里我循环列出类(class)和教师。在这里,教师循环工作完美,只是不适用于详细信息模板。
CoursesPage_details.ss
这里有问题。当我显示有关特定类(class)
的详细信息时,我想循环与该类(class)相关的教师
,但我总是得到NULL
返回教师不存在
。看起来不在范围内。
<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>
最佳答案
您需要使用$Courses.Teachers
相反...或者您可以使用 <% with $Courses %>
将范围更改为类(class)。所以你的模板将如下所示:
<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
的范围内.
关于php - Silverstripe 关系在详细信息页面上不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38160512/