Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Data Model Questions

Extending sub classes of DataObject


Reply

2 Posts   560 Views

Avatar
ContentBloom

1 November 2011 at 3:18am Community Member, 5 Posts

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

Avatar
ContentBloom

1 November 2011 at 3:21am (Last edited: 1 November 2011 3:22am), Community Member, 5 Posts

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