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.

Customising the CMS

Show and Edit producing errors with editor pop-up (2.4.0)


Reply

2 Posts   1454 Views

Avatar
Laurie

28 May 2010 at 7:33am Community Member, 21 Posts

Following the ComplexTableField example in Chapter 5 of the SilverStripe book, I've added a news item section for my home page with the following code:

NewsItem.php

class NewsItem extends DataObject {
   static $db = array(
      'Headline' => 'Varchar',
      'Text' => 'Text',
      'StartDate' => 'Date',
      'EndDate' => 'Date',
      'Link' => 'Varchar'
   );
   
   function getCMSFields() {
      $fields = new FieldSet(
         new TextField('Headline', 'Headline'),
         new TextareaField('Text', 'Blurb'),
         new TextField('Link', 'Link'),
         new DateField('StartDate', 'Start Date'),
         new DateField('EndDate', 'End Date')
      );
      return $fields;
   }
}

HomePage.php

class HomePage extends Page {
   static $db = array(
   );
   
   static $has_many = array(
      'HomePageNews' => 'NewsItem'
   );

   function getCMSFields() {
      $fields = parent::getCMSFields();
      $newsTable = new ComplexTableField($this, 'HomePageNews', 'NewsItem', array('Headline'=>'Headline', 'StartDate'=>'StartDate', 'EndDate'=>'EndDate'));
      $fields -> addFieldToTab('Root.Content.NewsItems', $newsTable);
      return $fields;
   }
}
class HomePage_Controller extends Page_Controller {
}

For the most part things work...I have a lovely new "News Items" tab in the CMS, when I select add I get a pop-up with all of the correct fields, and the news items are saved and deleted from the database as expected.

However, the show and edit buttons produce a "500 - Internal server error" and the SilverStripe log shows:

[27-May-2010 02:49:29] Warning at \sapphire\core\model\DataObject.php line 1328: array_flip() [<a href='function.array-flip'>function.array-flip</a>]: The argument should be an array (http://www.devtechsys.mirror/admin/EditForm/field/HomePageNews/item/1/show?ajax=1)

Thoughts?

Thanks so much.

Cheers,
Laurie

Avatar
karoldvl

10 July 2010 at 1:19am Community Member, 1 Post

I've stumbled here trying to debug the same error.

Maybe it will be helpful for somebody in the future. I think you're missing the second part of the relation - at least that was my case.

Adding in NewsItem.php:

static $has_one = array(
"HomePage" => "HomePage"
);

should do the trick.