在多个页面中显示的 Silverstripe 数据对象
Silverstripe dataobject to display in multiple pages
我似乎无法弄清楚如何以多种方式使用数据对象。现在我只能让它显示在一页中。
我希望能够在 cms 中编辑 table 的项目,在一页上显示项目列表,然后在另一页上显示一个特定项目。
到目前为止,这是我构建它的方式,它允许我在页面中列出所有客户端并在 CMS 中编辑它们。我无法在 "clientPage" 以外的页面上列出它们,也看不到一个客户的详细视图页面。
class Clients extends DataObject {
public static $db = array(
//All the table columns
);
// One-to-one relationship with profile picture
public static $has_one = array(
'ProfilePicture' => 'Image',
'ClientPage' => 'ClientPage'
);
// Summary fields
public static $summary_fields = array(
'ProfilePicture.CMSThumbnail'=>'Picture',
'FIRST_NAME'=>'First Name',
'LAST_NAME'=>'Last Name',
'EMAIL'=>'Email'
);
public function getCMSFields_forPopup() {
// Profile picture field
$thumbField = new UploadField('ProfilePicture', 'Profile picture');
$thumbField->allowedExtensions = array('jpg', 'png', 'gif');
// Name, Description and Website fields
return new FieldList(
//all the editable fields for the cms popup
);
}
}
客户端页面
class ClientPage extends Page{
private static $has_many = array(
'Clients'=>'Client'
);
public function getCMSFields()
{
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.Client', GridField::create(
'Client',
'Client List',
$this->Clients(),
GridFieldConfig_RecordEditor::create()
));
return $fields;
}
}
class ClientPage_Controller extends Page_Controller{
public function init() {
parent::init();
}
}
如果我尝试使用相同的数据对象制作目录页面,它不起作用
class ClientDirectoryPage extends Page {
private static $has_many = array(
'Clients'=>'Client'
);
public function getCMSFields()
{
$fields = parent::getCMSFields();
return $fields;
}
}
class ClientDirectoryPage_Controller extends Page_Controller{
public function init() {
parent::init();
}
}
您的代码无法正常工作,因为您尝试 Polymorfic has-one relation 错误地实施。
但是根据您的目标,您应该:
- 一个
ClientPage
那个has_one
客户端(那么Client字段实际上就是ClientPage字段,1-1关系)
一个 ClientDirectoryPage
显示到 ClientPages 的链接集合,并且关系可以通过多种方式实现。
一个。使用 SiteTree 层次结构:将几个 ClientPages 放在 ClientDirectoryPage 下,并使用 ClientDirectoryPage::Children()
访问列表
b。在 ClientDirectoryPage_Controller::ClientPages()
中获取所有页面的列表,如 ClientPage::get()
我似乎无法弄清楚如何以多种方式使用数据对象。现在我只能让它显示在一页中。
我希望能够在 cms 中编辑 table 的项目,在一页上显示项目列表,然后在另一页上显示一个特定项目。
到目前为止,这是我构建它的方式,它允许我在页面中列出所有客户端并在 CMS 中编辑它们。我无法在 "clientPage" 以外的页面上列出它们,也看不到一个客户的详细视图页面。
class Clients extends DataObject {
public static $db = array(
//All the table columns
);
// One-to-one relationship with profile picture
public static $has_one = array(
'ProfilePicture' => 'Image',
'ClientPage' => 'ClientPage'
);
// Summary fields
public static $summary_fields = array(
'ProfilePicture.CMSThumbnail'=>'Picture',
'FIRST_NAME'=>'First Name',
'LAST_NAME'=>'Last Name',
'EMAIL'=>'Email'
);
public function getCMSFields_forPopup() {
// Profile picture field
$thumbField = new UploadField('ProfilePicture', 'Profile picture');
$thumbField->allowedExtensions = array('jpg', 'png', 'gif');
// Name, Description and Website fields
return new FieldList(
//all the editable fields for the cms popup
);
}
}
客户端页面
class ClientPage extends Page{
private static $has_many = array(
'Clients'=>'Client'
);
public function getCMSFields()
{
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.Client', GridField::create(
'Client',
'Client List',
$this->Clients(),
GridFieldConfig_RecordEditor::create()
));
return $fields;
}
}
class ClientPage_Controller extends Page_Controller{
public function init() {
parent::init();
}
}
如果我尝试使用相同的数据对象制作目录页面,它不起作用
class ClientDirectoryPage extends Page {
private static $has_many = array(
'Clients'=>'Client'
);
public function getCMSFields()
{
$fields = parent::getCMSFields();
return $fields;
}
}
class ClientDirectoryPage_Controller extends Page_Controller{
public function init() {
parent::init();
}
}
您的代码无法正常工作,因为您尝试 Polymorfic has-one relation 错误地实施。
但是根据您的目标,您应该:
- 一个
ClientPage
那个has_one
客户端(那么Client字段实际上就是ClientPage字段,1-1关系) 一个
ClientDirectoryPage
显示到 ClientPages 的链接集合,并且关系可以通过多种方式实现。一个。使用 SiteTree 层次结构:将几个 ClientPages 放在 ClientDirectoryPage 下,并使用
访问列表ClientDirectoryPage::Children()
b。在
ClientDirectoryPage_Controller::ClientPages()
中获取所有页面的列表,如
ClientPage::get()