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.

We're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

DataObjectManager Module /

Discuss the DataObjectManager module, and the related ImageGallery module.

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

DataObject in SiteConfig


Go to End


3 Posts   1468 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 %>