如何保存输入到 ListBoxField 中的多个值并循环遍历值?
How to save multiple values entered into ListBoxField and loop through values?
我希望能够使用 ListBoxField
将团队成员关联到项目。我有一个 ProjectHolder
,它有 Project
页,因为它是 children。我还有一个 TeamHolder
,它的 TeamPage
作为它的 children。
我希望能够在 ListBoxField
中保存多个团队成员,然后在 Project
页面上循环浏览他们。我也希望能够 link 到团队成员页面。例如
<% 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
Object 中的名称拉入 ListBoxField
但是在选择名称后我需要一种方法来保存多个值并获得 Link 这样我就可以 link 转到列出的相应团队成员页面。
要将数据保存到数据库中,我们必须首先在 class 中定义与数据的关系。在这种情况下,我们要在 Project
和 TeamPage
之间创建 $many_many
关系。
在 Project
class 中我们添加 $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
class 来指向回到 Project
class。您还可以从 TeamPage
.
添加一个 ListBoxField
来控制 Projects
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;
}
}
需要注意的是 TeamPage
和 Project
都扩展了 Page
。这意味着两个 class 都继承了一个 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;
}
}
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;
}
}
模板
<% loop $TeamPages %>
<a href="$Link">$Title</a>
<% end_loop %>
我希望能够使用 ListBoxField
将团队成员关联到项目。我有一个 ProjectHolder
,它有 Project
页,因为它是 children。我还有一个 TeamHolder
,它的 TeamPage
作为它的 children。
我希望能够在 ListBoxField
中保存多个团队成员,然后在 Project
页面上循环浏览他们。我也希望能够 link 到团队成员页面。例如
<% 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
Object 中的名称拉入 ListBoxField
但是在选择名称后我需要一种方法来保存多个值并获得 Link 这样我就可以 link 转到列出的相应团队成员页面。
要将数据保存到数据库中,我们必须首先在 class 中定义与数据的关系。在这种情况下,我们要在 Project
和 TeamPage
之间创建 $many_many
关系。
在 Project
class 中我们添加 $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
class 来指向回到 Project
class。您还可以从 TeamPage
.
ListBoxField
来控制 Projects
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;
}
}
需要注意的是 TeamPage
和 Project
都扩展了 Page
。这意味着两个 class 都继承了一个 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;
}
}
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;
}
}
模板
<% loop $TeamPages %>
<a href="$Link">$Title</a>
<% end_loop %>