2016-03-22 6 views
0

複数の方法でデータオブジェクトを使用する方法を理解できないようです。今は1ページに表示することしかできません。複数のページに表示するSilverstripeデータオブジェクト

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

ClientPage

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

答えて

0

あなたが実装しようとするのであなたのコードは動作しません。 Polymorfic has-one relationが間違っています。

は、しかし、あなたの目標に応じて、あなたが持っている必要があります。

  1. ClientPagehas_oneそのクライアント([クライアントフィールドは1-1関係として、効果的にClientPageフィールドです)
  2. ClientDirectoryPageディスプレイリンクのコレクションを関係をいくつかの方法で実装することができます。

    a。 SiteTree階層を使用する:いくつかのClientPagesをClientDirectoryPageの下に置き、ClientDirectoryPage::Children()

    bでリストにアクセスします。 ClientPage::get()のすべてのページのリストをClientDirectoryPage_Controller::ClientPages()

+0

としてください。なぜ、別のクライアントクラスが必要なのでしょうか。 –

+0

どうすればいいですか?提供されたリンクが設定されているクライアントページを1つだけ作成する場合。私はすでにテーブルのクライアントがいっぱいで、それぞれのページを作成したくない..私は$ datObjectを使用することができます把握しようとしています::テーブルのすべての行のリストを表示する取得.. CAnそれを見せてくれる? – silversunhunter

+0

クライアントには複数のデータフィールドがあり、サイト管理者によってサイト内で管理されます。 ... – silversunhunter

関連する問題