我希望能够将团队成员与使用该项目的项目相关联ListBoxField.我有一个ProjectHolder具有Project网页,因为它的孩子.我也有一个TeamHolder,其具有TeamPage的作为其子.
我希望能够在其中保存多个团队成员ListBoxField,然后在Project页面上循环访问它们.我还希望能够链接到团队成员页面.例如
<% loop $TeamMemberNames %>
<a href="$Link">$Name</a>
<% end_loop %>
Run Code Online (Sandbox Code Playgroud)
我目前的代码:
TeamPage.php
class TeamPage extends Page
{
private static $db = array(
'Name' => 'Varchar(255)',
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.TeamMembers', TextField::create('Name'));
return $fields;
}
}
Run Code Online (Sandbox Code Playgroud)
Project.php
class Project extends Page
{
private static $db = array(
'Name' => 'Varchar(255)',
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.TeamMembers', TextField::create('Name'));
$fields->addFieldToTab('Root.TeamMembers', ListBoxField::create(
'TeamPage',
'Select Team Members for project',
TeamPage::get()->map("ID", "Name")->toArray()
)->setMultiple(true));
return $fields;
}
}
Run Code Online (Sandbox Code Playgroud)
截图:
我可以将TeamPage对象中的名称拉进去,ListBoxField但是在选择名称之后我需要一种方法来保存多个值并获得链接,这样我就可以链接到列出的相应团队成员页面.
要将数据保存到数据库,我们必须首先定义与类中数据的关系.在这种情况下,我们希望$many_many在Project和之间建立关系TeamPage.
在Project课堂上我们添加一个$many_many关系TeamPage.这里,关系名称是TeamPages.
创建时,ListBoxField我们传递TeamPages关系名称,以便字段知道保存此数据的位置:
Project.php
class Project extends Page
{
private static $db = array(
'Name' => 'Varchar(255)'
);
private static $many_many = array(
'TeamPages' => 'TeamPage'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.TeamMembers', TextField::create('Name'));
$fields->addFieldToTab('Root.TeamMembers', ListBoxField::create(
'TeamPages',
'Select Team Members for project',
TeamPage::get()->map('ID', 'Name')->toArray()
)->setMultiple(true));
return $fields;
}
}
Run Code Online (Sandbox Code Playgroud)
现在在我们的模板中,我们可以通过Project's $TeamPages调用以下内容来遍历:
模板
<% loop $TeamPages %>
<a href="$Link">$Name</a>
<% end_loop %>
Run Code Online (Sandbox Code Playgroud)
如果我们希望TeamPage能够访问它的相关内容,Projects我们可以$belongs_many_many在TeamPage类中添加一个指向Project该类的内容.您还可以添加ListBoxField到控制Projects从TeamPage.
TeamPage.php
class TeamPage extends Page
{
private static $db = array(
'Name' => 'Varchar(255)'
);
private static $belongs_many_many = array(
'Projects' => 'Project'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.TeamMembers', TextField::create('Name'));
$fields->addFieldToTab('Root.TeamMembers', ListBoxField::create(
'Projects',
'Select project for this team page',
Project::get()->map('ID', 'Name')->toArray()
)->setMultiple(true));
return $fields;
}
}
Run Code Online (Sandbox Code Playgroud)
需要注意的是TeamPage并且Project都延伸了Page.这意味着两个类都继承了一个Title字段.我会建议使用Title而不是Name,除非你有特定的理由这样做.
这将使代码:
Project.php
class Project extends Page
{
private static $many_many = array(
'TeamPages' => 'TeamPage'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.TeamMembers', ListBoxField::create(
'TeamPages',
'Select Team Members for project',
TeamPage::get()->map('ID', 'Title')->toArray()
)->setMultiple(true));
return $fields;
}
}
Run Code Online (Sandbox Code Playgroud)
TeamPage.php
class TeamPage extends Page
{
private static $belongs_many_many = array(
'Projects' => 'Project'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.Projects', ListBoxField::create(
'Projects',
'Select project for this team page',
Project::get()->map('ID', 'Title')->toArray()
)->setMultiple(true));
return $fields;
}
}
Run Code Online (Sandbox Code Playgroud)
模板
<% loop $TeamPages %>
<a href="$Link">$Title</a>
<% end_loop %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
854 次 |
| 最近记录: |