Jump to:

3373 Posts in 998 Topics by 712 members

Data Model Questions

SilverStripe Forums » Data Model Questions » Extending sub classes of DataObject

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Page: 1
Go to End
Author Topic: 454 Views
  • ContentBloom
    Avatar
    Community Member
    5 Posts

    Extending sub classes of DataObject Link to this post

    I want to create a generic "slide" sub class of DataObject that can be extended for use on different page types. E.g. some page types' slides might/might not want a title field.

    I want to avoid duplicating and renaming the code of a Slide dataobject and extend the base on instead as per best OO practice. However when I try and do this, I just get SilverStripe errors. I've put my base, extended and page classes below. Does anyone have any insight into this?

    Much appreciated.

    The base slide class

    <?php
    class Slide extends DataObject {
    /**
    *
    * DB fields
    * @var unknown_type
    */
    static $db = array (
    'Title' => 'Varchar(255)',
    'Text' => 'Text',
       'Link' => 'Text'
    );

    /**
    *
    * Relations
    * @var array
    */
    static $has_one = array (
    'Image' => 'Image'
    );

    /**
        *
        * Fields to show in the DOM table
        * @var array
        */
    static $summary_fields = array(
    'Thumb' => 'Image',
    'Title' => 'Title',
       'Text' => 'Text'
    );

    /**
    * (non-PHPdoc)
    * @see httpdocs/sapphire/core/model/DataObject::getCMSFields()
    */
    public function getCMSFields()
    {
    return new FieldSet(
    new TextField('Title'),
    new TextField('Text'),
    new TextField('Link'),
    new ImageField('Image', 'Image', null, null, null, 'slides')
    );
    }

    /**
    *
    * Generate our thumbnail for the DOM
    */
    public function getThumb()
    {
    if($this->ImageID)
    return $this->Image()->CMSThumbnail();
    else
    return '(No Image)';
    }

    }

    The PageSlide sub class

    <?php
    class PageSlide extends Slide {

    static $has_one = array (
       'ProductPage' => 'ProductPage',
       'Image' => 'Image'
    );
    }

    Use on a page

    <?php
    class ProductPage extends ArticlePage {
       public static $db = array(
          'ShowOnProductHolder' => "Enum('Yes,No')",
          'Introduction' => 'Text'
       );

       public static $has_one = array(
          'PageSildes' => 'PageSlide'
       );
       
       public function getCMSFields() {
          $fields = parent::getCMSFields();
          $fields->addFieldToTab('Root.Content.Main', new TextField('Introduction', "Introduction"), 'Content');
          $manager = new DataObjectManager(
    $this,
    'PageSlides',
    'PageSlide'
    );
    $fields->addFieldToTab("Root.Content.Slideshow", $manager);
    // Add the dispaly on productholder page drop down
    $fields->addFieldToTab('Root.Content.Main', new DropdownField('ShowOnProductHolder', 'Show product on Products and applications page?', $this->dbObject('ShowOnProductHolder')->enumValues()));
    return $fields;
       }
    }

  • ContentBloom
    Avatar
    Community Member
    5 Posts

    Re: Extending sub classes of DataObject Link to this post

    A bit more info, enabling development mode, I get the following error...

    Line 324 in /mnt/hgfs/www/epse/httpdocs/sapphire/forms/TableListField.php
    Source

    315             }
    316          });
    317 JS
    318       );}
    319       return $this->renderWith($this->template);
    320    }
    321    
    322    function Headings() {
    323       $headings = array();
    324       foreach($this->fieldList as $fieldName => $fieldTitle) {
    325          $isSorted = (isset($_REQUEST['ctf'][$this->Name()]['sort']) && $fieldName == $_REQUEST['ctf'][$this->Name()]['sort']);
    326          // we can't allow sorting with partial summaries (groupByField)
    327          $isSortable = ($this->form && $this->isFieldSortable($fieldName) && !$this->groupByField);
    328
    329          // sorting links (only if we have a form to refresh with)
    330          if($this->form) {

    Trace

    TableListField->Headings()
    Line 288 of DataObjectManager.php
    DataObjectManager->HasSearch()
    Line 369 of ViewableData.php
    ViewableData->obj(HasSearch,,,1,)
    Line 411 of ViewableData.php
    ViewableData->cachedCall(HasSearch,)
    Line 424 of ViewableData.php
    ViewableData->hasValue(HasSearch)
    Line 257 of .cache.dataobject_manager.templates.FileDataObjectManager.ss
    include(/tmp/silverstripe-cache-mnt-hgfs-www-epse-httpdocs/.cache.dataobject_manager.templates.FileDataObjectManager.ss)
    Line 420 of SSViewer.php
    SSViewer->process(FileDataObjectManager)
    Line 342 of ViewableData.php
    ViewableData->renderWith(FileDataObjectManager)
    Line 275 of ComplexTableField.php
    ComplexTableField->FieldHolder()
    Line 282 of DataObjectManager.php
    DataObjectManager->FieldHolder()
    Line 369 of ViewableData.php
    ViewableData->obj(FieldHolder,,,1)
    Line 446 of ViewableData.php
    ViewableData->XML_val(FieldHolder,,1)
    Line 73 of .cache.sapphire.templates.TabSetFieldHolder.ss
    include(/tmp/silverstripe-cache-mnt-hgfs-www-epse-httpdocs/.cache.sapphire.templates.TabSetFieldHolder.ss)
    Line 420 of SSViewer.php
    SSViewer->process(TabSet)
    Line 342 of ViewableData.php
    ViewableData->renderWith(TabSetFieldHolder)
    Line 80 of TabSet.php
    TabSet->FieldHolder()
    Line 369 of ViewableData.php
    ViewableData->obj(FieldHolder,,,1)
    Line 446 of ViewableData.php
    ViewableData->XML_val(FieldHolder,,1)
    Line 58 of .cache.sapphire.templates.TabSetFieldHolder.ss
    include(/tmp/silverstripe-cache-mnt-hgfs-www-epse-httpdocs/.cache.sapphire.templates.TabSetFieldHolder.ss)
    Line 420 of SSViewer.php
    SSViewer->process(TabSet)
    Line 342 of ViewableData.php
    ViewableData->renderWith(TabSetFieldHolder)
    Line 80 of TabSet.php
    TabSet->FieldHolder()
    Line 369 of ViewableData.php
    ViewableData->obj(FieldHolder,,,1)
    Line 446 of ViewableData.php
    ViewableData->XML_val(FieldHolder,,1)
    Line 77 of .cache.sapphire.templates.Includes.Form.ss
    include(/tmp/silverstripe-cache-mnt-hgfs-www-epse-httpdocs/.cache.sapphire.templates.Includes.Form.ss)
    Line 420 of SSViewer.php
    SSViewer->process(Form)
    Line 342 of ViewableData.php
    ViewableData->renderWith(Array)
    Line 1108 of Form.php
    Form->forTemplate()
    Line 447 of ViewableData.php
    ViewableData->XML_val(EditForm,,1)
    Line 13 of .cache.cms.templates.Includes.CMSMain_right.ss
    include(/tmp/silverstripe-cache-mnt-hgfs-www-epse-httpdocs/.cache.cms.templates.Includes.CMSMain_right.ss)
    Line 420 of SSViewer.php
    SSViewer->process(CMSMain)
    Line 342 of ViewableData.php
    ViewableData->renderWith(Array)
    Line 492 of LeftAndMain.php
    LeftAndMain->Right()
    Line 369 of ViewableData.php
    ViewableData->obj(Right,,,1)
    Line 446 of ViewableData.php
    ViewableData->XML_val(Right,,1)
    Line 71 of .cache.cms.templates.LeftAndMain.ss
    include(/tmp/silverstripe-cache-mnt-hgfs-www-epse-httpdocs/.cache.cms.templates.LeftAndMain.ss)
    Line 420 of SSViewer.php
    SSViewer->process(CMSMain)
    Line 202 of Controller.php
    Controller->handleAction(SS_HTTPRequest)
    Line 143 of RequestHandler.php
    RequestHandler->handleRequest(SS_HTTPRequest)
    Line 147 of Controller.php
    Controller->handleRequest(SS_HTTPRequest)
    Line 282 of Director.php
    Director::handleRequest(SS_HTTPRequest,Session)
    Line 125 of Director.php
    Director::direct(/admin)
    Line 127 of main.php

    454 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.