要在多个页面中显示的银条数据对象



我似乎无法弄清楚如何以多种方式使用数据对象。现在我只能让它显示在一页中。

我希望能够在cms中编辑表格的项目,在一页上显示项目列表,然后在另一页上显示一个特定项目。

以下是我到目前为止的结构,它允许我在页面中列出所有客户端并在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 关系。

但是,根据您的目标,您应该拥有:

  1. has_one客户端的ClientPage(则"客户端"字段实际上是"客户端页面"字段,作为 1-1 关系)
  2. ClientDirectoryPage显示指向 ClientPages 的链接集合,关系可以通过多种方式实现。

    a. 使用 SiteTree 层次结构:将多个 ClientPages 放在 ClientDirectoryPage 下,并使用ClientDirectoryPage::Children()访问列表

    b. 获取ClientDirectoryPage_Controller::ClientPages()ClientPage::get()的所有页面的列表

相关内容

  • 没有找到相关文章

最新更新