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

dataobjectmanager in eventcalendar


Go to End
Reply


10 Posts   2570 Views

Avatar
not2dumb

Community Member, 16 Posts

23 July 2009 at 11:50pm

hi guys,
me again.

i try to add a dataobjectmanager class to a pagetyp which extends the calenderevent class.

the class:

<?php

class MorePic extends DataObject {
   static $db = array (
      'Name' => 'Text',
      'Description' => 'Text'
   );
   
   static $has_one = array (
      'Attachment' => 'Image',
      'EventSeite' => 'EventSeite'
   );
   
   public function getCMSFields_forPopup()
   {
      return new FieldSet(
         new TextField('Name'),
         new TextareaField('Description', 'Beschreibung'),
         new FileIFrameField('Attachment', 'Bild')
      );
   }
}

?>

now my headache:
in the file Eventseite.php this piece of code makes the dataobjectmanger work in the cms, but they won't show up in the template:

...
   static $HasManyDataObjectManager = array (
      'MorePic' => 'MorePic'
   );
...

if i try this,

...
   static $has_many = array (
      'MorePic' => 'MorePic'
   );
...


the pictures are correctly displayed on the rendered page, but the access to the cms is impossible, i get the following error-message:

Fatal error: Class name must be a valid object or a string in D:\xampp\htdocs\tads\event_calendar\code\CalendarEvent.php on line 69

how do i apply the MorePic class correctly?

thanx alot, p.

Avatar
UncleCheese

Forum Moderator, 4094 Posts

24 July 2009 at 1:10am

Can you show us your template code? The Eventseite.php code? Looks like you've made a pretty basic error.

Avatar
not2dumb

Community Member, 16 Posts

24 July 2009 at 1:21am

sure,
here it is:

<?php

class EventSeite extends CalendarEvent {
   static $db = array(
      'Premiere' => 'Date',
      'Urauffuehrung' => 'Date',
      'Stab' => 'HTMLText'
   );
   static $has_one = array(
   );
   static $HasManyDataObjectManager = array (
      'MorePic' => 'MorePic'
   );
/*   static $has_many = array (
      'MorePic' => 'MorePic'
   );
*/
static $icon = "themes/tads/images/treeicons/event";
   
   function getCMSFields() {
      $fields = parent::getCMSFields();
      
      $manager = new ImageDataObjectManager(
         $this, // Controller
         'MorePic', // Source name
         'MorePic', // Source class
         'Attachment', // File name on DataObject
         array(
         'Name' => 'Name',
         'Description' => 'Description',
         ), // Headings
         'getCMSFields_forPopup' // Detail fields (function name or FieldSet object)
         // Filter clause
         // Sort clause
         // Join clause
      );
      $manager->setAddTitle('Mehr Szenenbilder');
      $manager->setPluralTitle('Weitere Szenenbilder');
      $manager->setBrowseButtonText('Bilder hochladen (nur JPG)');
      //$manager->allowUploadFolderSelection();
      
      $fields->addFieldToTab("Root.Content.Bilder",$manager);
      $fields->addFieldToTab("Root.Content.Main", new CalendarDateField('Premiere'), 'Content');
      $fields->addFieldToTab("Root.Content.Main", new CalendarDateField('Urauffuehrung'), 'Content');
      $fields->addFieldToTab("Root.Content.Main", new HtmlEditorField('Stab'), 'Content');
      return $fields;
   }
}

class EventSeite_Controller extends CalendarEvent_Controller {
   
}
?>

the two date fields are for statistic reasons only

thanx, p.

Avatar
UncleCheese

Forum Moderator, 4094 Posts

24 July 2009 at 1:26am

You need to spec a datetime class in your CalendarEvent subclass

$has_many = array ('Dates' => 'MyDateTimeClass');

This should be improved to fall back on CalendarDateTime if none is specified.

Avatar
not2dumb

Community Member, 16 Posts

28 July 2009 at 9:33am

hi uncle cheese,
or anyone who can help me.

i'm trying with little effort to extend the page "workshop" from the event_calender tutorial with a ImageDataObjectManager, to be able to associate more than ONE image to the "workshop".

to make it clear:
i try to put many images to one WORKSHOP, not to one DATE of the workshop.

i hope i put my question here in the right forum, as i think my problem concerns more the dataobjectmanager than the eventcalendar module.

hope you can help, as i'm more than confused after hours of trying...
thanx :-)

Avatar
UncleCheese

Forum Moderator, 4094 Posts

28 July 2009 at 10:03am

It would help if you could be a little more descriptive of what isn't working. Have you been through the tutorials on filedataobjectmanager?

