Silverstripe 如何保存输入到ListBoxField中的多个值并循环值?

Silverstripe 如何保存输入到ListBoxField中的多个值并循环值?,silverstripe,Silverstripe,我希望能够使用ListBoxField将团队成员与项目关联。我有一个ProjectHolder,它有Project页面作为子页面。我还有一个TeamHolder,它的子项是TeamPage 我希望能够在列表框字段中保存多个团队成员,然后在项目页面上循环查看他们。我还希望能够链接到团队成员页面。e、 g <% loop $TeamMemberNames %> <a href="$Link">$Name</a> <% end_loop %>

我希望能够使用
ListBoxField
将团队成员与项目关联。我有一个
ProjectHolder
,它有
Project
页面作为子页面。我还有一个
TeamHolder
,它的子项是
TeamPage

我希望能够在
列表框字段中保存多个团队成员
,然后在
项目
页面上循环查看他们。我还希望能够链接到团队成员页面。e、 g

<% loop $TeamMemberNames %>
    <a href="$Link">$Name</a>
<% end_loop %>
Project.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;
    }
}
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;
    }

}
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;
    }
}
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;
    }
}
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;
    }
}
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
对象中的名称拉入
ListBoxField
中,但是在选择名称后,我需要一种方法来保存多个值并获取链接,以便链接到列出的相应团队成员页面

要将数据保存到数据库中,我们必须首先定义与类中数据的关系。在这种情况下,我们希望在
项目
团队页面
之间创建一个
$many\u many
关系

项目
类中,我们将
$many\u many
关系添加到
团队页面
。这里,关系名称是
TeamPages

创建
ListBoxField
时,我们传递
TeamPages
关系名称,以便该字段知道在何处保存此数据:

Project.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;
    }
}
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;
    }

}
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;
    }
}
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;
    }
}
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;
    }
}
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;
    }
}
现在,在我们的模板中,我们可以通过调用以下命令循环
项目的
$TeamPages

模板

<% loop $TeamPages %>
    <a href="$Link">$Name</a>
<% end_loop %>
<% loop $TeamPages %>
    <a href="$Link">$Title</a>
<% end_loop %>
需要注意的是
TeamPage
Project
都扩展了
Page
。这意味着两个类都继承一个
标题
字段。我建议使用
Title
而不是
Name
,除非您有特定的理由这样做

这将使代码:

Project.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;
    }
}
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;
    }

}
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;
    }
}
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;
    }
}
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;
    }
}
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

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;
    }
}
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;
    }

}
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;
    }
}
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;
    }
}
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;
    }
}
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">$Name</a>
<% end_loop %>
<% loop $TeamPages %>
    <a href="$Link">$Title</a>
<% end_loop %>


首先需要定义如何将其保存在数据库中。我猜一个成员可以加入很多项目,而一个项目有很多成员,你需要一个$many\u-many关系。你做完功课了吗?那里的教程应该涵盖所有内容。非常感谢,就这样!感谢您的时间:)