我希望能够使用ListBoxField
将团队成员关联到项目。我有一个ProjectHolder
,其中包含Project
个页面。我还有一个TeamHolder
,其中有TeamPage
个孩子。
我希望能够在ListBoxField
中保存多个团队成员,然后在Project
页面上循环播放这些成员。我还希望能够链接到团队成员页面。 e.g
<% loop $TeamMemberNames %>
<a href="$Link">$Name</a>
<% end_loop %>
我当前的代码:
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;
}
}
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;
}
}
截图:
我可以将TeamPage
对象中的名称拉到ListBoxField
但是在选择名称之后我需要一种方法来保存多个值并获取链接以便我可以链接到相应的列出的团队成员页面。
答案 0 :(得分:5)
要将数据保存到数据库,我们必须首先定义与类中数据的关系。在这种情况下,我们希望在$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;
}
}
现在,在我们的模板中,我们可以通过调用以下内容来遍历Project's
$TeamPages
:
<强>模板强>
<% loop $TeamPages %>
<a href="$Link">$Name</a>
<% end_loop %>
如果我们希望TeamPage
能够访问相关的Projects
,我们可以向$belongs_many_many
类添加TeamPage
以指向Project
课程。ListBoxField
。您还可以从Projects
添加TeamPage
来控制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;
}
}
。
<强> TeamPage.php 强>
TeamPage
需要注意的是Project
和Page
都延伸Title
。这意味着两个类都继承了Title
字段。我建议使用Name
代替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;
}
}
,除非您有特定的理由这样做。
这会产生代码:
<强> Project.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;
}
}
<强> TeamPage.php 强>
<% loop $TeamPages %>
<a href="$Link">$Title</a>
<% end_loop %>
<强>模板强>
power2() { echo "x=l($1)/l(2); scale=0; 2^((x+0.5)/1)" | bc -l; }