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 /

Customising gridField in CMS? (SS3) // SOLVED


Reply


3 Posts   681 Views

Avatar
LinseyM

Community Member, 99 Posts

13 May 2013 at 7:14am

Edited: 13/05/2013 7:17am

Hi there,

Since I've now realised that $gridField doesn't use "getCMSFields_forPopup()"*, how can I control my gridField to specify:

1) The upload folder for an image?
2) The title/label of the field(s) that are displayed in the CMS? (so I can can display something like: "Brand Logo (100x50px)" for the logo image field, instead of just "Logo")

Many thanks.

*despite stumbling on an online tutorial that said it did... (http://www.inforbiro.com/blog-eng/silverstripe-gridfield-tutorial/)

ps here is my code:

Data Object (Partner.php)

class Partner extends DataObject {

   // object's fields
   public static $db = array(
      'BrandName' => 'Varchar(255)',
      'OrderBy' => 'Varchar(5)'
   );

   // One-to-one relationships
   public static $has_one = array(
      'Logo' => 'Image',
      'GalleryPic' => 'Image',
      'Partners' => 'Partners'
   );

   // Summary fields
   public static $summary_fields = array(
      'Logo.StripThumbnail' => 'Image',
      'BrandName' => 'BrandName',
      'OrderBy' => 'OrderBy'
   );

   static $default_sort = "OrderBy";

}

And the Holding Page (Partners.php)

   public static $has_many = array(
      'Partners' => 'Partner'
   );

function getCMSFields() {

      $fields = parent::getCMSFields();

      $fields->removeByName("RightColumn");

      $gridFieldConfig1 = GridFieldConfig::create()->addComponents(
         new GridFieldToolbarHeader(),
         new GridFieldAddNewButton('toolbar-header-right'),
         new GridFieldSortableHeader(),
         new GridFieldDataColumns(),
         new GridFieldPaginator(10),
         new GridFieldEditButton(),
         new GridFieldDeleteAction(),
         new GridFieldDetailForm()
      );
      
      $gridField = new GridField("Partners", "Brand Partners:", $this->Partners(), $gridFieldConfig1);
      $fields->addFieldToTab("Root.BrandPartners", $gridField);
         
      return $fields;
}

Avatar
simon_w

Forum Moderator, 474 Posts

13 May 2013 at 8:18am

GridField, like ComplexTableField, uses the getCMSFields() method on the managed DataObject.

Avatar
LinseyM

Community Member, 99 Posts

13 May 2013 at 8:33am

OK, that worked once I figured out how to reference it (just Root.Main). Awesome. Thank you Simon. Much appreciated.

Just in case anyone is wondering:

I added the following code to the data object Partner.php

function getCMSFields() {

      $fields = parent::getCMSFields();

         $uploadField = new UploadField('Logo', 'Brand Logo:');
         $uploadField->getValidator()->allowedExtensions = array('jpg', 'gif', 'png');
         $uploadField->setFolderName('assets/BrandPartners');
         $fields->addFieldToTab('Root.Main', $uploadField);
         
      return $fields;
}

}