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.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

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

SS3 GridFieldSortableRows() module


Reply


2 Posts   625 Views

Avatar
merrick_sd

Community Member, 95 Posts

12 January 2013 at 1:23am

does anyone know if this module can work with Model admin.

works if i attach it to on Page class in cms fields

eg:

// Create a default configuration for the new GridField, allowing record editing
      $config = GridFieldConfig_RelationEditor::create();
      $config->addComponent(new GridFieldSortableRows('SortOrder'));
      $config->addComponent(new GridFieldBulkEditingTools());
      //$config->addComponent(new GridFieldBulkImageUpload());
      // Create a gridfield to hold the student relationship
      $columnField = new GridField(
       'Banners', // Field name
       'Banner', // Field title
       Banner::get()->sort("SortOrder"), // List of all related students
       $config
       );
       // Create a tab named "Students" and add our field to it
      $fields->addFieldToTab('Root.Banners', $columnField);
      

but if i wanted it in model admin

eg BannerAdmin

class BannerAdmin extends ModelAdmin {

   public static $managed_models = array(
'Banner',
   );

static $url_segment = 'Banners'; // will be linked as /admin/products
   static $menu_title = 'Banners';

}

Avatar
IOTI

Community Member, 189 Posts

12 January 2013 at 2:29am

Hi Merrick

This is untested code but there's no reason it shouldn't work. You'll want to override the getEditForm() function in ModelAdmin.php. So in your BannerAdmin class:

class BannerAdmin extends ModelAdmin {

public static $managed_models = array(
'Banner',
);

static $url_segment = 'Banners'; // will be linked as /admin/products
static $menu_title = 'Banners';

function getEditForm($id = null, $fields = null) {
      $list = $this->getList();
      $exportButton = new GridFieldExportButton('before');
      $exportButton->setExportColumns($this->getExportFields());
      $listField = GridField::create(
         $this->modelClass,
         false,
         $list,
         $fieldConfig = GridFieldConfig_RecordEditor::create($this->stat('page_length'))
            ->addComponent($exportButton)
            ->removeComponentsByType('GridFieldFilterHeader')
            ->addComponents(new GridFieldPrintButton('before'))
       ->addComponent(new GridFieldSortableRows('SortOrder')) //add your extra components here
      );

      // Validation
      if(singleton($this->modelClass)->hasMethod('getCMSValidator')) {
         $detailValidator = singleton($this->modelClass)->getCMSValidator();
         $listField->getConfig()->getComponentByType('GridFieldDetailForm')->setValidator($detailValidator);
      }

      $form = new Form(
         $this,
         'EditForm',
         new FieldList($listField),
         new FieldList()
      );
      $form->addExtraClass('cms-edit-form cms-panel-padded center');
      $form->setTemplate($this->getTemplatesWithSuffix('_EditForm'));
      $form->setFormAction(Controller::join_links($this->Link($this->modelClass), 'EditForm'));
      $form->setAttribute('data-pjax-fragment', 'CurrentForm');

      $this->extend('updateEditForm', $form);
      
      return $form;
   }

}