2016-03-22 5 views
0

Ich kann nicht herausfinden, wie ein Datenobjekt auf verschiedene Arten verwendet werden kann. Im Moment kann ich es nur auf einer Seite anzeigen lassen.Silverstripedatenobjekt, das auf mehreren Seiten angezeigt werden soll

Ich möchte in der Lage sein, die Elemente der Tabelle in den cms zu bearbeiten, eine Liste von Elementen auf einer Seite und dann ein bestimmtes Element auf einer anderen Seite anzuzeigen.

So habe ich es so weit strukturiert, dass ich alle Clients auf einer Seite auflisten und sie im CMS bearbeiten kann. Ich kann sie nicht auf einer anderen Seite als "clientPage" auflisten, noch kann ich eine Detailansichtsseite eines Clients sehen.

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

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

Wenn ich versuche, eine Verzeichnisseite mit den gleichen Daten zu machen Objekt, das es nicht

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

Antwort

0

Ihr Code funktioniert nicht, weil Sie versuchen, zu implementieren, Polymorfic has-one relation falsch.

jedoch nach Ihrem Ziel Sie haben sollten:

  1. A ClientPage dass has_one Client (dann Client-Felder sind effektiv ClientPage Felder, als 1-1-Beziehung)
  2. A ClientDirectoryPage zeigt eine Sammlung von Links zu ClientPages und die Beziehung kann auf verschiedene Arten implementiert werden.

    a. Verwenden der SiteTree-Hierarchie: mehrere ClientPages unter ClientDirectoryPage platzieren und mit ClientDirectoryPage::Children()

    auf die Liste zugreifen b. Hier finden Sie eine Liste aller Seiten als ClientPage::get() in ClientDirectoryPage_Controller::ClientPages()

+0

Bitte klären, warum sollten Sie eine separate Client-Klasse benötigen? –

+0

Was Wenn ich nur eine Client-Seite erstellen möchte, die mit dem angegebenen Link gefüllt wird. Ich habe eine Tabelle bereits voll von Klienten und will nicht eine Seite für jedes schaffen. Ich versuche herauszufinden, wie ich $ datObject :: get verwenden kann, um eine Liste aller Reihen in der Tabelle anzuzeigen Zeig mir das? – silversunhunter

+0

Clients verfügen über mehrere Datenfelder und werden vom Site-Administrator innerhalb der Site verwaltet. Sie sind keine Benutzer/Mitglieder ... – silversunhunter

Verwandte Themen