银条组按特定主题划分结果



我有主题(数据模型(、主题(数据模式(和作者(数据模型

例如

  • 主题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">&times;</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());
}

您可以通过这种方式将各种信息传递给模板。

最新更新