Avatar
not2dumb

Community Member, 16 Posts

29 July 2009 at 10:08am

hi uncle cheese,
seems yesterday i was a bit too tired to be really clear.

what i try to do ist the following:
i have a page extending the Calendar class called EventAlle.php which is the holder for all the EventSeite.php pages extending the CalendarEvent class.
the EventSeite.php pages have a ImageDataObjectManager to be able to add them more than only one picture.
this is defined in the MorePic.php that extends the DataObject class.

the relationship between EventSeite.php and MorePic.php is defined via EventSeiteDateTime.php.

as far as i got everything right studying the tuts and your posts, this should be ok.
all this also works very well inside the cms, and the DB entrys also look ok to me.

the problem is i can't access the pictures from within the templates. i tried nearly every way i could imagine according to the tutorials, but nothing worked out.
though i'm quite convinced there HAS to be a way, but i'm afraid either i'm blind or my nickname is choosen badly... :-)

i put the sourcodes here:

EventAlle.php:

<?php

class EventAlle extends Calendar {
   static $db = array(
   );
   static $has_one = array('Chronikbild' => 'Image');

   static $has_many = array ('Vorstellungen' => 'EventSeite');

   static $allowed_children = array('EventSeite');

   static $icon = "themes/tads/images/treeicons/event";

   function getCMSFields() {
      $fields = parent::getCMSFields();
      $fields->addFieldToTab("Root.Content.Standardbild", new ImageField('Chronikbild', 'Standardbild für Chronik'));
      return $fields;
   }

}

class EventAlle_Controller extends Calendar_Controller {
   
}

?>

EventSeite.php:

<?php

class EventSeite extends CalendarEvent {
   static $db = array(
      'Premiere' => 'Date',
      'Urauffuehrung' => 'Date',
      'Stab' => 'HTMLText'
   );
   static $has_one = array();

   static $has_many = array('Dates' => 'EventSeiteDateTime');

   static $icon = "themes/tads/images/treeicons/event";
   
   function getCMSFields() {
      $fields = parent::getCMSFields();
      
      $manager = new ImageDataObjectManager($this, 'MorePic', 'MorePic', 'Attachment',
         array('Name' => 'Name', 'Description' => 'Description'),
         'getCMSFields_forPopup'
      );
      $manager->setAddTitle('Mehr Szenenbilder');
      $manager->setPluralTitle('Weitere Szenenbilder');
      $manager->setBrowseButtonText('Bilder hochladen (nur JPG)');
      
      $fields->addFieldToTab("Root.Content.Bilder",$manager);
      $fields->addFieldToTab("Root.Content.Main", new CalendarDateField('Premiere'), 'Content');
      $fields->addFieldToTab("Root.Content.Main", new CalendarDateField('Urauffuehrung'), 'Content');
      $fields->addFieldToTab("Root.Content.Main", new HtmlEditorField('Stab'), 'Content');
      return $fields;
   }
}

class EventSeite_Controller extends CalendarEvent_Controller {

}
?>

MorePic.php

<?php

class MorePic extends DataObject {
   static $db = array ('Name' => 'Text', 'Description' => 'Text');
   
   static $has_one = array ('Attachment' => 'Image', 'EventSeite' => 'EventSeite');
   
   public function getCMSFields_forPopup()
   {
      return new FieldSet(
         new TextField('Name'),
         new TextareaField('Description', 'Beschreibung'),
         new FileIFrameField('Attachment', 'Bild')
      );
   }
}

?>

EventSeiteDateTime.php

<?php

class EventSeiteDateTime extends CalendarDateTime
{
static $db = array ();

static $has_one = array ('EventSeite' => 'EventSeite');

static $has_many = array ('MorePic' => 'MorePic');

}

?>

by the way, i'm really new to silverstripe and hope i don't embarrass myself by a really stupid mistake i've made. i'm a beginner...

thanx for your help!
cheers, p.

Avatar
UncleCheese

Forum Moderator, 4094 Posts

29 July 2009 at 2:21pm

Sorry, it's not going to work. Right now you can't manage DataObject -> DataObject relationships with DataObjectManager. I'm working on implementing a NestedDataObjectManager field which will allow it to work in the popup of another DOM, but it's a lot of work. To be correct, your ImageDOM would have to be in the getCMSFields function of your DateTime class, not your EventClass, because the DateTime class is the one with the has_many relation. Try using a DataObjectManager in a popup window and it completely chokes. You'll have to setup the relationship of Images to an Event, not a Date. :(

Go to Top