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.

DataObjectManager Module /

Discuss the DataObjectManager module, and the related ImageGallery module.

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

DataObject in SiteConfig


Reply


3 Posts   871 Views

Avatar
ABK

Community Member, 2 Posts

11 May 2012 at 12:25am

I am folllowing a walk through on using the data object manager in siteconfig (http://archive.ssbits.com/2-4-working-with-siteconfig/). I have managed to get it working to the point where I can add objects to the backend but I can't seem to get them to display on the template.

I am trying to loop through all items inside the object using a control loop but i don't seem to be having any joy... I get an error message [Notice] Undefined index:

SiteConfig Extender

<?php
class SiteConfigExtra extends DataObjectDecorator{

function extraStatics() {
return array(
'db' => array(
"phone" => "Varchar",
"email" => "Varchar",
"twitterEmbed" => "HTMLText",
"suppliers" => "HTMLText",
"googleanalytics" => "HTMLText"
),
'has_one' => array(
"logo" => 'Image',
"slogan" => 'Image',
"defaultbanner" => 'Image'
),
'has_many' => array(
"nemomembers" => "nemomember"
)
);
}

public function updateCMSFields(FieldSet &$fields) {
$fields->addFieldToTab("Root.Logo", new ImageField('logo', ' Logo (174x79)', Null, Null, Null, 'Uploads/site-assets/'));
$fields->addFieldToTab("Root.Logo", new ImageField('slogan', ' Slogan (483x52)', Null, Null, Null, 'Uploads/site-assets/'));
$fields->addFieldToTab("Root.Main", new TextField('phone',"Phone Number"));
$fields->addFieldToTab("Root.Main", new TextField('email',"Email Address"));
$fields->addFieldToTab("Root.Main", new TextAreaField('twitterEmbed',"Twitter Embed"));
$fields->addFieldToTab("Root.Main", new TextAreaField('googleanalytics',"Google Analytics"));
$fields->addFieldToTab("Root.Main", new ImageField('defaultbanner', 'Default Banner (973x200)', Null, Null, Null, 'Uploads/site-assets/'));
$fields->addFieldToTab("Root.Suppliers", new HTMLEditorField('suppliers',"Suppliers"));

$manager = new DataObjectManager(
$this->owner,
'NemoMembers',
'NemoMember'
);
$manager->setSourceID($this->owner->ID);
$fields->addFieldToTab("Root.NemoMembers", $manager);
}

}
class SiteConfig_DataObjectManager extends DataObjectManager {
function setSourceID($val) {
if (is_numeric($val)) {
$this->sourceID = $val;
}
}
function sourceID() {
if (isset($this->sourceID) && $this->sourceID !== null && is_numeric($this->sourceID)) {
return $this->sourceID;
}
return parent::sourceID();
}
}
?>

Member

<?php
class NemoMember extends DataObject
{
//db fields
static $db = array (
'Name'    => 'Varchar(255)',
   'Address1'    => 'Varchar(255)',
'Address2'    => 'Varchar(255)',
'Town'    => 'Varchar(255)',
'County'    => 'Varchar(255)',
'Postcode'    => 'Varchar(255)',
'Lat'    => 'Varchar(255)',
'Long'    => 'Varchar(255)',
'Email'    => 'Varchar(255)',
'Telephone'    => 'Varchar(255)'
);

//Relations
static $has_one = array (
'Logo'      => 'Image'
);

//Fields to show in the DOM table
static $summary_fields = array(
'Logo',
'Name',
'Address1',
'Postcode',
'Lat',
'Long'
);

   
   /**
    * Fields for DOM popup
    *
    * @param    void
    * @return    FieldSet DOM Object
    */
public function getCMSFields()
{
return new FieldSet(
new TextField('Name'),
new TextField('Address1'),
new TextField('Address2'),
new TextField('Town'),
new TextField('County'),
new TextField('Postcode'),
new TextField('Lat'),
new TextField('Long'),
new TextField('Email'),
new TextField('Telephone'),
new ImageField('Logo', 'Logo', Null, Null, Null, 'Uploads/member-logos/')
);
}
}

Template

<% control SiteConfig.NemoMembers %>
<p>$Name</p>
<% end_control %>

Please help, I have looked through other forum posts and haven't managed to get it to work. Please tell me it's something stupid that I have missed. It is driving me mad not being able to get it to work!

Many thanks,
Alex

Avatar
KayB

Community Member, 3 Posts

12 May 2012 at 12:57am

I just bumped on the same problem.. So subscribing on this thread
Any help would be awesome!

Avatar
DougProctor

Community Member, 1 Post

31 May 2012 at 5:11am

Edited: 31/05/2012 5:12am

You can create functions inside the SiteConfigExtra class that return dataobjects:

function NemoMembers() {
return DataObject::get('NemoMember');
}

Then you can output them in any template file like this:

<% control SiteConfig %>
<% control NemoMembers %>
<p>$Name</p>
<% end_control %>
<% end_control %>