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.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

General Questions /

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

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

SS3 GridFieldSortableRows() module


Go to End


2 Posts   1841 Views

Avatar
merrick_sd

Community Member, 99 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
copernican

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

}