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   611 Views

Avatar
merrick_sd

12 January 2013 at 1:23am Community Member, 95 Posts

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

12 January 2013 at 2:29am Community Member, 189 Posts

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;
   }

}