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

Preview: DataObjectManager module


Go to End
Reply


379 Posts   63220 Views

Avatar
Howard

Community Member, 215 Posts

3 April 2009 at 2:25pm

Hi there, just more info of the bug reported a post above. I have tried on another OSX system, the popup worked as expected in Safari and in Firefox the popup appeared but only contained the statement "I can't handle sub-URLs of a CMSMain object."

Avatar
drye

Community Member, 49 Posts

3 April 2009 at 3:11pm

@ howardgrigg, I had this same issue and can't for the life of me remember what was causing it. I ended up fixing it though, it was something I was doing wrong in the code. I'll do my best to remember what it was. Good luck!

Avatar
Ben Gribaudo

Community Member, 181 Posts

4 April 2009 at 7:30am

Edited: 04/04/2009 7:30am

Cause of the issue mentioned in my post of 1 April 2009 at 10:03am:

http://open.silverstripe.com/changeset?old_path=%2Fmodules%2Fsapphire%2Fbranches%2Fnestedurls%2Fforms%2FForm.php&old=73041&new_path=%2Fmodules%2Fsapphire%2Ftrunk%2Fforms%2FForm.php&new=HEAD

Using the line from trunk, the pop-up's save button works correctly; with the line from nestedurls, it does not.

Ben

.

My post of 1 April 2009 at 10:03am:
I'm running revision 103 of DataObjectManager against revision 73881 of trunk. When I click the "save" button on the "add" pop-up window, the object I'm trying to add never gets saved to the database. Instead, I get sent to some kind of page that has an add link and a search box, etc.

The "add" pop-up window's form tag is as follows:
<form id="DataObjectManager_Popup_AddForm" action="admin/EditForm/field/Articles?ctf[Articles][per_page]=10&ctf[Articles][showall]=0&ctf[Articles][sort]=Created&ctf[Articles][sort_dir]=DESC&ctf[Articles][search]=&ctf[Articles][filter]=" method="post" enctype="application/x-www-form-urlencoded">

Is that the correct action? It looks funny to me.

Avatar
Aaron Brockhurst

Community Member, 30 Posts

4 April 2009 at 9:10am

Hi Uncle Cheese

Fantastic work! The DataObjectManager is just what I needed.

Do you have an example of how to setup ManyManyDataObjectManager? I want to use it to enable users to select images to go in the right column on the page and have have the ability to have different images on everypage. I might have missed something but when I use DataObjectManager it puts the same objects on every page.

Thanks

Aaron

Avatar
UncleCheese

Forum Moderator, 4096 Posts

4 April 2009 at 9:19am

Edited: 04/04/2009 9:19am

Hi, Aaron.

Great use of the DataObjectManager. I'd recommend using a ManyManyFileDataObjectManager if I were you, since it will display the images in a grid for you, as well as streamline the upload process.

If you have the many_many relation set up correctly, it should be the same as a ManyManyComplexTableField, only with one more argument.

new ManyManyFileDataObjectManager(
$this,
'MyImages'
'MyImage',
'Image' // The fieldname on the $has_one array of your MyImage dataobject.
array( // headers...
'getCMSFields_forPopup'
);

You can read more in the documentation in the SS wiki.

Avatar
micahsheets

Community Member, 165 Posts

4 April 2009 at 10:06am

Uncle Cheese. Thank you for all your hard work and help.

I would like to use the Testimonials page type to manage testimonials. I have set up the page so that I can add testimonials and I can see the database table where they are stored. What I don't know how to do is randomly grab a Testimonial and display it on any give page on the site. My guess is that in the Page_Controller I would have a function that could select a random Testimonial from the database and display the Testimonial Content and Author on my page. I don't need a page that shows all of the Testimonials.

Avatar
UncleCheese

Forum Moderator, 4096 Posts

4 April 2009 at 10:13am

Page_Controller

function RandomTestimonial()
{
return DataObject::get_one("Testimonial", null, true, "RAND()");
}

FYI: Please do not rely on the example code included with dataobject_manager. I'll be removing it soon. You can recreate it in mysite/code if you want.

Avatar
Amir Mostofi

Community Member, 59 Posts

8 April 2009 at 1:55pm

I have a simple question regarding the display of content in a template. I'm using FileDataObjectManager and my files are as follows:

Partner.php
-----------
<?php
class Partner extends DataObject
{
   static $db = array (
      'Name' => 'Text',
      'URL' => 'Text'
   );
   
   static $has_one = array (
      'Logo' => 'File',
      'PartnerPage' => 'PartnerPage'
   );
   
   public function getCMSFields_forPopup()
   {
      return new FieldSet(
         new TextField('Name'),
         new TextField('URL'),
         new FileIFrameField('Logo')
      );
   }
}
?>
-----------

PartnerPage.php
-----------
<?php
class PartnerPage extends Page
{
   static $has_many = array (
      'Partners' => 'Partner'
   );
   
   public function getCMSFields()
   {
      $f = parent::getCMSFields();
      $manager = new FileDataObjectManager(
         $this, // Controller
         'Partners', // Source name
         'Partner', // Source class
         'Logo', // File name on DataObject
         array(
            'Name' => 'Name',
            'URL' => 'URL'
         ), // Headings
         'getCMSFields_forPopup' // Detail fields (function name or FieldSet object)
         // Filter clause
         // Sort clause
         // Join clause
      );
      
      // If undefined, all types are allowed. Pass with or without a leading "."      
      $manager->setAllowedFileTypes(array('jpg','gif'));
      
      // Label for the upload button in the popup
      $manager->setBrowseButtonText("Upload (JPG or GIF only)");
      
      // In grid view, what field will appear underneath the icon. If left out, it defaults to the file title.
      $manager->setGridLabelField('Name');
      
      // Plural form of the objects being managed. Used on the "Add" button.
      // If left out, this defaults to [MyObjectName]s
      $manager->setPluralTitle('Partners');
            
      $f->addFieldToTab("Root.Content.Partners", $manager);
      
      $f->removeFieldFromTab('Root.Content', 'HeaderImage');      

      return $f;
   }

}

class PartnerPage_Controller extends Page_Controller
{
}
?>
-----------

PartnerLogo.ss
-----------
   <% if Partners %>
   <div id="partners"><div class="container">
      <div id="partner-logos">
      <ul>
         <% control Partners %>
         <li class="partner-logo"><a href="#" title="$Name" style="background-image: url('$Logo.URL')"><span>$Name</span></a></li>
         <% end_control %>
      </ul>
      </div>
   </div></div><!-- end #partners -->
   <% end_if %>
-----------

Can anyone tell me why the above template file PartnerLogos.ss does not return any Partners, when in the CMS I clearly have added records using dataobjectmanager and I can see them under the Partners tab in the CMS?

Go to Top