我有主题(数据模型(、主题(数据模式(和作者(数据模型
例如
- 主题1-论文1-论文2
- 主题2-论文3
到目前为止我有以下
<?php
class ThesisDissertations extends Page {
}
class ThesisDissertations_Controller extends Page_Controller {
public function getSubject() {
$subjectgroup = new PaginatedList(Subject::get());
return $subjectgroup;
}
public function ThesesDissertations() {
$pages = new PaginatedList(Theses::get()
->leftJoin("Author", "Theses.AuthorID = Author.ID")
->leftJoin("Subject", "Theses.SubjectID = Subject.ID")
->where("Theses.SubjectID = 'getSubject'")
->sort('SubjectTitle'), $this->getRequest());
$pages->setPageLength(15);
return $pages;
}
}
对于模板
<div class="container"><ul><% loop $getSubject %>
$SubjectTitle
<br>
<% loop $ThesesDissertations %>
<!-- Trigger the modal with a button -->
<li><a href="" type="button" data-toggle="modal" data-target="#$ID"><strong>$Author.AuthorName</strong></a></li>
<!-- Modal -->
<div id="$ID" class="modal fade" role="dialog">
<div class="modal-dialog modal-lg">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title"><strong>$TitleTH</strong></h4>
<em>$CallNo, $Author.AuthorName </em>
</div>
<div class="modal-body">
<p class="text-justify">$Summary<br>Subjects : <em>$Subject.SubjectTitle</em>
<hr>
<em><strong>Physical Description :</strong> <% if $PhysicalDesc="" %>No Description Available<% else %>$PhysicalDesc<% end_if %><br>
<strong>Degree Course :</strong> $DegreeCourse<br>
<strong>Year Published :</strong> $Year</em></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div><br><% end_loop %><% end_loop %></ul></div>
主题数据对象
class Subject extends DataObject{
private static $db = array (
'SubjectTitle' => 'Varchar',
);
private static $has_many = array (
'Theses' => 'Theses',
);
public function canView($member = null) {
return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}
public function canEdit($member = null) {
return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}
public function canDelete($member = null) {
return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}
public function canCreate($member = null) {
return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}
private static $summary_fields = array(
'SubjectTitle',
);
}
?>
Theses数据对象
class Theses扩展了DataObject{
private static $db = array (
'CallNo' => 'Varchar',
'AuthorID' => 'Int',
'TitleTH' => 'Text',
'Year' => 'Int(4)',
'PhysicalDesc' => 'Text',
'Notes' => 'Text',
'Summary' => 'Text',
'SubjectID' => 'Int',
'DegreeCourse' => 'Varchar',
);
private static $has_one = array (
'Author' => 'Author',
'Subject' => 'Subject',
);
private static $field_labels = array(
'CallNo' => 'Call Number',
'TitleTH' => 'Title Headings',
'Author.AuthorName'=>'Author',
'DegreeCourse'=>'Degree Course',
'Year'=>'Year Published',
'Subject.SubjectTitle'=>'Subject',
);
private static $summary_fields = array (
'CallNo' => 'CallNo',
'TitleTH' => 'TitleTH',
'Author.AuthorName',
'DegreeCourse',
'Year'=>'Year',
'Subject.SubjectTitle',
);
public function getCMSfields() {
$fields = FieldList::create(TabSet::create('Root'));
$fields->addFieldsToTab('Root.Main', array(
TextField::create('CallNo'),
DropdownField::create('AuthorID','AuthorName')->setEmptyString('-Select one-')->setSource(Author::get()->sort('AuthorName')->map('ID','AuthorName')),
TextField::create('TitleTH'),
NumericField::create('Year','Year')->setMaxLength(4),
TextField::create('PhysicalDesc'),
TextField::create('Notes'),
TextAreaField::create('Summary'),
DropdownField::create('DegreeCourse','DegreeCourse',array('BLIS' => 'BLIS','BLS' => 'BLS','MLIS' => 'MLIS','MLS' => 'MLS')),
DropdownField::create('SubjectID','SubjectTitle')->setEmptyString('-Select one-')->setSource(Subject::get()->sort('SubjectTitle')->map('ID','SubjectTitle')),
));
return $fields;
}
}
?>
作者数据对象[如果你曾经想要]
class Author extends DataObject{
private static $db = array (
'AuthorName' => 'Varchar',
);
private static $has_many = array (
'Theses' => 'Theses',
);
public function canView($member = null) {
return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}
public function canEdit($member = null) {
return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}
public function canDelete($member = null) {
return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}
public function canCreate($member = null) {
return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}
private static $summary_fields = array(
'AuthorName',
); }?>
我真的不确定你到底得到了什么。在你的数据模型中,我认为每一篇论文都有一个主题,每一个主题都可以有多篇论文,这些关系在你的模型中定义。然后你可以为你的模板提供一个主题列表。您不必为此使用控制器功能。因此,只需将"Subjects"=>Subject::get((添加到传递给模板的数组中,就可以执行以下操作:(缩短且未经测试,但您会得到漂移(:
<% loop $Subjects %>
$SubjectTitle
<% loop $Theses %>
$CallNo, $Author.AuthorName
<% endloop %>
<% endloop %>
当您想让"主题"可用于模板时,可以执行以下操作。
在页面控制器(在您的情况下为ThesisDissertation_controller(中,添加以下功能:
public function index() {
return array("Subjects" => Subject::get());
}
您可以通过这种方式将各种信息传递给模板。