Jump to:

7940 Posts in 1543 Topics by 946 members

DataObjectManager Module

SilverStripe Forums » DataObjectManager Module » I can add objects to DOM, but not edit them

Discuss the DataObjectManager module, and the related ImageGallery module.

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

Page: 1
Go to End
Author Topic: 1061 Views
  • theoldlr
    Avatar
    Community Member
    103 Posts

    I can add objects to DOM, but not edit them Link to this post

    Here is my DOM:

    class VideoHolder extends Page {

    static $has_many = array(
    'VideoObjects' => 'VideoObject'
    );

    public function getCMSFields()
    {
    $fields = parent::getCMSFields();
    $datamanager = new DataObjectManager(
    $this, // Controller
    'VideoObjects', // Source name
    'VideoObject', // Source class
    array(
    'Category' => 'Category',
    'Description' => 'Description',
    'YouTubeLink' => 'YouTubeLink',
    'URLSegment' => 'URLSegment'
    ), // Headings
    'getCMSFields_forPopup'// Detail fields (function name or FieldSet object)
    // Filter clause
    // Sort clause
    // Join clause
    );
    //$datamanager->setPopupWidth('675');

    $fields->addFieldToTab("Root.Content.Videos",$datamanager);
    return $fields;
    }

    }

    and my DataObject:

    class VideoObject extends DataObject {

    static $db = array (
    'Category' => "Enum('Auto Load and Unload, Cappers, DeCappers, Fillers, Leak Detection, Robotics, Washers', 'Auto Load and Unload')",
    'Description' => 'Varchar(255)',
    'YouTubeLink' => 'Varchar(255)',
    'ShortCode' => 'HTMLText',
    'URLSegment' => 'Varchar(255)'
    );

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

    public function getCMSFields_forPopup()
    {
    return new FieldSet(
    new DropdownField(
    $name = "Category",
    $title = "Video Category",
    $source = singleton('VideoObject')->dbObject('Category')->enumValues()
    ),
    new TextField('Description','Description (text appears in link)'),
    new TextField('YouTubeLink','URL of YouTube Page')
    );
    }

    public function onBeforeWrite()
    {
    if($this->Description){
    $this->URLSegment = SiteTree::GenerateURLSegment($this->Description);
    if($object = DataObject::get_one($this->ClassName, "URLSegment='" .$this->URLSegment
    ."' AND ID !=".$this->ID)){
    $this->URLSegment = $this->URLSegment.'-'.$this->ID;
    }
    // else {
    //$this->URLSegment = SiteTree::GenerateURLSegment($this->ClassName.'-'.$this->ID);
    //}
    }
    if($this->YouTubeLink){
    $this->ShortCode = '[YouTube id="'.substr($this->YouTubeLink,strpos($this->YouTubeLink,"watch?v=")+8,strlen($this->YouTubeLink)).'"]';
    }

    parent::onBeforeWrite();
    }

    function ShowActionLink(){
    if($this->VideoHolder()){
    return $this->VideoHolder()->Link().'show/'.$this->URLSegment;
    }
    }

    }

    If the environment type is 'dev' I get a notice in the popup:
    [Notice] Undefined index: start
    GET /admin/EditForm/field/VideoObjects/item/1?SecurityID=11197/edit?ctf[VideoObjects][start]=0&ctf[VideoObjects][per_page]=10&ctf[VideoObjects][showall]=0&ctf[VideoObjects][sort]=&ctf[VideoObjects][sort_dir]=&ctf[VideoObjects][search]=&ctf[VideoObjects][filter]=

    Line 139 in C:\website\cs\dataobject_manager\code\DataObjectManager.php

    If environment type is not 'dev' I get the pop up, but the fields are not editable.

    TIA

    Luke

  • theoldlr
    Avatar
    Community Member
    103 Posts

    Re: I can add objects to DOM, but not edit them Link to this post

    I'm having this same problem again (can add but not edit) with a new error. This is a totally different install, different site, different everything actually. This time the Error is an SQL error:
    "Couldn't run query: SELECT "StaffMember"."ClassName", "StaffMember"."Created", "StaffMember"."LastEdited", "StaffMember"."Name", "StaffMember"."Title", "StaffMember"."Bio", "StaffMember"."StaffMemberPageID", "StaffMember"."PhotoID", "StaffMember"."ID", CASE WHEN "StaffMember"."ClassName" IS NOT NULL THEN "StaffMember"."ClassName" ELSE 'StaffMember' END AS "RecordClassName" FROM "StaffMember" WHERE ("ParentID" = '2') Unknown column 'ParentID' in 'where clause'"

    Anyone have ideas? I'm pretty sure the last time i fixed this by updating to a new verstion of DOM iirc. I'm now using r540, but no joy.
    code below:

    class StaffMemberPage extends Page{
       static $has_many=array(
          'StaffMembers'=>'StaffMember'
       );
       
       public function getCMSFields(){
          $fields=parent::getCMSFields();
          $manager = new DataObjectManager(
             $this,
             'StaffMembers',
             'StaffMember',
             array(
                'Thumbnail' => 'Photo',
                'Name'=>'Name',
                'Title'=>'Title'
             ),
             'getCMSFields_forPopup'
          );   
          $fields->addFieldToTab('Root.Content.Staff',$manager);
          return $fields;
       }


    class StaffMember extends DataObject{
       static $db = array(
          'Name' => 'Text',
          'Title' => 'Text',
          'Biography' => 'HTMLText'
       );
       
       static $has_one = array(
          'StaffMemberPage' => 'StaffMember',
          'Photo' => 'Image'
       );
       
       public function getCMSFields_forPopup(){
          $imageUploadField = new ImageUploadField(
             'Photo',
             'Photo to add:',
             array(
                'buttonText' => 'Upload an image'
             )
          );
          
          $imageUploadField->setuploadFolder('Images/StaffMembers');
          $imageUploadField->allowFolderSelection = false;
          return new FieldSet(
             $imageUploadField,
             new TextField('Name', 'Name:'),
             new TextField('Title', 'Title:'),         
             new SimpleTinyMCEField('Biography','Biography')
          );
       }
       
       function Thumbnail(){
          $Photo = $this->Photo();
          if($Photo){
             return $Photo->CMSThumbnail();
          }
          else{
             return null;
          }
       }

    Also (and this may be part of the problem) my SimpleTinyMCEField looks like a SimpleHTMLEditorField--no toolbar with buttons etc.
    Thanks!

  • UncleCheese
    Avatar
    4085 Posts

    Re: I can add objects to DOM, but not edit them Link to this post

    Mmm... do you see something wrong here?

    static $has_one = array(
    'StaffMemberPage' => 'StaffMember',
    'Photo' => 'Image'
    );

  • theoldlr
    Avatar
    Community Member
    103 Posts

    Re: I can add objects to DOM, but not edit them Link to this post

    OBVIOUSLY! I guess thats what happens when you stay up way too late writing code.

    My DOM is functional now, but the SimpleTinyMCEField still has no buttons. I'm getting a JS error in firebug that points to '$(function(){' in this script:

    <script type="text/javascript">//<![CDATA[

    $(function() {
                $('#DataObjectManager_Popup_AddForm_Biography').tinymce({
                 plugins : 'safari,paste',
                 theme : 'advanced',
              theme_advanced_buttons1 : 'bold,italic,underline,|,justifyleft,justifycenter,justifyright,|,styleselect,formatselect',theme_advanced_buttons2 : 'cut,copy,paste,pastetext,pasteword,|,bullist,numlist,|,link,unlink,anchor,image,|,code',theme_advanced_buttons3 : '',theme_advanced_buttons4 : '',   
              theme_advanced_toolbar_location : 'top',
           theme_advanced_toolbar_align : 'left',
           theme_advanced_statusbar_location : 'bottom',
           theme_advanced_resizing : false,
    paste_auto_cleanup_on_paste : true,
    paste_remove_spans: true,
    paste_remove_styles: true,       
              content_css : ''
             
           });
           });

    //]]></script>


    Nothing jumps out at me immediately here except that it mentions 'safari' and I'm using firefox. It is on a mac though.
    Any ideas? Thanks!

  • edski
    Avatar
    Community Member
    12 Posts

    Re: I can add objects to DOM, but not edit them Link to this post

    Hi,

    I've got a similar issue with editing existing data objects.

    I am using it for a number of things, incuding testimonials - very similar to the tutorial here: http://doc.silverstripe.org/old/modules:dataobjectmanager

    Bizarrely, if I have more than one, I can use the prev/next buttons and edit the content in the popup fine. However, I can't edit the first 1 I click on. Any ideas?

    class Testimonial extends DataObject
    {
       static $db = array (
          'Quote' => 'Text',
          'Author' => 'Text'
       );
       
       static $has_one = array (
          'Page' => 'Page'
       );
       
       public function getCMSFields_forPopup()
       {
          return new FieldSet(
             new TextField('Quote', "Quote (no punctuation)"),
             new TextField('Author', "Author name")
          );
       }
       
    }

    It's probably not best pratice, but I am extending my page class as I need to be able to add testimonials in across the site:

    class Page extends SiteTree {
    ...

       static $has_many = array (
          'Testimonials' => 'Testimonial'
       );   

    ...
       $TestimonialDataManager = new DataObjectManager(
          $this, // Controller
          'Testimonials', // Source name
          'Testimonial', // Source class
          array(
             "Quote" => "Quote",
             "Author" => "Author name"
          ), // Headings
          'getCMSFields_forPopup' // Detail fields function or FieldSet
          // Filter clause
          // Sort clause
          // Join clause
          );
          $fields->addFieldToTab("Root.Content.Testimonials", $TestimonialDataManager);

    I can add them and get them to display fine - just the editing is not quite working as it should...

    Thanks in advance.

  • edski
    Avatar
    Community Member
    12 Posts

    Re: I can add objects to DOM, but not edit them Link to this post

    I think I have tracked the issue down - it looks like it might be related to the SecureFiles module. The link in the edit buttons - and this is the same in the Files & Images section - is not correct:

    /admin/EditForm/field/Testimonials/item/8?SecurityID=e26aa5351da9fe08e317cd0e6c681fef66f3c2e4/edit?ctf[Testimonials][start]=0&ctf[Testimonials]

    For some reason it is adding the security ID element of the querystring in the wrong place.

    Not sure how to fix it still

  • edski
    Avatar
    Community Member
    12 Posts

    Re: I can add objects to DOM, but not edit them Link to this post

    FIXED!

    It was after all an issue with the DataObjectManager. I saw this thread on Uncle Cheese's site:

    http://www.leftandmain.com/silverstripe-modules/2010/09/01/uploadify-filedom-together-at-last/#comment-243

    But actually saw that the latest version of DOM fixed it anyway. Installed that and all sorted...

    1061 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.